Linux commands

Published: by Creative Commons Licence

查看操作

  • 查看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: 列出目录下的文件和目录。

    1. 参数:

      • -a:显示所有文件和目录,包括隐藏文件和目录。
      • -l:显示文件和目录的详细信息。
      • -h:以人类可读的方式显示文件和目录的大小。
      • -d:显示目录的详细信息。
      • -i:显示文件和目录的inode号。
      • -R:递归显示目录下的文件和目录。
      • -t:按照文件和目录的修改时间排序。
      • -S:按照文件和目录的大小排序。
      • -r:按照文件和目录的修改时间倒序排序。
      • -1:每行显示一个文件或目录。
      • -m:每行显示多个文件或目录。
    2. 显示结果和含义:

       -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: 显示文件内容。

    1. 参数:

      • -n:显示行号。
      • -b:显示行号,空白行不显示行号。
      • -s:多个空白行合并成一行。
      • -A:显示所有字符,包括制表符、换行符等。
      • -T:显示制表符。
      • -E:显示换行符。
      • -v:显示控制字符。
    2. 显示结果和含义:

       1  line1
       2  line2
       3  line3
       4  line4
       5  line5
       6  line6
       7  line7
       8  line8
       9  line9
       10 line10
      
  • tac: 逆序输出文件内容

    1. 参数:

      • -r:–regex,使用正则表达式。
      • -s:–separator=STRING,指定分隔符。
      • -b:–before,指定分隔符前的内容。
    2. 显示结果和含义:

       10 line10
      
  • more: 分页显示文件内容

    1. 参数:

      • -d:显示“[press space to continue, 'q' to quit.]”提示信息。
      • -c:不进行滚屏操作,显示内容,清楚行尾。
      • -p:不进行滚屏操作,直接清屏显示。
      • -s:将多个空行合并成一行。
      • -u:禁止滚屏操作。
      • -num:指定每屏显示的行数。
    2. 操作:

      • 空格:向下翻页。
      • 回车:向下翻一行。
      • b:向上翻页。
      • q:退出。
  • less: 分页显示文件内容,支持向前翻页

    1. 参数:

      • -N:显示行号。
      • -n:不显示行号。
      • -S:将多个空行合并成一行。
      • -s:将多个空行合并成一行。
      • -num:指定每屏显示的行数。
    2. 操作:

      • 空格:向下翻页。
      • 回车:向下翻一行。
      • b:向上翻页。
      • q:退出。
      • /:向下搜索。
      • ?:向上搜索。
      • n:重复上一次搜索。
      • N:反向重复上一次搜索。
  • awk: 文本处理工具,可以对文本进行格式化处理,支持结构化的数据处理和更复杂的操作。

    1. 基本用法

       awk 'pattern {action}' filename
      
    2. 参数

      • -F:指定分隔符。
      • -v:定义变量。
      • -f:指定脚本文件。
    3. 示例

      awk '{print $1}' file.txt   # 打印第一列
      awk -F: '{print $1}' /etc/passwd    # 以:为分隔符,打印第一列
      awk -F: '{print $1,$3}' /etc/passwd   # 以:为分隔符,打印第一列和第三列
    
  • sed: 基于行的文本编辑器,主要用于基于行的模式匹配和替换,适用于简单的文本处理任务。

    1. 基本用法

       sed [option] 'pattern {action}' filename
      
    2. 参数

      • -n:禁止默认输出。
      • -e:多条命令。
      • -f:指定脚本文件。
      • -i:直接修改文件内容。
    3. 示例

       sed -n 's/old/new/p' file.txt   # 替换文件中的old为new
       sed -n {1,10}p file.txt   # 打印文件的第1到10行
      
  • grep: 搜索文件内容

    1. 基本用法

       grep [option] 'pattern' filename
      
    2. 参数

      • -i:忽略大小写。
      • -v:反向选择,只显示不匹配的行。
      • -r:递归搜索。
      • -n:显示行号。
      • -l:只显示文件名。
    3. 示例

       grep -i 'hello' file.txt   # 搜索文件中的hello,忽略大小写
      
  • sort: 对文件内容进行排序

    1. 用法

       sort [option] filename
      
    2. 参数

      • -n:按照数值排序。
      • -r:逆序排序。
      • -u:去重。
      • -t:指定分隔符。
      • -k:指定列。
    3. 示例

       sort -n file.txt   # 对文件内容进行数值排序
      
  • uniq: 对文件内容进行去重

    1. 用法

       uniq [option] filename
      
    2. 参数

      • -c:显示重复次数。
      • -d:只显示重复行。
      • -u:只显示不重复行。
    3. 示例

       uniq -c file.txt   # 对文件内容进行去重,并显示重复次数
      
  • wc: 统计文件内容

    1. 用法

       wc [option] filename
      
    2. 参数

      • -l:统计行数。
      • -w:统计单词数。
      • -c:统计字节数。
    3. 示例

       wc -l file.txt   # 统计文件的行数
      
  • head: 查看文件头部内容

    1. 用法

       head [option] filename
      
    2. 参数

      • -n:指定显示的行数。
    3. 示例

       head -n 10 file.txt   # 查看文件的前10行
      
  • tail: 查看文件尾部内容

    1. 用法

       tail [option] filename
      
    2. 参数

      • -n:指定显示的行数。
      • -f:实时显示文件内容。
    3. 示例

       tail -n 10 file.txt   # 查看文件的后10行
      
  • cut: 截取文件内容

    1. 用法

       cut [option] filename
      
    2. 参数

      • -c:按照字符截取。
      • -f:按照列截取。
      • -d:指定分隔符。
    3. 示例

       cut -c 1-5 file.txt   # 截取文件的第1到5个字符
      
  • paste: 合并文件内容

    1. 用法

       paste [option] filename
      
    2. 参数

      • -d:指定分隔符。
    3. 示例

       paste -d: file1.txt file2.txt   # 合并两个文件的内容,以:为分隔符
      
  • tr: 替换文件内容

    1. 用法

       tr [option] filename
      
    2. 参数

      • -d:删除指定字符。
      • -s:压缩连续重复的字符。
      • -c:替换指定字符。
    3. 示例

       tr -d ' ' file.txt   # 删除文件中的空格
      
  • xargs: 管道传参,将前面命令的标准输出转换成标准输入作为后边命令的参数。

    1. 用法

       xargs [option] command
      
    2. 参数

      • -I:用于指定一个替换字符串,xargs会将该字符串替换为从标准输入读取的内容。
      • -d:指定分隔符。
      • -n:指定每次传递给command命令的参数个数。
    3. 示例

       find /etc -name '*.conf' | xargs rm -rf   # 删除/etc目录下的所有.conf文件
      
  • which: 用于查找可执行文件的路径。

    1. 用法

       which [option] command
      
    2. 参数

      • -a:显示所有匹配的命令。
    3. 示例

       which ls   # 查找ls命令的绝对路径
      
  • whereis: 用于查找可执行文件、源代码文件和帮助文档的路径。

    1. 用法

       whereis [option] command
      
    2. 参数

      • -b:只查找二进制文件。
      • -m:只查找帮助文件。
      • -s:只查找源代码文件。
    3. 示例

       whereis ls   # 查找ls命令的绝对路径
      
  • locate: 用于在文件数据库中快速查找文件路径。

    1. 用法

       locate [option] filename
      
    2. 参数

      • -i:忽略大小写。
      • -l:只显示文件名。
      • -c:只显示匹配的文件数量。
    3. 示例

       locate -i file.txt   # 查找文件,忽略大小写
      
  • find: 查找文件

    1. 基本用法

       find [path] [option] [action]
      
    2. 参数

      • -name:按照文件名查找。
      • -type:按照文件类型查找。
      • -size:按照文件大小查找。
      • -user:按照文件属主查找。
      • -mtime:按照文件修改时间查找。
      • -exec:执行命令。
    3. 示例

       find /etc -name '*.conf' -type f -mtime -1  -exec rm -rf {} \;   # 删除/etc目录下修改时间在1天内的.conf文件
      
  • file: 查看文件类型

    1. 用法

       file [option] filename
      
    2. 参数

      • -i:显示mime类型。
      • -b:只显示文件类型。
    3. 示例

       file -i file.txt   # 查看文件的mime类型
      
  • touch: 创建文件

    1. 用法

       touch [option] filename
      
    2. 参数

      • -a:只修改访问时间。
      • -m:只修改修改时间。
      • -c:如果文件不存在,不创建文件。
    3. 示例

       touch file.txt   # 创建文件
      
  • set: 查看系统环境变量

    1. 用法

       set [option]
      
    2. 参数

      • -o:查看shell选项。
      • -a:查看所有变量。
      • -f:查看函数定义。
      • -h:查看shell函数。
      • -n:查看只读变量。
      • -p:查看shell进程号。
      • -v:查看shell变量。
    3. 示例

       set -o   # 查看shell选项
      
  • unset: 删除环境变量

    1. 用法

       unset [option] variable
      
    2. 参数

      • -f:删除shell函数。
      • -v:删除shell变量。
    3. 示例

       unset -v PATH   # 删除PATH变量
      
  • env: 查看环境变量

    1. 用法

       env [option]
      
    2. 参数

      • -i:清除所有环境变量。
      • -u:删除指定环境变量。
    3. 示例

       env -i   # 清除所有环境变量
      
  • export: 设置环境变量

    1. 用法

       export [option] variable=value
      
    2. 参数

      • -n:删除指定环境变量。
    3. 示例

       export PATH=/usr/local/bin:$PATH   # 设置PATH环境变量
      
  • read: 读取用户输入

    1. 用法

       read [option] variable
      
    2. 参数

      • -p:指定提示符。
      • -t:指定等待时间。
      • -s:隐藏输入内容。
    3. 示例

       read -p "Please input your name: " name   # 读取用户输入
      
  • declare: 声明变量

    1. 用法

       declare [option] variable=value
      
    2. 参数

      • -a:声明数组。
      • -i:声明整数。
      • -r:声明只读变量。
      • -x:声明环境变量。
    3. 示例

       declare -i num=10   # 声明整数
      
  • typeset: 声明变量

    1. 用法

       typeset [option] variable=value
      
    2. 参数

      • -a:声明数组。
      • -i:声明整数。
      • -r:声明只读变量。
      • -x:声明环境变量。
    3. 示例

       typeset -i num=10   # 声明整数
      
  • df: 查看磁盘使用情况

    1. 用法

       df [option] [path]
      
    2. 参数

      • -a:显示所有文件系统。
      • -h:以人类可读的方式显示。
      • -i:显示inode信息。
      • -T:显示文件系统类型。
    3. 示例

       df -h   # 查看磁盘使用情况
      
    4. 结果

       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: 查看文件大小

    1. 用法

       du [option] [path]
      
    2. 参数

      • -a:显示所有文件。
      • -h:以人类可读的方式显示。
      • -s:只显示总大小。
    3. 示例

       du -h   # 查看文件大小
      
  • ln: 创建链接

    1. 用法

       ln [option] target link
      
    2. 参数

      • -s:创建软链接。
      • -f:强制创建。
    3. 示例

       ln -s /usr/local/bin /usr/bin/local   # 创建软链接
      
  • diff: 比较文件

    1. 用法

       diff [option] file1 file2
      
    2. 参数

      • -b:忽略空格。
      • -i:忽略大小写。
      • -w:忽略所有空格。
      • -B:忽略空白行。
      • -q:只显示是否不同。
      • -r:递归比较目录。
    3. 示例

       diff -q file1.txt file2.txt   # 比较文件
      
  • ps: 查看进程

    1. 用法

       ps [option]
      
    2. 参数

      • -a:显示所有进程。
      • -u:显示用户信息。
      • -x:显示没有控制终端的进程。
      • -e:显示所有进程。
      • -f:显示全格式。
      • -l:显示长格式。
      • -h:不显示标题。
      • -o:自定义显示格式。
    3. 示例

       ps -ef   # 查看进程
      
    4. 结果

       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: 查看进程

    1. 用法

       top [option]
      
    2. 参数

      • -d:指定刷新间隔。
      • -n:指定刷新次数。
      • -p:指定进程号。
    3. 示例

       top -d 1 -n 10   # 查看进程
      
    4. 结果

       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: 查看网络

    1. 用法

       ifconfig [interface] [option]
      
    2. 参数

      • interface:网卡名称。
      • option:选项。
    3. 示例

       ifconfig eth0   # 查看网卡
      
    4. 结果

       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:查看网络

    1. 用法

       netstat [option]
      
    2. 参数

      • r: 显示路由表。
      • i: 显示网络接口信息。
      • n: 显示网络连接信息。
      • a: 显示所有连接信息。
      • t: 显示TCP连接信息。
      • u: 显示UDP连接信息。
      • l: 显示监听状态。
      • p: 显示进程信息。
      • e: 显示扩展信息。
      • s: 显示统计信息。
      • c: 持续显示。
      • v: 显示版本信息。
      • h: 显示帮助信息。
    3. 示例

       netstat -an | grep docker   # 查看网络
      
    4. 结果

       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: 查看磁盘

    1. 用法

       iostat [option] [interval] [count]
      
    2. 参数

      -d: 仅显示磁盘信息。 -c: 仅显示CPU信息。

    3. 示例

       iostat -d [interval] [count]   # 查看磁盘
      
  • ping: 测试网络

    1. 用法

       ping [option] [host]
      
    2. 参数

      -c: 指定发送次数。 -i: 指定发送间隔。 -s: 指定发送数据包大小。

    3. 示例

       ping -c 4 www.baidu.com   # 测试网络
      
    4. 结果

       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: 路由跟踪

    1. 用法

       traceroute [option] [host]
      
    2. 参数

      • -n: 不解析IP地址。
      • -w: 指定超时时间。
      • -q: 指定发送次数。
    3. 示例

       traceroute -n -w 1 -q 1 www.baidu.com   # 路由跟踪
      
    4. 结果

       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: 远程登录,测试端口

    1. 用法

       telnet [option] [host] [port]
      
    2. 参数

      -l: 指定用户名。 -p: 指定端口号。

    3. 示例

       telnet -l root
      
  • nc: 远程登录,测试端口

    1. 用法

       nc [option] [host] [port]
      
    2. 参数

      -z: 只扫描,不发送数据。 -v: 显示详细信息。

    3. 示例

       nc -zv www.baidu.com 80
      
  • wget: 下载文件

    1. 用法

       wget [option] [url]
      
    2. 参数

      -c: 断点续传。 -b: 后台下载。 -t: 指定重试次数。 -o: 指定日志文件。 -O: 指定下载文件名。

    3. 示例

       wget -c -t 0 -o wget.log -O wget.html www.baidu.com
      
  • curl: 下载文件

    1. 用法

       curl [option] [url]
      
    2. 参数

      -C: 断点续传。 -o: 指定下载文件名。

    3. 示例

       curl -C - -o curl.html www.baidu.com
      
  • scp: 上传下载文件

    1. 用法

       scp [option] [source] [target]
      
    2. 参数

      -r: 递归复制。

    3. 示例

       scp -r [email protected]:/home/wwwroot/www.example.com /home/wwwroot/www.example.com
      
  • ssh: 远程登录

    1. 用法

       ssh [option] [user@host]
      
    2. 参数

      -p: 指定端口号。

    3. 示例

       ssh -p 22 [email protected]
      
  • tar: 打包压缩

    1. 用法

       tar [option] [file]
      
    2. 参数

      -c: 创建压缩包。 -x: 解压缩。 -z: 使用gzip压缩。 -j: 使用bzip2压缩。 -v: 显示详细信息。 -f: 指定压缩包文件名。

    3. 示例

       tar -czvf test.tar.gz test  # 打包压缩
       tar -xzvf test.tar.gz       # 解压缩
      
  • zip/unzip: 打包压缩

    1. 用法

       zip [option] [file]
      
    2. 参数

      • -r: 递归压缩。
      • -v: 显示详细信息。
      • -q: 静默模式。
      • -m: 压缩后删除源文件。
      • -d: 删除压缩包中的文件。
      • -u: 更新压缩包中的文件。
      • -l: 显示压缩包中的文件。
      • -c: 压缩包中的文件转换为大写。
      • -C: 压缩包中的文件转换为小写。
      • -z: 使用gzip压缩。
      • -j: 使用bzip2压缩。
      • -0: 不压缩。
      • -9: 最大压缩。
      • -q: 静默模式。
      • -r: 递归压缩。
      • -v: 显示详细信息。
      • -f: 指定压缩包文件名。
    3. 示例

       zip -r test.zip test  # 打包压缩
       unzip test.zip        # 解压缩
      
  • gzip/gunzip: 压缩

    1. 用法

       gzip [option] [file]
      
    2. 参数

      -d: 解压缩。 -v: 显示详细信息。 -f: 强制压缩。

    3. 示例

       gzip -v test.txt  # 压缩
       gzip -dv test.txt # 解压缩
      
  • bzip2/bunzip2: 压缩

    1. 用法

       bzip2 [option] [file]
      
    2. 参数

      -d: 解压缩。 -v: 显示详细信息。 -f: 强制压缩。

    3. 示例

       bzip2 -v test.txt  # 压缩
       bzip2 -dv test.txt # 解压缩
      
  • lsof: 用于列出当前系统中打开的文件和进程信息。

    1. 用法

       lsof [option] [file]
      
    2. 参数

      • -i: 查看网络连接。
      • -p: 查看进程打开的文件。
      • -u: 查看用户打开的文件。
      • -c: 查看指定进程打开的文件。
      • -g: 查看指定组打开的文件。
      • -d: 查看指定文件描述符打开的文件。
      • -a: 与其他选项联合使用,表示并集。
      • -d: 与其他选项联合使用,表示交集。
      • -n: 与其他选项联合使用,表示取反。
    3. 示例

       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: 用于终止进程。

    1. 用法

       kill [option] [pid]
      
    2. 参数

      • -l: 列出所有信号。
      • -s: 指定信号。
      • -p: 指定进程ID。
      • -a: 与其他选项联合使用,表示并集。
      • -d: 与其他选项联合使用,表示交集。
      • -n: 与其他选项联合使用,表示取反。
      • -9: 强制终止进程。
    3. 示例

       kill -l:列出所有信号。
       kill -s 9 1234:向进程ID为1234的进程发送SIGKILL信号。
      
  • nohup: 用于在后台运行命令。

    1. 用法

       nohup [option] [command]
      
    2. 参数

      • /dev/null 2>&1: 将输出重定向到/dev/null。

    3. 示例

       nohup command &:在后台运行命令。
       nohup command > /dev/null 2>&1 &:在后台运行命令,并将输出重定向到/dev/null。
      
  • screen: 用于创建多个虚拟终端。

    1. 用法

       screen [option] [command]
      
    2. 参数

      • -S: 指定会话名称。
      • -r: 恢复会话。
      • -d: 分离会话。
      • -ls: 列出会话。
      • -X: 向会话发送命令。
      • -x: 连接会话。
      • -L: 启动日志功能。
      • -R: 恢复会话,如果会话不存在则创建会话。
      • -D: 分离会话,如果会话不存在则创建会话。
      • -m: 忽略权限检查。
      • -S: 指定会话名称。
      • -t: 指定会话ID。
      • -p: 指定会话ID。
      • -r: 恢复会话。
      • -d: 分离会话。
      • -ls: 列出会话。
      • -X: 向会话发送命令。
      • -x: 连接会话。
      • -L: 启动日志功能。
      • -R: 恢复会话,如果会话不存在则创建会话。
      • -D: 分离会话,如果会话不存在则创建会话。
      • -m: 忽略权限检查。
    3. 示例

       screen:创建会话。
       screen -S session_name:创建会话,并指定会话名称。
      
  • time: 用于统计命令执行时间。

    1. 用法

       time [option] [command]
      
    2. 参数

      -v: 显示详细信息。

    3. 示例

       time command:统计命令执行时间。
      
  • date: 用于显示或设置系统时间。

    1. 用法

       date [option] [date]
      
    2. 参数

      • -s: 设置系统时间。
      • -d: 显示指定时间。
      • -u: 显示UTC时间。
      • -R: 显示RFC-2822格式时间。
      • -I: 显示ISO-8601格式时间。
      • -r: 显示指定文件的最后修改时间。
      • -s: 设置系统时间。
      • -d: 显示指定时间。
      • -u: 显示UTC时间。
      • -R: 显示RFC-2822格式时间。
      • -I: 显示ISO-8601格式时间。
      • -r: 显示指定文件的最后修改时间。
    3. 示例

       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: 用于显示日历。

    1. 用法

       cal [option] [month] [year]
      
    2. 参数

      • -3: 显示上个月,本月,下个月的日历。
      • -j: 显示一年中的第几天。
      • -m: 显示一年中的第几个月。
      • -y: 显示一年的日历。
      • -3: 显示上个月,本月,下个月的日历。
      • -j: 显示一年中的第几天。
      • -m: 显示一年中的第几个月。
      • -y: 显示一年的日历。
    3. 示例

       cal:显示本月的日历。
       cal 2019:显示2019年的日历。
       cal 1 2019:显示2019年1月的日历。
       cal -3:显示上个月,本月,下个月的日历。
       cal -j:显示一年中的第几天。
       cal -m:显示一年中的第几个月。
       cal -y:显示一年的日历。
      
  • alias/unalias: 用于设置/取消命令别名。

    1. 用法

       alias [name[=value] ...]
       unalias [option] name
      
    2. 参数

      -p: 列出所有别名。 -p: 列出所有别名。

    3. 示例

       alias:列出所有别名。
       alias ll='ls -l':设置ll命令别名。
       unalias ll:取消ll命令别名。
      
  • history: 用于显示历史命令。

    1. 用法

       history [option]
      
    2. 参数

      • -c: 清空历史命令。
      • -d: 删除指定历史命令。
      • -a: 将缓冲区中的命令写入历史命令文件。
      • -w: 将缓冲区中的命令写入历史命令文件。
      • -r: 从历史命令文件中读取命令。
      • -n: 从历史命令文件中读取命令。
      • -p: 从历史命令文件中读取命令。
      • -s: 从历史命令文件中读取命令。
      • -c: 清空历史命令。
      • -d: 删除指定历史命令。
      • -a: 将缓冲区中的命令写入历史命令文件。
      • -w: 将缓冲区中的命令写入历史命令文件。
      • -r: 从历史命令文件中读取命令。
      • -n: 从历史命令文件中读取命令。
      • -p: 从历史命令文件中读取命令。
      • -s: 从历史命令文件中读取命令。
    3. 示例

       history:显示历史命令。
       history -c:清空历史命令。
      
  • source: 用于在当前shell中执行脚本。

    1. 用法

       source [file]
      
    2. 示例

       source /etc/profile:在当前shell中执行/etc/profile脚本。
      
  • sleep: 用于延迟执行。

    1. 用法

       sleep [option] time
      
    2. 参数

      -s: 指定时间单位为秒。 -m: 指定时间单位为分钟。 -h: 指定时间单位为小时。 -d: 指定时间单位为天。 -s: 指定时间单位为秒。 -m: 指定时间单位为分钟。 -h: 指定时间单位为小时。 -d: 指定时间单位为天。

    3. 示例

       sleep 1:延迟1秒。
       sleep 1s:延迟1秒。
       sleep 1m:延迟1分钟。
       sleep 1h:延迟1小时。
       sleep 1d:延迟1天。
      
  • wait: 用于等待后台进程执行完毕。

    1. 用法

       wait [pid]
      
    2. 示例

       wait 1234:等待进程号为1234的进程执行完毕。
      
  • exit: 用于脚本或子进程,终止脚本或子进程并返回到父进程,可指定退出状态码。

    1. 用法

       exit [n]
      
    2. 示例

       exit:退出当前shell。
       exit 1:退出当前shell,并返回状态码1。
      
  • logout: 用于交互式终端会话,注销用户并终止会话。命令不会保留信息到内存,会立即终止会话。

    1. 用法

       logout
      
    2. 示例

       logout:注销用户并终止会话。
      
  • su: 用于切换用户。

    1. 用法

       su [option] [user]
      
    2. 参数

      -l: 切换到指定用户。 -c: 执行指定命令。 -l: 切换到指定用户。 -c: 执行指定命令。

    3. 示例

       su:切换到root用户。
       su -:切换到root用户。
       su - root:切换到root用户。
       su - root -c "ls -l":切换到root用户,并执行ls -l命令。
      
  • sudo: 用于以其他用户身份执行命令。

    1. 用法

       sudo [option] command
      
    2. 参数

      -l: 列出用户可执行的命令。 -u: 以指定用户身份执行命令。 -l: 列出用户可执行的命令。 -u: 以指定用户身份执行命令。 -i: 以root用户身份执行命令。

    3. 示例

       sudo ls -l:以root用户身份执行ls -l命令。
       sudo -u root ls -l:以root用户身份执行ls -l命令。
      
  • passwd: 用于修改用户密码。

    1. 用法

       passwd [option] [user]
      
    2. 参数

      -l: 锁定用户。 -u: 解锁用户。 -d: 删除用户密码。 -e: 强制用户下次登录修改密码。 -l: 锁定用户。 -u: 解锁用户。 -d: 删除用户密码。 -e: 强制用户下次登录修改密码。

    3. 示例

       passwd:修改当前用户密码。
       passwd root:修改root用户密码。
      
  • chown: 用于修改文件或目录的所有者。

    1. 用法

       chown [option] user:group file
      
    2. 参数

      -R: 递归修改。

    3. 示例

       chown root:root file:将file文件的所有者修改为root,所属组修改为root。
       chown -R root:root dir:将dir目录的所有者修改为root,所属组修改为root,且递归修改子目录和文件。
      
  • chmod: 用于修改文件或目录的权限。

    1. 用法

       chmod [option] mode file
      
    2. 参数

      -R: 递归修改。 -R: 递归修改。

    3. 示例

       chmod 777 file:将file文件的权限修改为777。
       chmod -R 777 dir:将dir目录的权限修改为777,且递归修改子目录和文件。
      
    4. 权限

      • 0/-: 没有权限。
      • 1/x: 执行权限。
      • 2/w: 写权限。
      • 3/x+w: 执行和写权限。
      • 4/r: 读权限。
      • 5/r+x: 读和执行权限。
      • 6/r+w: 读和写权限。
      • 7/r+w+x: 读、写和执行权限。
  • chgrp: 用于修改文件或目录的所属组。

    1. 用法

       chgrp [option] group file
      
    2. 参数

      -R: 递归修改。

    3. 示例

       chgrp root file:将file文件的所属组修改为root。
       chgrp -R root dir:将dir目录的所属组修改为root,且递归修改子目录和文件。
      
  • umask: 用于设置文件或目录的默认权限。

    1. 用法

       umask [option] mode
      
    2. 参数

      -S: 显示权限。

    3. 示例

       umask:显示当前umask值。
       umask 022:设置umask值为022。
       umask -S:显示当前umask值。
      
  • useradd: 用于创建用户。

    1. 用法

       useradd [option] user
      
    2. 参数

      • -m: 创建用户的家目录。
      • -M: 不创建用户的家目录。
      • -s: 指定用户的shell。
      • -d: 指定用户的家目录。
      • -g: 指定用户的所属组。
      • -G: 指定用户的附加组。
    3. 示例

       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: 用于删除用户。

    1. 用法

       userdel [option] user
      
    2. 参数

      -r: 删除用户的家目录。

    3. 示例

       userdel user:删除user用户。
       userdel -r user:删除user用户,并删除家目录。
      
  • usermod: 用于修改用户。

    1. 用法

       usermod [option] user
      
    2. 参数

      • -l: 修改用户名。
      • -d: 修改用户的家目录。
      • -m: 修改用户的家目录。
      • -s: 修改用户的shell。
      • -g: 修改用户的所属组。
      • -G: 修改用户的附加组。
    3. 示例

       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: 用于创建组。

    1. 用法

       groupadd [option] group
      
    2. 参数

      • -g: 指定组的GID。
    3. 示例

       groupadd group:创建group组。
       groupadd -g 1000 group:创建group组,并指定GID为1000。
      
  • groupdel: 用于删除组。

    1. 用法

       groupdel [option] group
      
    2. 参数

      • -r: 删除组的家目录。
    3. 示例

       groupdel group:删除group组。
       groupdel -r group:删除group组,并删除家目录。
      
  • groupmod: 用于修改组。

    1. 用法

       groupmod [option] group
      
    2. 参数

      • -n: 修改组名。
      • -g: 修改组的GID。
    1. 示例

       groupmod -n group1 group:将group组的组名修改为group1。
       groupmod -g 1000 group:将group组的GID修改为1000。
      
  • passwd: 用于修改用户密码。

    1. 用法

       passwd [option] user
      
    2. 参数

      • -l: 锁定用户。
      • -u: 解锁用户。
      • -d: 删除用户密码。
      • -e: 强制用户下次登录修改密码。
    3. 示例

       passwd user:修改user用户的密码。
       passwd -l user:锁定user用户。
       passwd -u user:解锁user用户。
       passwd -d user:删除user用户的密码。
       passwd -e user:强制user用户下次登录修改密码。
      
  • chattr: 用于修改文件属性。

    1. 用法

       chattr [option] file
      
    2. 参数

      +: 添加属性。 -: 删除属性。 =: 设置属性。 +: 添加属性。 -: 删除属性。 =: 设置属性。

    3. 示例

       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: 用于关机。会将未保存的数据和进程信息写入内存,并安全地关闭系统,在下次启动时恢复。

    1. 用法

       shutdown [option] time [message]
      
    2. 参数

      • -c: 取消关机。
      • -h: 关机。
      • -r: 重启。
      • -k: 发送警告信息。
    3. 示例

       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: 用于重启系统。命令会清空内存中的所有信息,在重新启动时从头开始。

    1. 用法

       reboot [option]
      
    2. 参数

      • -f: 强制重启。
    3. 示例

       reboot:重启系统。
       reboot -f:强制重启系统。
      

性能优化相关

  • uptime

      02: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平均指标

          mpstat -P ALL 5
          # 5秒后输出所有核参数
        
      • pidstat:进程性能分析工具

          pidstat -u 5 1
          # 5秒后输出一组cpu指标
        
    • vmstat:常用内存状态,上下文切换,中断次数查看

      procs -----------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:套接字信息

        ss -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:套接字信息

        $ netstat -nlp | head -n 3
        # head -n 3 表示只显示前面 3 行
        # -l 表示只显示监听套接字
        # -n 表示显示数字地址和端口 (而不是名字)
        # -p 表示显示进程信息
      
    • sar:查看网络吞吐和PPS

        sar -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:连通性测试
        ping -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

          ifconfig
          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

          3: 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

        modprobe pktgen
        # pktgen是内核线程,需要先加载内核模块,然后通过/proc/net/pktgen下面的同名文件进行交互