Linux commands
查看操作
查看 linux 版本
lsb_release -a # 打印发行版的具体信息,包括发行版名称、版本号、代号等
cat /etc/issue
cat /etc/issue.net
cat /etc/lsb-release
cat /etc/os-release
uname -a
cat /proc/version
dmesg | grep "Linux"
yum info nano
yum repolist
rpm -q nano
apt-cache policy nano
查找包含字符串的 python 文件
find . -type f -name '*.py'|xargs grep 'xxx'
修改操作
history 命令优化
curl -L http://hengyunabc.github.io/bash_completion_install.sh | sh
命令
普通命令
ls
: 列出目录下的文件和目录。参数:
- -a:显示所有文件和目录,包括隐藏文件和目录。
- -l:显示文件和目录的详细信息。
- -h:以人类可读的方式显示文件和目录的大小。
- -d:显示目录的详细信息。
- -i:显示文件和目录的 inode 号。
- -R:递归显示目录下的文件和目录。
- -t:按照文件和目录的修改时间排序。
- -S:按照文件和目录的大小排序。
- -r:按照文件和目录的修改时间倒序排序。
- -1:每行显示一个文件或目录。
- -m:每行显示多个文件或目录。
显示结果和含义:
-rw-rw-r-- 1 owner group 8980 Jun 24 16:44 file.txt drwxrwxr-x 2 owner group 4096 Jun 24 16:44 dir lrwxrwxrwx 1 owner group 3 Jun 24 16:44 link -> dir
第一列:
- 文件类型:
- -:普通文件
- d:目录
- l:链接文件
- b:块设备文件
- c:字符设备文件
- s:套接字文件
- p:管道文件
- 文件权限,每 3 位一组,分别表示文件所有者、文件所属组、其他用户的权限
- r:读权限
- w:写权限
- x:执行权限
- -:没有权限。
- 文件类型:
第二列:硬链接数,表示有多少个文件名指向该文件。
第三列:文件所有者。
第四列:文件所属组。
第五列:文件大小,单位为字节。
第六列:文件最后修改时间。
第七列:文件名。
cat
: 显示文件内容。参数:
- -n:显示行号。
- -b:显示行号,空白行不显示行号。
- -s:多个空白行合并成一行。
- -A:显示所有字符,包括制表符、换行符等。
- -T:显示制表符。
- -E:显示换行符。
- -v:显示控制字符。
显示结果和含义:
1 line1 2 line2 3 line3 4 line4 5 line5 6 line6 7 line7 8 line8 9 line9 10 line10
tac
: 逆序输出文件内容参数:
- -r:--regex,使用正则表达式。
- -s:--separator=STRING,指定分隔符。
- -b:--before,指定分隔符前的内容。
显示结果和含义:
10 line10
more
: 分页显示文件内容参数:
- -d:显示“[press space to continue, 'q' to quit.]”提示信息。
- -c:不进行滚屏操作,显示内容,清楚行尾。
- -p:不进行滚屏操作,直接清屏显示。
- -s:将多个空行合并成一行。
- -u:禁止滚屏操作。
- -num:指定每屏显示的行数。
操作:
- 空格:向下翻页。
- 回车:向下翻一行。
- b:向上翻页。
- q:退出。
less
: 分页显示文件内容,支持向前翻页参数:
- -N:显示行号。
- -n:不显示行号。
- -S:将多个空行合并成一行。
- -s:将多个空行合并成一行。
- -num:指定每屏显示的行数。
操作:
- 空格:向下翻页。
- 回车:向下翻一行。
- b:向上翻页。
- q:退出。
- /:向下搜索。
- ?:向上搜索。
- n:重复上一次搜索。
- N:反向重复上一次搜索。
awk
: 文本处理工具,可以对文本进行格式化处理,支持结构化的数据处理和更复杂的操作。基本用法
awk 'pattern {action}' filename
参数
- -F:指定分隔符。
- -v:定义变量。
- -f:指定脚本文件。
示例
awk '{print $1}' file.txt # 打印第一列 awk -F: '{print $1}' /etc/passwd # 以:为分隔符,打印第一列 awk -F: '{print $1,$3}' /etc/passwd # 以:为分隔符,打印第一列和第三列
sed
: 基于行的文本编辑器,主要用于基于行的模式匹配和替换,适用于简单的文本处理任务。基本用法
sed [option] 'pattern {action}' filename
参数
- -n:禁止默认输出。
- -e:多条命令。
- -f:指定脚本文件。
- -i:直接修改文件内容。
示例
sed -n 's/old/new/p' file.txt # 替换文件中的old为new sed -n {1,10}p file.txt # 打印文件的第1到10行
grep
: 搜索文件内容基本用法
grep [option] 'pattern' filename
参数
- -i:忽略大小写。
- -v:反向选择,只显示不匹配的行。
- -r:递归搜索。
- -n:显示行号。
- -l:只显示文件名。
示例
grep -i 'hello' file.txt # 搜索文件中的hello,忽略大小写
sort
: 对文件内容进行排序用法
sort [option] filename
参数
- -n:按照数值排序。
- -r:逆序排序。
- -u:去重。
- -t:指定分隔符。
- -k:指定列。
示例
sort -n file.txt # 对文件内容进行数值排序
uniq
: 对文件内容进行去重用法
uniq [option] filename
参数
- -c:显示重复次数。
- -d:只显示重复行。
- -u:只显示不重复行。
示例
uniq -c file.txt # 对文件内容进行去重,并显示重复次数
wc
: 统计文件内容用法
wc [option] filename
参数
- -l:统计行数。
- -w:统计单词数。
- -c:统计字节数。
示例
wc -l file.txt # 统计文件的行数
head
: 查看文件头部内容用法
head [option] filename
参数
- -n:指定显示的行数。
示例
head -n 10 file.txt # 查看文件的前10行
tail
: 查看文件尾部内容用法
tail [option] filename
参数
- -n:指定显示的行数。
- -f:实时显示文件内容。
示例
tail -n 10 file.txt # 查看文件的后10行
cut
: 截取文件内容用法
cut [option] filename
参数
- -c:按照字符截取。
- -f:按照列截取。
- -d:指定分隔符。
示例
cut -c 1-5 file.txt # 截取文件的第1到5个字符
paste
: 合并文件内容用法
paste [option] filename
参数
- -d:指定分隔符。
示例
paste -d: file1.txt file2.txt # 合并两个文件的内容,以:为分隔符
tr
: 替换文件内容用法
tr [option] filename
参数
- -d:删除指定字符。
- -s:压缩连续重复的字符。
- -c:替换指定字符。
示例
tr -d ' ' file.txt # 删除文件中的空格
xargs
: 管道传参,将前面命令的标准输出转换成标准输入作为后边命令的参数。用法
xargs [option] command
参数
- -I:用于指定一个替换字符串,xargs 会将该字符串替换为从标准输入读取的内容。
- -d:指定分隔符。
- -n:指定每次传递给 command 命令的参数个数。
示例
find /etc -name '*.conf' | xargs rm -rf # 删除/etc目录下的所有.conf文件
which
: 用于查找可执行文件的路径。用法
which [option] command
参数
- -a:显示所有匹配的命令。
示例
which ls # 查找ls命令的绝对路径
whereis
: 用于查找可执行文件、源代码文件和帮助文档的路径。用法
whereis [option] command
参数
- -b:只查找二进制文件。
- -m:只查找帮助文件。
- -s:只查找源代码文件。
示例
whereis ls # 查找ls命令的绝对路径
locate
: 用于在文件数据库中快速查找文件路径。用法
locate [option] filename
参数
- -i:忽略大小写。
- -l:只显示文件名。
- -c:只显示匹配的文件数量。
示例
locate -i file.txt # 查找文件,忽略大小写
find
: 查找文件基本用法
find [path] [option] [action]
参数
- -name:按照文件名查找。
- -type:按照文件类型查找。
- -size:按照文件大小查找。
- -user:按照文件属主查找。
- -mtime:按照文件修改时间查找。
- -exec:执行命令。
示例
find /etc -name '*.conf' -type f -mtime -1 -exec rm -rf {} \; # 删除/etc目录下修改时间在1天内的.conf文件
file
: 查看文件类型用法
file [option] filename
参数
- -i:显示 mime 类型。
- -b:只显示文件类型。
示例
file -i file.txt # 查看文件的mime类型
touch
: 创建文件用法
touch [option] filename
参数
- -a:只修改访问时间。
- -m:只修改修改时间。
- -c:如果文件不存在,不创建文件。
示例
touch file.txt # 创建文件
set
: 查看系统环境变量用法
set [option]
参数
- -o:查看 shell 选项。
- -a:查看所有变量。
- -f:查看函数定义。
- -h:查看 shell 函数。
- -n:查看只读变量。
- -p:查看 shell 进程号。
- -v:查看 shell 变量。
示例
set -o # 查看shell选项
unset
: 删除环境变量用法
unset [option] variable
参数
- -f:删除 shell 函数。
- -v:删除 shell 变量。
示例
unset -v PATH # 删除PATH变量
env
: 查看环境变量用法
env [option]
参数
- -i:清除所有环境变量。
- -u:删除指定环境变量。
示例
env -i # 清除所有环境变量
export
: 设置环境变量用法
export [option] variable=value
参数
- -n:删除指定环境变量。
示例
export PATH=/usr/local/bin:$PATH # 设置PATH环境变量
read
: 读取用户输入用法
read [option] variable
参数
- -p:指定提示符。
- -t:指定等待时间。
- -s:隐藏输入内容。
示例
read -p "Please input your name: " name # 读取用户输入
declare
: 声明变量用法
declare [option] variable=value
参数
- -a:声明数组。
- -i:声明整数。
- -r:声明只读变量。
- -x:声明环境变量。
示例
declare -i num=10 # 声明整数
typeset
: 声明变量用法
typeset [option] variable=value
参数
- -a:声明数组。
- -i:声明整数。
- -r:声明只读变量。
- -x:声明环境变量。
示例
typeset -i num=10 # 声明整数
df
: 查看磁盘使用情况用法
df [option] [path]
参数
- -a:显示所有文件系统。
- -h:以人类可读的方式显示。
- -i:显示 inode 信息。
- -T:显示文件系统类型。
示例
df -h # 查看磁盘使用情况
结果
Filesystem Size Used Avail Use% Mounted on /dev/vda1 40G 2.1G 36G 6% / devtmpfs 1.9G 0 1.9G 0% /dev
- Filesystem:文件系统。
- Size:总大小。
- Used:已使用。
- Avail:可用。
- Use%:使用率。
- Mounted on:挂载点。
du
: 查看文件大小用法
du [option] [path]
参数
- -a:显示所有文件。
- -h:以人类可读的方式显示。
- -s:只显示总大小。
示例
du -h # 查看文件大小
ln
: 创建链接用法
ln [option] target link
参数
- -s:创建软链接。
- -f:强制创建。
示例
ln -s /usr/local/bin /usr/bin/local # 创建软链接
diff
: 比较文件用法
diff [option] file1 file2
参数
- -b:忽略空格。
- -i:忽略大小写。
- -w:忽略所有空格。
- -B:忽略空白行。
- -q:只显示是否不同。
- -r:递归比较目录。
示例
diff -q file1.txt file2.txt # 比较文件
ps
: 查看进程用法
ps [option]
参数
- -a:显示所有进程。
- -u:显示用户信息。
- -x:显示没有控制终端的进程。
- -e:显示所有进程。
- -f:显示全格式。
- -l:显示长格式。
- -h:不显示标题。
- -o:自定义显示格式。
示例
ps -ef # 查看进程
结果
UID PID PPID C STIME TTY TIME CMD root 1 0 0 2019 ? 00:00:01 /sbin/init root 2 0 0 2019 ? 00:00:00 [kthreadd] root 3 2 0 2019 ? 00:00:00 [ksoftirqd/0] root 5 2 0 2019 ? 00:00:00 [kworker/0:0H] root 7 2 0 2019 ? 00:00:00 [rcu_sched] root 8 2 0 2019 ? 00:00:00 [rcu_bh]
- UID:用户 ID。
- PID:进程 ID。
- PPID:父进程 ID。
- C:CPU 占用率。
- STIME:启动时间。
- TTY:终端。
- TIME:CPU 占用时间。
- CMD:命令。
- %CPU:CPU 占用率。
- %MEM:内存占用率。
- VSZ:虚拟内存大小。
- RSS:实际内存大小。
- STAT:进程状态。I<:空闲,R:运行,S:睡眠,T:停止,Z:僵尸,N:低优先级,L:内存锁页,s:会话,+:前台进程组。
top
: 查看进程用法
top [option]
参数
- -d:指定刷新间隔。
- -n:指定刷新次数。
- -p:指定进程号。
示例
top -d 1 -n 10 # 查看进程
结果
top - 23:17:30 up 24 days, 3:08, 2 users, load average: 0.01, 0.02, 0.00 Tasks: 102 total, 1 running, 101 sleeping, 0 stopped, 0 zombie %Cpu(s): 1.3 us, 0.7 sy, 0.0 ni, 98.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st MiB Mem : 1949.8 total, 291.8 free, 620.9 used, 1037.1 buff/cache MiB Swap: 0.0 total, 0.0 free, 0.0 used. 1134.0 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 168.9m 10.3m 7.9m S 0.0 0.5 0:01.02 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
- top:当前时间。up:系统运行时间。users:登录用户数。load average:系统负载。
- Tasks:进程信息。total:进程总数。running:运行进程数。sleeping:睡眠进程数。stopped:停止进程数。zombie:僵尸进程数。
- %Cpu(s):CPU 占用率。us:用户空间占用率。sy:内核空间占用率。ni:用户进程空间占用率。id:空闲占用率。wa:等待 IO 占用率。hi:硬中断占用率。si:软中断占用率。st:虚拟机占用率。
- MiB Mem:内存信息。total:总内存。free:空闲内存。used:已用内存。buff/cache:缓存内存。
- MiB Swap:交换分区信息。total:总交换分区。free:空闲交换分区。used:已用交换分区。avail Mem:可用内存。
- PID:进程 ID。USER:用户。PR:Priority 优先级。NI:Nice Value 优先级。VIRT:虚拟内存。RES:实际内存。SHR:共享内存。S:进程状态。%CPU:CPU 占用率。%MEM:内存占用率。TIME+:CPU 占用时间。COMMAND:命令。
ifconfig
: 查看网络用法
ifconfig [interface] [option]
参数
- interface:网卡名称。
- option:选项。
示例
ifconfig eth0 # 查看网卡
结果
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 124.23.31.31 netmask 255.255.255.255 broadcast 123.31.31.4 inet6 xxx prefixlen 64 scopeid 0x20<link> ether 00:50:56:00:00:00 txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
- flags:标志位。UP:网卡启用。BROADCAST:广播地址。RUNNING:网卡运行。MULTICAST:多播地址。
- mtu:最大传输单元。
- inet:IP 地址。netmask:子网掩码。broadcast:广播地址。
- inet6:IPv6 地址。prefixlen:前缀长度。scopeid:范围 ID。
- ether:MAC 地址。
- txqueuelen:发送队列长度。
- RX packets:接收数据包数。bytes:接收字节数。errors:接收错误数。dropped:接收丢弃数。overruns:接收溢出数。frame:接收帧数。
netstat
:查看网络用法
netstat [option]
参数
- r: 显示路由表。
- i: 显示网络接口信息。
- n: 显示网络连接信息。
- a: 显示所有连接信息。
- t: 显示 TCP 连接信息。
- u: 显示 UDP 连接信息。
- l: 显示监听状态。
- p: 显示进程信息。
- e: 显示扩展信息。
- s: 显示统计信息。
- c: 持续显示。
- v: 显示版本信息。
- h: 显示帮助信息。
示例
netstat -an | grep docker # 查看网络
结果
unix 2 [ ACC ] STREAM LISTENING 22331 /var/run/docker/swarm/control.sock
- unix:协议。
- 2:连接状态。1:等待连接。2:已连接。3:正在关闭连接。
- [ ACC ]:连接状态。[ ACC ]:等待连接。[ CLOS ]:正在关闭连接。[ LISTEN ]:正在监听。
- STREAM:连接类型。STREAM:TCP 连接。DGRAM:UDP 连接。
- LISTENING:监听状态。LISTENING:正在监听。NOT-LISTENING:未监听。
- 22331:连接 ID。
- /var/run/docker/swarm/control.sock:连接地址。
iostat
: 查看磁盘用法
iostat [option] [interval] [count]
参数
-d: 仅显示磁盘信息。 -c: 仅显示 CPU 信息。
示例
iostat -d [interval] [count] # 查看磁盘
ping
: 测试网络用法
ping [option] [host]
参数
-c: 指定发送次数。 -i: 指定发送间隔。 -s: 指定发送数据包大小。
示例
ping -c 4 www.baidu.com # 测试网络
结果
PING www.wshifen.com (104.193.88.77) 56(84) bytes of data. 64 bytes from 104.193.88.77 (104.193.88.77): icmp_seq=1 ttl=44 time=141 ms 64 bytes from 104.193.88.77 (104.193.88.77): icmp_seq=2 ttl=44 time=141 ms 64 bytes from 104.193.88.77 (104.193.88.77): icmp_seq=3 ttl=44 time=141 ms 64 bytes from 104.193.88.77 (104.193.88.77): icmp_seq=4 ttl=44 time=141 ms
- 64 bytes: 数据包大小。
- 104.193.88.77: 目标 IP 地址。
- icmp_seq: 发送序列号。
- ttl: 生存时间。
- time: 响应时间。
traceroute
: 路由跟踪用法
traceroute [option] [host]
参数
- -n: 不解析 IP 地址。
- -w: 指定超时时间。
- -q: 指定发送次数。
示例
traceroute -n -w 1 -q 1 www.baidu.com # 路由跟踪
结果
traceroute to www.example.com (93.184.216.34), 30 hops max, 60 byte packets 1 192.168.1.1 (192.168.1.1) 1.234 ms 1.456 ms 1.678 ms 2 10.0.0.1 (10.0.0.1) 2.345 ms 2.567 ms 2.789 ms
第一行显示了正在跟踪的目标主机的名称、IP 地址以及最大跳数和每个数据包的大小。 从第二行开始,每一行表示跟踪路径中的一个跳跃(hop)。每个跳跃都显示了跳跃的序号,跳跃的 IP 地址和主机名(如果可用),以及三个时间值(以毫秒为单位)。 时间值表示从源主机到达该跳跃点的往返时间(Round-Trip Time,RTT)。每个跳跃点都发送了三个 ICMP 回显请求(ping)报文,并显示了每个报文的往返时间。
telnet
: 远程登录,测试端口用法
telnet [option] [host] [port]
参数
-l: 指定用户名。 -p: 指定端口号。
示例
telnet -l root
nc
: 远程登录,测试端口用法
nc [option] [host] [port]
参数
-z: 只扫描,不发送数据。 -v: 显示详细信息。
示例
nc -zv www.baidu.com 80
wget
: 下载文件用法
wget [option] [url]
参数
-c: 断点续传。 -b: 后台下载。 -t: 指定重试次数。 -o: 指定日志文件。 -O: 指定下载文件名。
示例
wget -c -t 0 -o wget.log -O wget.html www.baidu.com
curl
: 下载文件用法
curl [option] [url]
参数
-C: 断点续传。 -o: 指定下载文件名。
示例
curl -C - -o curl.html www.baidu.com
scp
: 上传下载文件用法
scp [option] [source] [target]
参数
-r: 递归复制。
示例
scp -r root@132.2.2.2:/home/wwwroot/www.example.com /home/wwwroot/www.example.com
ssh
: 远程登录用法
ssh [option] [user@host]
参数
-p: 指定端口号。
示例
ssh -p 22 root@123.1.12.3
tar
: 打包压缩用法
tar [option] [file]
参数
-c: 创建压缩包。 -x: 解压缩。 -z: 使用 gzip 压缩。 -j: 使用 bzip2 压缩。 -v: 显示详细信息。 -f: 指定压缩包文件名。
示例
tar -czvf test.tar.gz test # 打包压缩 tar -xzvf test.tar.gz # 解压缩
zip/unzip
: 打包压缩用法
zip [option] [file]
参数
- -r: 递归压缩。
- -v: 显示详细信息。
- -q: 静默模式。
- -m: 压缩后删除源文件。
- -d: 删除压缩包中的文件。
- -u: 更新压缩包中的文件。
- -l: 显示压缩包中的文件。
- -c: 压缩包中的文件转换为大写。
- -C: 压缩包中的文件转换为小写。
- -z: 使用 gzip 压缩。
- -j: 使用 bzip2 压缩。
- -0: 不压缩。
- -9: 最大压缩。
- -q: 静默模式。
- -r: 递归压缩。
- -v: 显示详细信息。
- -f: 指定压缩包文件名。
示例
zip -r test.zip test # 打包压缩 unzip test.zip # 解压缩
gzip/gunzip
: 压缩用法
gzip [option] [file]
参数
-d: 解压缩。 -v: 显示详细信息。 -f: 强制压缩。
示例
gzip -v test.txt # 压缩 gzip -dv test.txt # 解压缩
bzip2/bunzip2
: 压缩用法
bzip2 [option] [file]
参数
-d: 解压缩。 -v: 显示详细信息。 -f: 强制压缩。
示例
bzip2 -v test.txt # 压缩 bzip2 -dv test.txt # 解压缩
lsof
: 用于列出当前系统中打开的文件和进程信息。用法
lsof [option] [file]
参数
- -i: 查看网络连接。
- -p: 查看进程打开的文件。
- -u: 查看用户打开的文件。
- -c: 查看指定进程打开的文件。
- -g: 查看指定组打开的文件。
- -d: 查看指定文件描述符打开的文件。
- -a: 与其他选项联合使用,表示并集。
- -d: 与其他选项联合使用,表示交集。
- -n: 与其他选项联合使用,表示取反。
示例
lsof:列出所有打开的文件和进程信息。 lsof -i :80:列出所有使用端口80的网络连接。 lsof -p 1234:列出进程ID为1234的打开文件。 lsof -u username:列出属于指定用户名的打开文件。 lsof -c ssh:列出与ssh命令相关的打开文件。 lsof -t /path/to/file:仅显示打开指定文件的进程ID。 lsof -n -i TCP:8080:禁止解析IP地址和端口号,并列出使用TCP端口8080的网络连接信息。
kill
: 用于终止进程。用法
kill [option] [pid]
参数
- -l: 列出所有信号。
- -s: 指定信号。
- -p: 指定进程 ID。
- -a: 与其他选项联合使用,表示并集。
- -d: 与其他选项联合使用,表示交集。
- -n: 与其他选项联合使用,表示取反。
- -9: 强制终止进程。
示例
kill -l:列出所有信号。 kill -s 9 1234:向进程ID为1234的进程发送SIGKILL信号。
nohup
: 用于在后台运行命令。用法
nohup [option] [command]
参数
/dev/null 2>&1: 将输出重定向到/dev/null。
示例
nohup command &:在后台运行命令。 nohup command > /dev/null 2>&1 &:在后台运行命令,并将输出重定向到/dev/null。
screen
: 用于创建多个虚拟终端。用法
screen [option] [command]
参数
- -S: 指定会话名称。
- -r: 恢复会话。
- -d: 分离会话。
- -ls: 列出会话。
- -X: 向会话发送命令。
- -x: 连接会话。
- -L: 启动日志功能。
- -R: 恢复会话,如果会话不存在则创建会话。
- -D: 分离会话,如果会话不存在则创建会话。
- -m: 忽略权限检查。
- -S: 指定会话名称。
- -t: 指定会话 ID。
- -p: 指定会话 ID。
- -r: 恢复会话。
- -d: 分离会话。
- -ls: 列出会话。
- -X: 向会话发送命令。
- -x: 连接会话。
- -L: 启动日志功能。
- -R: 恢复会话,如果会话不存在则创建会话。
- -D: 分离会话,如果会话不存在则创建会话。
- -m: 忽略权限检查。
示例
screen:创建会话。 screen -S session_name:创建会话,并指定会话名称。
time
: 用于统计命令执行时间。用法
time [option] [command]
参数
-v: 显示详细信息。
示例
time command:统计命令执行时间。
date
: 用于显示或设置系统时间。用法
date [option] [date]
参数
- -s: 设置系统时间。
- -d: 显示指定时间。
- -u: 显示 UTC 时间。
- -R: 显示 RFC-2822 格式时间。
- -I: 显示 ISO-8601 格式时间。
- -r: 显示指定文件的最后修改时间。
- -s: 设置系统时间。
- -d: 显示指定时间。
- -u: 显示 UTC 时间。
- -R: 显示 RFC-2822 格式时间。
- -I: 显示 ISO-8601 格式时间。
- -r: 显示指定文件的最后修改时间。
示例
date:显示系统时间。 date -s "2019-01-01 00:00:00":设置系统时间。 date -d "2019-01-01 00:00:00":显示指定时间。 date -u:显示UTC时间。 date -R:显示RFC-2822格式时间。 date -I:显示ISO-8601格式时间。 date -r /etc/passwd:显示/etc/passwd文件的最后修改时间。
cal
: 用于显示日历。用法
cal [option] [month] [year]
参数
- -3: 显示上个月,本月,下个月的日历。
- -j: 显示一年中的第几天。
- -m: 显示一年中的第几个月。
- -y: 显示一年的日历。
- -3: 显示上个月,本月,下个月的日历。
- -j: 显示一年中的第几天。
- -m: 显示一年中的第几个月。
- -y: 显示一年的日历。
示例
cal:显示本月的日历。 cal 2019:显示2019年的日历。 cal 1 2019:显示2019年1月的日历。 cal -3:显示上个月,本月,下个月的日历。 cal -j:显示一年中的第几天。 cal -m:显示一年中的第几个月。 cal -y:显示一年的日历。
alias/unalias
: 用于设置/取消命令别名。用法
alias [name[=value] ...] unalias [option] name
参数
-p: 列出所有别名。 -p: 列出所有别名。
示例
alias:列出所有别名。 alias ll='ls -l':设置ll命令别名。 unalias ll:取消ll命令别名。
history
: 用于显示历史命令。用法
history [option]
参数
- -c: 清空历史命令。
- -d: 删除指定历史命令。
- -a: 将缓冲区中的命令写入历史命令文件。
- -w: 将缓冲区中的命令写入历史命令文件。
- -r: 从历史命令文件中读取命令。
- -n: 从历史命令文件中读取命令。
- -p: 从历史命令文件中读取命令。
- -s: 从历史命令文件中读取命令。
- -c: 清空历史命令。
- -d: 删除指定历史命令。
- -a: 将缓冲区中的命令写入历史命令文件。
- -w: 将缓冲区中的命令写入历史命令文件。
- -r: 从历史命令文件中读取命令。
- -n: 从历史命令文件中读取命令。
- -p: 从历史命令文件中读取命令。
- -s: 从历史命令文件中读取命令。
示例
history:显示历史命令。 history -c:清空历史命令。
source
: 用于在当前 shell 中执行脚本。用法
source [file]
示例
source /etc/profile:在当前shell中执行/etc/profile脚本。
sleep
: 用于延迟执行。用法
sleep [option] time
参数
-s: 指定时间单位为秒。 -m: 指定时间单位为分钟。 -h: 指定时间单位为小时。 -d: 指定时间单位为天。 -s: 指定时间单位为秒。 -m: 指定时间单位为分钟。 -h: 指定时间单位为小时。 -d: 指定时间单位为天。
示例
sleep 1:延迟1秒。 sleep 1s:延迟1秒。 sleep 1m:延迟1分钟。 sleep 1h:延迟1小时。 sleep 1d:延迟1天。
wait
: 用于等待后台进程执行完毕。用法
wait [pid]
示例
wait 1234:等待进程号为1234的进程执行完毕。
exit
: 用于脚本或子进程,终止脚本或子进程并返回到父进程,可指定退出状态码。用法
exit [n]
示例
exit:退出当前shell。 exit 1:退出当前shell,并返回状态码1。
logout
: 用于交互式终端会话,注销用户并终止会话。命令不会保留信息到内存,会立即终止会话。用法
logout
示例
logout:注销用户并终止会话。
su
: 用于切换用户。用法
su [option] [user]
参数
-l: 切换到指定用户。 -c: 执行指定命令。 -l: 切换到指定用户。 -c: 执行指定命令。
示例
su:切换到root用户。 su -:切换到root用户。 su - root:切换到root用户。 su - root -c "ls -l":切换到root用户,并执行ls -l命令。
sudo
: 用于以其他用户身份执行命令。用法
sudo [option] command
参数
-l: 列出用户可执行的命令。 -u: 以指定用户身份执行命令。 -l: 列出用户可执行的命令。 -u: 以指定用户身份执行命令。 -i: 以 root 用户身份执行命令。
示例
sudo ls -l:以root用户身份执行ls -l命令。 sudo -u root ls -l:以root用户身份执行ls -l命令。
passwd
: 用于修改用户密码。用法
passwd [option] [user]
参数
-l: 锁定用户。 -u: 解锁用户。 -d: 删除用户密码。 -e: 强制用户下次登录修改密码。 -l: 锁定用户。 -u: 解锁用户。 -d: 删除用户密码。 -e: 强制用户下次登录修改密码。
示例
passwd:修改当前用户密码。 passwd root:修改root用户密码。
chown
: 用于修改文件或目录的所有者。用法
chown [option] user:group file
参数
-R: 递归修改。
示例
chown root:root file:将file文件的所有者修改为root,所属组修改为root。 chown -R root:root dir:将dir目录的所有者修改为root,所属组修改为root,且递归修改子目录和文件。
chmod
: 用于修改文件或目录的权限。用法
chmod [option] mode file
参数
-R: 递归修改。 -R: 递归修改。
示例
chmod 777 file:将file文件的权限修改为777。 chmod -R 777 dir:将dir目录的权限修改为777,且递归修改子目录和文件。
权限
- 0/-: 没有权限。
- 1/x: 执行权限。
- 2/w: 写权限。
- 3/x+w: 执行和写权限。
- 4/r: 读权限。
- 5/r+x: 读和执行权限。
- 6/r+w: 读和写权限。
- 7/r+w+x: 读、写和执行权限。
chgrp
: 用于修改文件或目录的所属组。用法
chgrp [option] group file
参数
-R: 递归修改。
示例
chgrp root file:将file文件的所属组修改为root。 chgrp -R root dir:将dir目录的所属组修改为root,且递归修改子目录和文件。
umask
: 用于设置文件或目录的默认权限。用法
umask [option] mode
参数
-S: 显示权限。
示例
umask:显示当前umask值。 umask 022:设置umask值为022。 umask -S:显示当前umask值。
useradd
: 用于创建用户。用法
useradd [option] user
参数
- -m: 创建用户的家目录。
- -M: 不创建用户的家目录。
- -s: 指定用户的 shell。
- -d: 指定用户的家目录。
- -g: 指定用户的所属组。
- -G: 指定用户的附加组。
示例
useradd user:创建user用户。 useradd -m user:创建user用户,并创建家目录。 useradd -M user:创建user用户,不创建家目录。 useradd -s /bin/bash user:创建user用户,并指定shell为/bin/bash。 useradd -d /home/user user:创建user用户,并指定家目录为/home/user。 useradd -g root user:创建user用户,并指定所属组为root。 useradd -G root user:创建user用户,并指定附加组为root。
userdel
: 用于删除用户。用法
userdel [option] user
参数
-r: 删除用户的家目录。
示例
userdel user:删除user用户。 userdel -r user:删除user用户,并删除家目录。
usermod
: 用于修改用户。用法
usermod [option] user
参数
- -l: 修改用户名。
- -d: 修改用户的家目录。
- -m: 修改用户的家目录。
- -s: 修改用户的 shell。
- -g: 修改用户的所属组。
- -G: 修改用户的附加组。
示例
usermod -l user1 user:将user用户的用户名修改为user1。 usermod -d /home/user1 user:将user用户的家目录修改为/home/user1。 usermod -m -d /home/user1 user:将user用户的家目录修改为/home/user1,并将原家目录的内容移动到新家目录。 usermod -s /bin/bash user:将user用户的shell修改为/bin/bash。 usermod -g root user:将user用户的所属组修改为root。 usermod -G root user:将user用户的附加组修改为root。
groupadd
: 用于创建组。用法
groupadd [option] group
参数
- -g: 指定组的 GID。
示例
groupadd group:创建group组。 groupadd -g 1000 group:创建group组,并指定GID为1000。
groupdel
: 用于删除组。用法
groupdel [option] group
参数
- -r: 删除组的家目录。
示例
groupdel group:删除group组。 groupdel -r group:删除group组,并删除家目录。
groupmod
: 用于修改组。用法
groupmod [option] group
参数
- -n: 修改组名。
- -g: 修改组的 GID。
示例
groupmod -n group1 group:将group组的组名修改为group1。 groupmod -g 1000 group:将group组的GID修改为1000。
passwd
: 用于修改用户密码。用法
passwd [option] user
参数
- -l: 锁定用户。
- -u: 解锁用户。
- -d: 删除用户密码。
- -e: 强制用户下次登录修改密码。
示例
passwd user:修改user用户的密码。 passwd -l user:锁定user用户。 passwd -u user:解锁user用户。 passwd -d user:删除user用户的密码。 passwd -e user:强制user用户下次登录修改密码。
chattr
: 用于修改文件属性。用法
chattr [option] file
参数
+: 添加属性。 -: 删除属性。 =: 设置属性。 +: 添加属性。 -: 删除属性。 =: 设置属性。
示例
chattr +i file:将file文件设置为不可修改。 chattr -i file:将file文件设置为可修改。 chattr +a file:将file文件设置为只能追加内容,不能修改和删除。 chattr -a file:将file文件设置为可修改和删除。 chattr +d file:将file文件设置为不能删除。 chattr -d file:将file文件设置为可删除。 chattr +s file:将file文件设置为不能被系统回收。 chattr -s file:将file文件设置为可被系统回收。 chattr +c file:将file文件设置为压缩后存储。 chattr -c file:将file文件设置为不压缩存储。 chattr +u file:将file文件设置为可被恢复。 chattr -u file:将file文件设置为不可被恢复。 chattr +j file:将file文件设置为可被日志记录。 chattr -j file:将file文件设置为不可被日志记录。 chattr +t file:将file文件设置为不可被修改。 chattr -t file:将file文件设置为可被修改。
shutdown
: 用于关机。会将未保存的数据和进程信息写入内存,并安全地关闭系统,在下次启动时恢复。用法
shutdown [option] time [message]
参数
- -c: 取消关机。
- -h: 关机。
- -r: 重启。
- -k: 发送警告信息。
示例
shutdown -h now:立即关机。 shutdown -h 10:10分钟后关机。 shutdown -h 10:00:10点关机。 shutdown -h +10:10分钟后关机。 shutdown -h +10:00:10点关机。 shutdown -r now:立即重启。 shutdown -r 10:10分钟后重启。 shutdown -r 10:00:10点重启。 shutdown -r +10:10分钟后重启。 shutdown -r +10:00:10点重启。 shutdown -k now:立即发送警告信息。 shutdown -k 10:10分钟后发送警告信息。 shutdown -k 10:00:10点发送警告信息。 shutdown -k +10:10分钟后发送警告信息。 shutdown -k +10:00:10点发送警告信息。 shutdown -c:取消关机。
reboot
: 用于重启系统。命令会清空内存中的所有信息,在重新启动时从头开始。用法
reboot [option]
参数
- -f: 强制重启。
示例
reboot:重启系统。 reboot -f:强制重启系统。
性能优化相关
uptime
sh02:34:03 up 2 days, 20:14, 1 user, load average: 0.63, 0.83, 0.88 # 当前时间,系统运行时间,当前登录用户数,平均负载(1分钟,5分钟,10分钟)
tip:平均负载指平均活跃进程数,包括可运行状态和不可中断状态的进程。
查看系统 cpu 核数:
grep 'model name' /proc/cpuinfo -l
压测工具:
stress
性能分析工具:
sysstat
:包含两个命令mpstat
:查看多核 CPU 性能指标和 CPU 平均指标shmpstat -P ALL 5 # 5秒后输出所有核参数
pidstat
:进程性能分析工具shpidstat -u 5 1 # 5秒后输出一组cpu指标
vmstat
:常用内存状态,上下文切换,中断次数查看shprocs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 6634112 2076 22086852 0 0 1 13 1 3 9 3 88 0 0 # cs(context switch):每秒上下文切换次数 # in(interrupt):每秒中断次数 # r(running or runnable):就绪队列长度 # b(blocked):不可终端睡眠进程数
perf
:CPU 进程分析工具perf top # samples:采样率
cpu 使用率相关指标
user(us)
:用户态 CPU 时间,不包括 nice 时间,但是包括 guest 时间nice(ni)
:低优先级用户态 CPU 时间system(sys)
:内核态 CPU 时间idle(id)
:空闲时间,不包括 I/O 等待时间iowait(wa)
:I/O 等待时间irq(hi)
:硬中断时间softirq(si)
:软中断时间steal(st)
:运行在虚拟机或者被其他虚拟机占用时间guest
:运行虚拟机时间guest_nice
:以低优先级运行虚拟机时间
网络性能查询
ss
:套接字信息shss -ltnp | head -n 3 # -l 表示只显示监听套接字 # -t 表示只显示 TCP 套接字 # -n 表示显示数字地址和端口 (而不是名字) # -p 表示显示进程信息 State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=840,fd=13)) LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1459,fd=3)) # State 套接字状态 # Recv-Q 接受队列 # Send-Q 发送队列 # Local Address:Port 本地地址 # Peer Address:Port 远程地址 # 进程名、pid
netstat
:套接字信息sh$ netstat -nlp | head -n 3 # head -n 3 表示只显示前面 3 行 # -l 表示只显示监听套接字 # -n 表示显示数字地址和端口 (而不是名字) # -p 表示显示进程信息
sar
:查看网络吞吐和 PPSshsar -n DEV 1 Linux 4.15.0-1035-azure (ubuntu) 01/06/19 _x86_64_ (2 CPU) 13:21:40 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil 13:21:41 eth0 18.00 20.00 5.79 4.25 0.00 0.00 0.00 0.00 13:21:41 docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 13:21:41 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 # rxpck/s 接收PSS # txpck/s 发送PSS # rxkB/s 接收吞吐量 # txkB/s 发送吞吐量 # rxcmp/s 接收压缩包数量 # txcmp/s 发送压缩包数量 # %ifutil 网络接口使用率
ping
:连通性测试shping -c3 114.114.114.114 PING 114.114.114.114 (114.114.114.114) 56(84) bytes of data. 64 bytes from 114.114.114.114: icmp_seq=1 ttl=65 time=31.1 ms 64 bytes from 114.114.114.114: icmp_seq=2 ttl=85 time=31.6 ms 64 bytes from 114.114.114.114: icmp_seq=3 ttl=66 time=31.2 ms --- 114.114.114.114 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2002ms rtt min/avg/max/mdev = 31.144/31.343/31.649/0.219 ms # icmp_seq icmp序列号 # ttl 生存时间或跳数 # time 往返时延 # statistics 三次统计
查看网路配置
ifconfig
shifconfig docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255 ether 02:42:b5:6f:1b:a4 txqueuelen 0 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 # MTU 网络接口配置的最大传输单元,IP包最大 # errors 错误包数 # dropped 丢弃包数 # overruns 超限数据包数 # carrier carrier错误包数,比如双工模式不匹配,物理线缆问题等 # collisions 碰撞包数
ip
sh3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:b5:6f:1b:a4 brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 valid_lft forever preferred_lft forever RX: bytes packets errors dropped overrun mcast 0 0 0 0 0 0 TX: bytes packets errors dropped carrier collsns 0 0 0 0 0 0 # 参数和ifconfig类似
各协议层网络测试
pktgen
shmodprobe pktgen # pktgen是内核线程,需要先加载内核模块,然后通过/proc/net/pktgen下面的同名文件进行交互