L001-Linux常用命令汇总

L001-Linux常用命令汇总

  • 1. 线上查询及帮助命令
    • 1.1 man
    • 1.2 help
  • 2. 文件和目录操作命令
    • 2.1 ls
    • 2.2 cd
    • 2.3 cp
    • 2.4 mkdir
    • 2.5 mv
    • 2.6 pwd
    • 2.7 rename
    • 2.8 rm
    • 2.9 rmdir
    • 2.10 touch
    • 2.11 tree
    • 2.12 basename
    • 2.13 dirname
    • 2.14 ln
    • 2.15 readlink
    • 2.16 chattr
    • 2.17 lsattr
    • 2.18 file
    • 2.19 md5sum
    • 2.20 tee
  • 3. 查看文件及内容处理命令
    • 3.1 cat
    • 3.2 tac
    • 3.3 more
    • 3.4 less
    • 3.5 head
    • 3.6 tail
    • 3.7 cut
    • 3.8 split
    • 3.9 paste
    • 3.10 sort
    • 3.11 uniq
    • 3.12 wc
    • 3.13 iconv
    • 3.14 dos2unix和unix2dos
    • 3.15 diff
    • 3.16 vimdiff
    • 3.17 rev
    • 3.18 join
    • 3.19 tr
    • 3.20 vi和vim
    • 3.21 seq
  • 4. 文件压缩及解压命令
    • 4.1 tar
    • 4.2 gzip
    • 4.3 zip
    • 4.4 unzip
  • 5. 信息显示命令
    • 5.1 uname
    • 5.2 hostname
    • 5.3 dmesg
    • 5.4 uptime
    • 5.5 stat
    • 5.6 du
    • 5.7 df
    • 5.8 top
    • 5.9 free
    • 5.10 date
    • 5.11 cal
    • 5.12 sosreport
  • 6. 搜索文件命令
    • 6.1 which
    • 6.2 find
    • 6.3 whereis
    • 6.4 locate和slocate
  • 7. 用户管理命令
    • 7.1 useradd
    • 7.2 userdel
    • 7.3 groupadd
    • 7.4 groupdel
    • 7.5 usermod
    • 7.6 passwd
    • 7.7 chage
    • 7.8 id
    • 7.9 su
    • 7.10 sudo
    • 7.11 visudo
  • 8. 基础网络操作命令
    • 8.1 telnet
    • 8.2 ssh
    • 8.3 scp
    • 8.4 wget
    • 8.5 ping
    • 8.6 route
    • 8.7 ifconfig
    • 8.8 ifup和ifdown
    • 8.9 netstat和ss
    • 8.10 ip
  • 9. 深入网络操作命令
    • 9.1 nmap
    • 9.2 lsof
    • 9.3 mail
    • 9.4 mutt
    • 9.5 nslookup
    • 9.6 dig
    • 9.7 host
    • 9.8 traceroute
    • 9.9 tcpdump
    • 9.10 nc
    • 9.11 curl
  • 10. 有关磁盘与文件系统的命令
    • 10.1 mount和umount
    • 10.2 fsck
    • 10.3 e2fsck
    • 10.4 dd
    • 10.5 dumpe2fs
    • 10.6 dump
    • 10.7 fdisk
    • 10.8 parted
    • 10.9 mkfs
    • 10.10 partprobe
    • 10.11 mkswap
    • 10.12 swapon和swapoff
    • 10.13 sync
    • 10.14 resize2fs
  • 11. 系统及用户权限相关命令
    • 11.1 chmod
    • 11.2 chown
    • 11.3 chgrp
    • 11.4 umask
  • 12. 查看系统用户登录信息的命令
    • 12.1 whoami
    • 12.2 who
    • 12.3 w
    • 12.4 last
    • 12.5 lastlog
    • 12.6 users
    • 12.7 finger
  • 13. 内置命令及其他
    • 13.1 echo
    • 13.2 printf
    • 13.3 rpm
    • 13.4 yum
    • 13.5 watch
    • 13.6 alias
    • 13.7 unalias
    • 13.8 clear
    • 13.9 history
    • 13.10 eject
    • 13.11 time
    • 13.12 xargs
    • 13.13 exec
    • 13.14 export
    • 13.15 set
    • 13.16 unset
    • 13.17 type
    • 13.18 bc
    • 13.19 查看bash内置命令清单
  • 14. 系统管理与性能监视命令
    • 14.1 chkconfig
    • 14.2 vmstat
    • 14.3 mpstat
    • 14.4 iostat
    • 14.5 sar
    • 14.6 ipcs
    • 14.7 ipcrm
    • 14.8 strace
    • 14.9 ltrace
    • 14.10 getenforce
    • 14.11 setenforce
    • 14.12 tune2fs
    • 14.13 shoumount
    • 14.14 exportfs
    • 14.15 rpcinfo
  • 15. 关机/重启/注销和查看系统信息命令
    • 15.1 reboot
    • 15.2 shutdown
    • 15.3 halt
    • 15.4 poweroff
    • 15.5 logout
    • 15.6 exit
  • 16. 进程管理相关命令
    • 16.1 bg
    • 16.2 fg
    • 16.3 jobs
    • 16.4 kill
    • 16.5 killall
    • 16.6 pkill
    • 16.7 crontab
    • 16.8 ps
    • 16.9 pstree
    • 16.10 nice
    • 16.11 nohup
    • 16.12 pgrep
    • 14.13 runlevel
    • 16.14 init
    • 16.15 service
    • 16.16 pidof

**
学习老男孩教育Linux运维www.oldboyedu.com - 常用命令总结
结其他参考:
man.linuxde.net
Linux中国"Linux"微信小程序
LinuxProbe
**

1. 线上查询及帮助命令

1.1 man

  • 功能描述:format and display the on-line manual pages - 格式化显示在线命令帮助手册
  • 选项参数:
    选项 说明
    -- path 显示man主页的搜索路径
    -w 显示某个man手册存放的位置,而不显示这个man手册的内容
    -k {keyword} 用一个关键字搜索包含此关键字的man手册
    [1-8] {command} 按章节显示命令的man手册
    -f 显示命令的所有man手册
  • 实例:
# 查询cat命令的帮助手册
$ man cat
# 使用 command --help的方式查询命令的简明帮助手册
$ cat --help

1.2 help

  • 功能描述:Display information about builtin commands - 显示bash内置命令的帮助信息
  • 实例:
# 查询cd命令的简明帮助
$ help cd
cd: cd [-L|-P] [dir]
    Change the shell working directory.
    ...... 

2. 文件和目录操作命令

2.1 ls

  • 功能描述:list directory contents - 目录内容列表。
  • 选项参数:
    选项 说明
    -l long,长格式查看。输出的信息从左到右依次包括:文件类型和权限模式、硬链接数、所属用户、所属用户组、文件大小、月、日、时分(文件的最后修改时间)、文件名
    -d directory,查看目录属性。
    -a all,不忽略以 . 开头的文件或目录。显示所有文件,包括隐藏文件。
    -h human,以人类可读方式显示。例如:ls -lh,文件大小可显示成1.5M等便于阅读的样式。
    -F 在每个输出项后追加文件的类型标识符。具体含义:“*”表示具有可执行权限的普通文件,“/”表示目录,“@”表示符号链接,“
    -p 为目录结尾加斜线。
    -r 按文件名反向排序。
    -t 按修改时间排序。
    -i inode,显示文件索引节点号。一个索引节点代表一个文件。
    --color 显示颜色。例如:--color=auto
    --time --time-style=long-iso格式化时间。full-iso/long-iso/iso/locale
  • 实例:
# 列出根目录下内容和文件
$ ls /
# 长格式方式查看/data目录
$ ls -ld /data
# 以人类可读方式查看/data目录下所有文件包括隐藏文件并显示节点号
$ ls -lhia /data

2.2 cd

  • 功能描述:Change the shell working directory - 切换工作路径
  • 选项参数:
    选项 说明
    - 上一次所在路径
    ~ 当前用户家目录
    . 当前目录
    .. 上一级目录
    -L 强制使用符号链接,默认不加参数是使用符号链接,就像指定了’ -L’一样。
    -P 使用物理目录结构,不使用符号链接。
  • 实例:
# 切换至根目录
$ cd /
# 绝对路径,从根开始的路径
$ cd /etc/sysconfig/network-scripts
# 相对路径,不从根开始的路径
/etc/sysconfig $ cd network-scripts/
# - 参数,上一次所在路径
$ cd /etc/selinux
$ pwd
/etc/selinux
$ cd /data
$ pwd
/data
$ cd -
/etc/selinux
$ cd -
/data

2.3 cp

  • 功能描述:copy files and directories - 拷贝文件或目录
  • 选项参数:
    选项 说明
    -a --all,相当于-pdr,复制文件保持文件所有属性
    -r 递归,拷贝目录
    -p 连同文件的属性一起复制过去,而非使用默认属性
    -d 若源文件为链接文件(link file),则复制链接文件属性而非档案本身
    -i 覆盖既有文件之前先询问用户,cp命令默认别名alias cp=‘cp -i’
  • 实例:
# -r,递归拷贝目录
$ cp -r /data/aa /tmp/
$ ls /tmp
aa  ett.txt  yum.log
# 备份操作
$ pwd
/etc/ssh
$ cp ssh_config{,.20160621}
$ ls
ssh_config	ssh_config.20160621	sshd_config

2.4 mkdir

  • 功能描述:make directory - 创建目录
  • 选项参数:
    选项 说明
    -p --parents创建所需要的父目录,递归创建目录。
    -v 显示创建过程
  • 实例:
# 使用绝对路径在根目录下创建data目录
$ mkdir /data
# 使用相对路径进入到根目录下创建data目录
$ cd /
$ mkdir data
# -p参数,一条命令递归创建/data/test目录
$ mkdir -p /data/test
# 批量创建目录
$ cd /data/test
$ mkdir dir{01..05}
# -v参数,查看创建过程
$ mkdir -pv /data/{1..3}/{4..6}
mkdir: created directory '/data/1'
mkdir: created directory '/data/1/4'
mkdir: created directory '/data/1/5'
mkdir: created directory '/data/1/6'
mkdir: created directory '/data/2'
mkdir: created directory '/data/2/4'
mkdir: created directory '/data/2/5'
mkdir: created directory '/data/2/6'
mkdir: created directory '/data/3'
mkdir: created directory '/data/3/4'
mkdir: created directory '/data/3/5'
mkdir: created directory '/data/3/6'

2.5 mv

  • 功能描述:move (rename) files - 移动(重命名)文件或目录
  • 选项参数:
    选项 说明
    -i 交互式操作,覆盖前先行询问用户,如果源文件与目标文件或目标目录中的文件同名,则询问用户是否覆盖目标文件。用户输入y,表示将覆盖目标文件;输入n,表示取消对源文件的移动。这样可以避免误将文件覆盖。
    mv命令默认别名alias mv=‘mv -i’
    -f 覆盖文件时不提示
  • 实例:
# 移动文件
$ mv /test.txt /root/
# 移动目录
$ mv /sharedir /mnt/
# 重命名文件
$ mv stu01.txt stu01.txt.bak

2.6 pwd

  • 功能描述:print name of current/working directory - 显示当前工作目录
  • 选项参数:
    选项 说明
    -L 和默认不加参数一样,显示逻辑路径。
    -P 显示物理实际路径。
  • 实例:
# 打印系统环境变量PWD
$ echo $PWD
/etc/sysconfig
$ pwd -L
/etc/sysconfig
$ pwd
/etc/sysconfig
# -P参数,显示物理路径
$ cd /etc/init.d
$ pwd
/etc/init.d
$ pwd -P
/etc/rc.d/init.d
$ ls -l /etc/init.d
lrwxrwxrwx. 1 root root 11 Jun 11 13:59 /etc/init.d -> rc.d/init.d

2.7 rename

  • 功能描述:Rename files - 重命名文件
  • 语法格式:rename from to file
    • from:需要替换或要处理的字符,文件的一部分,文件的扩展名。
    • to:把前面from代表的内容替换为to代表的内容,即重命名处理后的结果。
  • 实例:
# 批量更改文件名
$ touch stu_102999_{1..5}.jpg
$ ls
stu_102999_1.jpg  stu_102999_2.jpg  stu_102999_3.jpg  stu_102999_4.jpg  stu_102999_5.jpg
# *号匹配目内所有文件
$ rename "_102999_" "" *
$ ls
stu1.jpg  stu2.jpg  stu3.jpg  stu4.jpg  stu5.jpg

2.8 rm

  • 功能描述:remove files or directories - 删除文件或目录
    • rm删除命令要慎用,非常危险,删除前一定要先备份
    • 使用mv命令移动到/tmp或其他目录,替代删除操作。使用find删除。
  • 选项参数:
    选项 说明
    -f --force,强制
    -r或-R --recursive,递归删除目录和目录中的内容
    -i 删除之前先进行提示,rm命令默认别名alias rm=‘rm -i’
  • 实例:
# -f参数,强制删除
$ touch file001
$ rm file001
rm: remove regular empty file `file001'?  #输入y确认,不加-f参数会提示要求确认
$ rm -f file001  #-f参数强制删除,不会出现确认提示。
# -r参数,递归删除目录和其中内容
$ rm -fr dir01

2.9 rmdir

  • 功能描述:remove empty directories - 删除空目录
  • 选项参数:
    选项 说明
    -p --parents,递归删除
    -v --verbose,显示处理结果
  • 实例:
# 创建三个多级目录 ~/a/b/c
$ mkdir a/b/c -p
$ tree a
a
└── b   
    └── c
    
2 directories, 0 files
# 不加任何参数删除,只能删除一级目录
$ rmdir a/b/c
$ tree a
a
└── b   
1 directories, 0 files
# -p参数,可以删除多级目录,-v显示处理结果。
$ rmdir -vp a/b
rmdir: removing directory, 'a/b'
rmdir: removing directory, 'a'

2.10 touch

  • 功能描述:change file timestamps - 创建文件或更新已有文件的时间戳
    • 如果文件存在,就改变文件的访问时间atime等时间戳信息,不会改变文件内容。
  • 选项参数:
    选项 说明
    -a 更改访问时间
    -m 更改修改时间
    -d 同时修改atime与mtime
  • 实例:
# 在根目录下创建test.txt文件
$ touch test.txt
$ ls
test.txt
# 一次创建多个文件
$ touch a.txt b.txt c.txt
$ ls
a.txt  b.txt  c.txt  test.txt
# 批量创建文件
$ touch {1..10}.txt
$ ls
10.txt  1.txt  2.txt  3.txt  4.txt  5.txt  6.txt  7.txt  8.txt  9.txt
# -d参数,修改文件atime,mtime等属性信息
$ ll test.txt
-rw-r--r-- 1 root root 0 Jun 21 22:25 test.txt
$ echo "testfile" >>test.txt 
$ ll test.txt 
-rw-r--r-- 1 root root 9 Jun 21 22:26 test.txt
$ touch -d "2018-06-07 22:25" test.txt
$ ll test.txt
-rw-r--r-- 1 root root 9 Jun  7 22:25 test.txt

2.11 tree

  • 功能描述:list contents of directories in a tree-like format - 以树形结构列出目录的内容
  • 选项参数:
    选项 说明
    -L 要查看的树形结构的层数。-L 1 只查看一层。
    -d 只显示目录
    -a 显示所有文件,包括隐藏文件(以点号开头)。
    -f 显示完整的路径
    -i 不打印树形枝杈
    -F 目录显示斜线
  • 实例:
# -L参数,指定树结构的层数
$ tree -L 1 /
/
├── bin
├── boot
├── dev
├── etc
├── home
├── lib
├── lib64
├── lost+found
├── media
├── mnt
├── opt
├── proc
├── root
├── sbin
├── selinux
├── srv
├── sys
├── tmp
├── usr
# -d参数,只列出目录
$ tree -dL 1 /
/
├── bin
├── boot
├── dev
├── etc
├── home
├── lib
├── lib64
├── lost+found
├── media
├── mnt
├── opt
├── proc
├── root
├── sbin
├── selinux
├── srv
├── sys
├── tmp
├── usr
└── var

2.12 basename

  • 功能描述:strip directory and suffix from filenames - 把一个全路径的文件名,把路径去掉只保留文件名。或截取文件名。
  • 实例:
# 提取文件名
$ basename /etc/selinux/conf
conf
# 截取文件名,去掉扩展名。
$ basename md5.log .log
md5

2.13 dirname

  • 功能描述:strip non-directory suffix from file name - 截取全路径文件名的路径。
  • 实例:
# 截取文件的路径
$ dirname /etc/selinux/conf
/etc/selinux

2.14 ln

  • 功能描述:make links between files - 创建文件(软、硬)链接
  • 选项参数:
    选项 说明
    -s 创建软连接。不加参数默认创建硬链接。
    readlink命令查看软连接文件所指向的源文件。
  • 实例:
# -s参数,创建软链接。inode节点号不同
$ ln -s oldboy.log oldboy.log.soft
$ ls -li
total 4
141851 -rw-r--r-- 1 root root 262 May 25 20:38 oldboy.log
142107 lrwxrwxrwx 1 root root  10 May 25 22:43 oldboy.log.soft -> oldboy.log
# 创建硬链接。inode节点号相同
$ ln oldboy.log oldboy.log.hard
$ ls -lhi
total 8.0K
141851 -rw-r--r-- 2 root root 262 May 25 20:38 oldboy.log
141851 -rw-r--r-- 2 root root 262 May 25 20:38 oldboy.log.hard
142107 lrwxrwxrwx 1 root root  10 May 25 22:43 oldboy.log.soft -> oldboy.log
# 目录不可以创建硬链接
$ ll -d test
drwxr-xr-x 2 root root 4096 Jun 22 12:24 test
$ ln test aa
ln: `test': hard link not allowed for directory
- 技巧拓展:
```shell
# inode值为1的两个目录文件
$ ls -lhid /sys
1 drwxr-xr-x 13 root root 0 Jun 22  2016 /sys
$ ls -lhid /proc
1 dr-xr-xr-x 84 root root 0 Jun 22  2016 /proc

2.15 readlink

  • 功能描述:print value of a symbolic link or canonical file name - 查看软链接文件的源文件
    • 只针对软链接文件生效。
  • 实例:
$ readlink /etc/rc.local
rc.d/rc.local
$ ll /etc/rc.local
lrwxrwxrwx. 1 root root 13 May  8 13:20 /etc/rc.local -> rc.d/rc.local

2.16 chattr

  • 功能描述:change file attributes on a Linux file system - 改变文件的扩展属性
  • 选项参数:
    选项 说明
    a 只能向文件追加数据,操作符:+、-、=
    i 文件加锁,操作符:+、-、=
  • 实例:
# chattr a 的用途
$ lsattr test.txt
-------------e- test.txt  #普通文件扩展格式样式
$ chattr +a test.txt  #改变文件的扩展属性只能追加内容
$ lsattr test.txt
-----a-------e- test.txt
$ rm -f test.txt
rm: cannot remove 'test.txt': Operation not permitted  #无法删除
$ echo "1234" >>test.txt  #可echo追加内容,但不能vi/vim编辑追加
$ cat test.txt  #可查看内容
this	is	tab	line.
this is space line.
1234
# chattr i 的用途
$ chattr -a test.txt  #去掉a属性
$ chattr +i .bash_history  #给文件加锁
$ lsattr .bash_history
----i--------e- .bash_history
$ >.bash_history
-bash: .bash_history: Permission denied  #无法清空
$ echo "12345" >>.bash_history
-bash: .bash_history: Permission denied  #无法追加内容
$ rm -f .bash_history
rm: cannot remove '.bash_history': Operation not permitted  #无法删除文件

2.17 lsattr

  • 功能描述:list file attributes on a Linux second extended file system - 显示文件的扩展属性
  • 实例:
# 显示文件的扩展属性
$ lsattr test.txt
-------------e- test.txt  #普通文件扩展格式样式

2.18 file

  • 功能描述:determine file type - 确定(查看)文件的类型
  • 实例:
# 查看文件类型
$ file test.txt 
test.txt: ASCII text  #普通ASCII编码的文本文件
$ file /var/log/messages
/var/log/messages: ASCII English text
$ file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64,
version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped

2.19 md5sum

  • 功能描述:compute and check MD5 message digest - 计算和校验文件的md5值
  • 选项参数:
    选项 说明
    -c 校验md5值
  • 实例:
# 生成文件的md5值
$ md5sum test.txt
b56ff5db20677292ec29cd9c005773da  test.txt
$ md5sum test.txt >md5.log
# 校验文件md5值
$ md5sum -c md5.log
test.txt: OK

2.20 tee

  • 功能描述:read from standard input and write to standard output and files - 从标准输入读取数据并输出到标准输出和文件
  • 选项参数:
    选项 说明
    -a 追加内容
  • 实例:
# ls列出内容定向至ls.txt文件中,但是在屏幕上不显示ls所列出的内容
$ ls >ls.txt
# 把当前目录文件列表输出至屏幕和文件LS.txt中
$ ls | tee LS.txt

3. 查看文件及内容处理命令

3.1 cat

  • 功能描述:concatenate files and print on the standard output - 查看文件内容(连接文件并打印到标准输出设备上)
  • 选项参数:
    选项 说明
    -n --number,显示所有行的行号
    -b --number-nonblank,显示行号,但不包含空行
    -E --show-ends,每行显示$结束符,空行也就是$符
    -s --squeeze-blan,把多个空行压缩成一个空行显示
    -t 显示TAB(^|)符,可用来区分空格和TAB键
  • 实例:
# -n参数,显示每一行的行号,包括空行。
$ cat -n oldboy.txt   
    1  oldboy    
    2  aa    
    3  bb    
    4  cc    
    5  dd    
    6
# -b参数,显示不包括空行的行号
$ vi 2016.txt
aa

bb

cc
dd



ee
"2016.txt" 10L, 20C written
$ cat -b 2016.txt   
    1  aa
    
    2  bb
    
    3  cc    
    4  dd


    
    5  ee
# -s参数,把多个空行压缩成一个空行
$ cat -bs 2016.txt
    1  aa
    
    2  bb
    
    3  cc
    4  dd
    
    5  ee
# 把多个文件的内容重定向到其他文件中
$ echo "111" >>test.txt
$ echo "222" >>test1.txt
$ cat test{,1}.txt>2016.txt  #其他写法cat test.txt test1.txt >2016.txt
$ cat 2016.txt
111
222
# 编辑文件
$ cat >>2016.txt  #按回车进入编辑
333
444
555 $  #直接按ctrl+d结束编辑
$ cat 2016.txt
111
222
333
444
555 $
# 非交互式进行文件编辑,EOF标识符可以替换
$ cat >>2016.txt<<EOF
>666
>EOF
$ cat 2016.txt
111
222
333
444
555
666
# 清空文件内容
$ cat /dev/null >2016.txt  #或者>2016.txt

3.2 tac

  • 功能描述:concatenate and print files in reverse - 按行反向查看文件内容(连接文件并反向打印到标准输出设备上)
  • 实例:
# cat命令和tac命令对比
$ cat test.txt
this	is	tab	line.
this is space line.
1234
$ tac test.txt
1234
this is space line.
this	is	tab	line.

3.3 more

  • 功能描述:file perusal filter for crt viewing - 分页查看文件内容
  • 实例:
# 列出目录内容,每屏查看10行
$ ls /etc | more -10
  • 技巧拓展:
    快捷键 说明
    空格 向下翻页
    b键 向上翻页
    回车键 向下一行
    =号键 显示行号
    /输入字符 搜索内容
    h键 查看快捷键帮助

3.4 less

  • 功能描述:opposite of more - 分页查看文件内容
    • 和more命令相反是一点一点加载显示文件的内容
  • 选项参数:
    选项 说明
    -N 显示行号
  • 实例:
# -N参数,显示行号
$ less -N /etc/inittab
      1 # inittab is only used by upstart for the default runlevel.
      2 #
      3 # ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
      4 #
      5 # System initialization is started by /etc/init/rcS.conf
      ...
  • 技巧拓展:
    1. 支持上下左右和PgDn和PgUp键;
    2. 空格向下翻页;
    3. b键向上翻页;
    4. 回车向下一行;
    5. =号显示行号;
    6. /输入字符可以搜索内容;
    7. h键查看快捷键帮助。

3.5 head

  • 功能描述:output the first part of files - 输出文件头部,默认前10行。
  • 选项参数:
    选项 说明
    -n -n 数字,可省略n,如取前3行:-3
    -c 指定显示n个字符
  • 实例:
# seq命令创建数字序列定向到文件中
$ seq 15 >a.txt
$ cat a.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# head命令读取文件前10行,默认前10行
$ head a.txt
1
2
3
4
5
6
7
8
9
10
# head命令读取文件前5行
$ head -5 a.txt
1
2
3
4
5
# -c参数,指定显示3个字符
$ head -c 3 test.txt
thi

3.6 tail

  • 功能描述:output the last part of files - 输出文件的尾部,默认后10行
  • 选项参数:
    选项 说明
    -n -n 数字,取后三行,习惯写法:-3
    -f 实时跟踪显示文件尾部的动态变化。
    tailf和tail -f是不同的命令,但是功能是一样的
  • 实例:
# 读取文件最后两行
$ tail -2 a.txt
14
15
# -f参数,实时显示文件尾部变化。克隆一个会话进行观察。
$ echo 更新了 >>a.txt
$ tail -f ~/test/a.txt    #克隆的会话窗口中的显示
aa
bb
bb
更新了

3.7 cut

  • 功能描述:remove sections from each line of files - 从文件的每一行截取内容
  • 选项参数:
    选项 说明
    -b 按字节截取文件
    -c 按字符截取文件
    -d 指定分隔符,默认用TAB键作为分隔符。只能用单个字符做分隔符,配合-f参数使用
    -f 指定截取区域
  • 实例:
# -b参数,按字节截取文件
$ echo "I am oldboy my qq is 1234567" >test.txt
$ cut -b 3 test.txt
a
$ cut -b 3-4 test.txt
am
$ cut -b -4 test.txt
I am
$ cut -b 4- test.txt
m oldboy my qq is 1234567
$ cut -b 1,4- test.tx
Im oldboy my qq is 1234567
$ cut -b -4,4- test.txt
I am oldboy my qq is 1234567
# -c参数,按字符截取文件
$ vi test.txt
I am oldboy my qq is 1234567
老男孩教育培训课程
$ cut -c 6 test.txt
o
培
# -d参数,指定分隔符
# -f参数,指定截取区域
$ head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
$ head -1 /etc/passwd | cut -d ":" -f 2  #-d参数指定冒号为分隔符
x
$ cat test.txt
this	is	tab	line.
this is space line.
$ cut -f 2-3 test.txt  #默认以TAB做分隔符
is	tab
this is space line.
$ cut -f 2-3 -d " " test.txt
this	is	tab	line.
is space

3.8 split

  • 功能描述:split a file into pieces - 把一个文件切割成几个文件。
    • 按照指定的行数或大小分割文件。
  • 选项参数:
    选项 说明
    -l -l 10,指定每次切割行数是10行
    -a 指定自动生成后缀的长度
    -d 指定自动生成数字后缀
    -b 指定切割文件的大小
# -l参数,指定每次切割的行数是10行,生成指定的固定前缀名new_的切割后的文件
$ split -l 10 /etc/inittab new_  #/etc/inittab文件有26行
$ ll new*
-rw-r--r-- 1 root root 319 Jun 14 18:22 new_aa
-rw-r--r-- 1 root root 441 Jun 14 18:22 new_ab
-rw-r--r-- 1 root root 124 Jun 14 18:22 new_ac
# 用wc命令查看new_*的所有文件的总行数
$ wc -l new_*
 10 new_aa
 10 new_ab
  6 new_ac
 26 total
# -a参数指定自动生成的后缀的长度
$ split -l 10 -a 4 /etc/inittab new1_
$ ll new1*
-rw-r--r-- 1 root root 319 Jun 14 18:57 new1_aaaa  #-a参数指定后缀长度是4
-rw-r--r-- 1 root root 441 Jun 14 18:57 new1_aaab
-rw-r--r-- 1 root root 124 Jun 14 18:57 new1_aaac
# -d参数,指定自动生成数字的后缀
$ split -10 -d /etc/inittab new2_
$ ll new2*
-rw-r--r-- 1 root root 319 Jun 14 19:06 new2_00
-rw-r--r-- 1 root root 441 Jun 14 19:06 new2_01
-rw-r--r-- 1 root root 124 Jun 14 19:06 new2_02
# -b参数,指定切割文件大小
$ split -b 5k testsplit.txt new3_
$ ll -h new3*
-rw-r--r--  1 root root 5.0K Jun 14 19:20 new3_aa
-rw-r--r--  1 root root 5.0K Jun 14 19:20 new3_ab
-rw-r--r--  1 root root 5.0K Jun 14 19:20 new3_ac
-rw-r--r--  1 root root  961 Jun 14 19:20 new3_ad

3.9 paste

  • 功能描述:merge lines of files - 合并文件行
  • 选项参数:
    选项 说明
    -d 指定分隔符
    -s 行列互相转换
  • 实例:
# 创建测试文件1
$ split -l 3 /etc/inittab new_
$ cat new_aa
# inittab is only used by upstart for the default runlevel.
#
# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
# 创建测试文件2
$ seq 3 >num.txt
$ cat num.txt
1
2
3
# paste命令合并两个文件的每一行
$ paste num.txt new_aa
1      # inittab is only used by upstart for the default runlevel.
2      #
3      # ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
# -d参数,指定文件的分隔符
$ paste -d ":" num.txt new_aa
1:# inittab is only used by upstart for the default runlevel.
2:#
3:# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
# -s参数,行列转换。
$ paste -s num.txt new_aa
1      2       3
# inittab is only used by upstart for the default runlevel.   #	# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
# 创建测试文件内容如下,奇数行和偶数行合并成一行
$ cat svn.txt
stu001
pw001
stu002
pw002
stu003
pw003
stu004
pw004
stu005
pw005
# -s参数,行列转换
$ paste -sd "=\n" svn.txt  #\n是换行符
stu001=pw001
stu002=pw002
stu003=pw003
stu004=pw004
stu005=pw005
# 或者可以写成
$ paste -d "=" - - <svn.txt    #两个- -分别代表=号前面的内容和后面的内容
stu001=pw001
stu002=pw002
stu003=pw003
stu004=pw004
stu005=pw005

3.10 sort

  • 功能描述:sort lines of text files - 以行为单位排序
    • 默认按照文件或读到的内容的ASCII码惊醒排序,默认升序。
  • 选项参数:
    选项 说明
    -n 按照数值排序
    -r 按照倒序排序,不加参数默认升序排序
    -u 压缩相同行成1行(不相邻的行也可以),uniq命令只能压缩相邻的相同行
    -t 指定分隔符,默认用空格做分隔符
    -k 指定区域
  • 实例:
# 创建测试文件
$ cat oldboy.txt
10.0.0.4
10.0.0.4
10.0.0.4
10.0.0.5
10.0.0.4
10.0.0.8
# sort命令对文件内容排序,默认升序
$ sort oldboy.txt 
10.0.0.4
10.0.0.4
10.0.0.4
10.0.0.4
10.0.0.5
10.0.0.8
# -r参数,倒序排序
$ sort -r oldboy.txt 
10.0.0.8
10.0.0.5
10.0.0.4
10.0.0.4
10.0.0.4
10.0.0.4
# -u参数,相同行压缩成1行
$ sort -u oldboy.txt
10.0.0.4
10.0.0.5
10.0.0.8
# 重新修改测试文本
$ cat oldboy.txt
10.0.0.4 r
10.0.0.1 g
10.0.0.6 y
10.0.0.5 a
10.0.0.9 k
10.0.0.8 c
# 默认按照第一列进行排序,第一列如果相同按后面不同的列排序
$ sort oldboy.txt
10.0.0.1 g
10.0.0.4 r
10.0.0.5 a
10.0.0.6 y
10.0.0.8 c
10.0.0.9 k
# -k参数指定区域,默认空格是分隔符。
$ sort -k 2 oldboy.txt 
10.0.0.5 a
10.0.0.8 c
10.0.0.1 g
10.0.0.9 k
10.0.0.4 r
10.0.0.6 y
# 修改测试文件
$ cat oldboy.txt 
10.0.0.4:r
10.0.0.1:g
10.0.0.6:y
10.0.0.5:a
10.0.0.9:k
10.0.0.8:c
# -t参数指定冒号是分隔符,-k指定排序第二列
$ sort -t ":" -k 2 oldboy.txt 
10.0.0.5:a
10.0.0.8:c
10.0.0.1:g
10.0.0.9:k
10.0.0.4:r
10.0.0.6:y
# -n参数按数值排序
$ cat test.txt 
2
1
4
8
7
$ sort test.txt 
1
2
4
7
8

3.11 uniq

  • 功能描述:report or omit repeated lines - 报告或忽略连续重复的行(配合sort使用)
  • 选项参数:
    选项 说明
    -c 显示每行重复次数
    -d 仅显示重复出现的行
    -u 显示出现一次的行
  • 实例:
# 创建测试文本
$ cat test1.txt
aaaa
cccc
bbbb
ffff
eeee
aaaa
aaaa
dddd
ffff
ffff
cccc
# uniq只能计算相邻的相同行重复次数
$ uniq -c test1.txt    
1 aaaa     
1 cccc     
1 bbbb     
1 ffff     
1 eeee     
2 aaaa     
1 dddd     
2 ffff     
1 cccc
# 搭配sort排序命令计算出所有重复行的重复次数
$ sort test1.txt | uniq -c    
3 aaaa     
1 bbbb     
2 cccc     
1 dddd     
1 eeee
# -u参数,显示出现1次的行
$ sort test1.txt | uniq -u
bbbb
dddd
eeee

3.12 wc

  • 功能描述:print newline, word, and byte counts for each file - 用来计算统计文件行数、单词数、字节数
  • 选项参数:
    选项 说明
    -c bytes,显示字节数
    -l lines,显示总行数
    -L --max-line-length,显示最长行的长度
    -m chars,显示字符数
    -w word,显示单词数量
  • 实例:
# -l参数,打印出文件的总行数
$ wc -l /etc/inittab
26 /etc/inittab
# -L参数,打印出最长行的长度
$ wc -L /etc/inittab
78 /etc/inittab
# -w参数,显示单词数,每个单词是空格分隔
$ wc -w /etc/inittab
149 /etc/inittab
# 显示字符数
$ wc -m /etc/inittab
884 /etc/inittab
# -c参数,显示字节数
wc -c /etc/inittab
884 /etc/inittab

3.13 iconv

  • 功能描述:convert text from one character encoding to another - 转换文本编码
  • 选项参数:
    选项 说明
    -f from-encoding,从encoding编码开始转换
    -t to-encoding,转换成encoding编码
    -l 列出已知字符编码集合
    -o file 指定输出文件
    -c 忽略输出的非法字符
    -s 禁止警告信息,但不是错误信息
    -verbose 显示进度信息
  • 实例:
# 将文件file1转码后输出到file2中
$ iconv file1 -f EUC-JP-MS -t UTF-8 -o file2

3.14 dos2unix和unix2dos

  • 功能描述:DOS/MAC to UNIX text file format converter - 将DOS(Windows)/MAC格式的文本文件转换成UNIX(Linux)格式
    • Windows换行符:\r\n
    • Linux换行符:\n
    • 相反的命令unix2dos
  • 实例:
# 在Linux中查看num.txt文件内容,并且下载到宿主机Windows系统中
$ cat num.txt 
1
2
3
$ sz num.txt 
# 此文件在Windows记事本中查看是在一行中显示的

L001-Linux常用命令汇总_第1张图片

# 使用unix2dos命令转换为Windows格式后再次下载至宿主机,在记事本中查看。
$ unix2dos num.txt 
unix2dos: converting file num.txt to DOS format ...
$ sz num.txt 

L001-Linux常用命令汇总_第2张图片

3.15 diff

  • 功能描述:compare files line by line - 逐行比较文件
    • 比较文件内容不同;
    • 比较目录内的文件不同。
  • 选项参数:
    选项 说明
    --brief 确认两个文件是否不同
    -c 详细比较出多个文件的差异之处
  • 实例:
# 创建测试文件,内容如下:
$ cat diff_A.txt 
abcd
$ cat diff_B.txt 
dcba
$ diff --brief diff_A.txt diff_B.txt
Files diff_A.txt and diff_B.txt differ
# 比较文件每行的区别,显示说明:a增加,c改变,d删除。
$ diff svn.txt svn1.txt 
2c2  #c是改变
< pw001
---
> pw0011
4c4
< pw002
---
> pw001
8d7  #d是删除
< pw004
11c10
< 
---
> abbccc
# 比较两个目录中的文件
$ diff test test1
Only in test: 2.jpg
Only in test: 3.jpg
Only in test: 4.jpg
Only in test: 5.jpg
Only in test1: aa.sh
Only in test: a.txt
Only in test: test_a
Only in test: test.sh
Only in test: test.sh.hard

3.16 vimdiff

  • 功能描述:edit two, three or four versions of a file with Vim and show differences - 可视化对比工具,比较文件不同。最多可比较4个文件。
  • 实例:
    L001-Linux常用命令汇总_第3张图片

3.17 rev

  • 功能描述:reverse lines of a file or files - 按字符反向查看文件内容
  • 实例:
# cat命令和rev命令的区别
$ cat test.txt
this	is	tab	line.
this is space line.
1234
$ rev test.txt
.enil	bat	si	siht
.enil ecaps si siht
4321

3.18 join

  • 功能描述:join lines of two files on a common field - 将两个文件中指定栏位内容相同的行连接起来
  • 选项参数:
    选项 说明
    -a 除了显示原来的输出内容之外,还显示指令文件中没有相同栏位的行
    -e<字符串> [文件1]与[文件2]中找不到指定的栏位,则在输出中填入选项中的字符串
    -i或--ignore-case 比较栏位内容时,忽略大小写的差异
    -o<格式> 按照指定的格式来显示结果
    -t<字符> 使用栏位的分割字符
    -v<1或2> 和-a相同,但是只显示文件中没有相同栏位的行
    -1<栏位> 连接[文件1]指定的栏位
    -2<栏位> 连接[文件2]指定的栏位
  • 实例:
# 编辑测试文本month_cn.txt和month_en.txt
$ vim month_cn.txt
1 一月
2 二月
3 三月
4 四月
5 五月
6 六月
7 七月
8 八月
9 九月
10  十月
11  十一月
12  十二月
13  十三月,故意的
$ vim month_en.txt
1 January
2 February
3 March
4 April
5 May
6 June
7 July
8 August
9 September
10  October
11  November
12  December
14  MonthUnknow
# 连接相同内容栏位的行
$ join month_cn.txt month_en.txt 
1 一月 January
2 二月 February
3 三月 March
4 四月 April
5 五月 May
6 六月 June
7 七月 July
8 八月 August
9 九月 September
10 十月 October
11 十一月 November
12 十二月 December
# 左连接(又称左外连接,显示左边所有记录),显示左边文件中的所有记录,右边文件中没有匹配的显示空白。
$ join -a1 month_cn.txt month_en.txt 
1 一月 January
2 二月 February
3 三月 March
4 四月 April
5 五月 May
6 六月 June
7 七月 July
8 八月 August
9 九月 September
10 十月 October
11 十一月 November
12 十二月 December
13 十三月,故意的
# 右连接(又称右外连接,显示右边所有记录),显示右边文件中的所有记录,左边文件中没有匹配的显示空白。
$ join -a2 month_cn.txt month_en.txt 
1 一月 January
2 二月 February
3 三月 March
4 四月 April
5 五月 May
6 六月 June
7 七月 July
8 八月 August
9 九月 September
10 十月 October
11 十一月 November
12 十二月 December
14 MonthUnknow
# 全连接(又称全外连接,显示左边和右边所有记录)
$ join -a1 -a2 month_cn.txt month_en.txt 
1 一月 January
2 二月 February
3 三月 March
4 四月 April
5 五月 May
6 六月 June
7 七月 July
8 八月 August
9 九月 September
10 十月 October
11 十一月 November
12 十二月 December
13 十三月,故意的
14 MonthUnknow
# 指定输出字段,比如参数 -o 1.1 表示只输出第一个文件的第一个字段。
$ join -o 1.1 month_cn.txt month_en.txt 
1
2
3
4
5
6
7
8
9
10
11
12
$ join -o 1.1 2.2 month_cn.txt month_en.txt 
1 January
2 February
3 March
4 April
5 May
6 June
7 July
8 August
9 September
10 October
11 November
12 December
$ join -o 1.1 2.2 1.2 month_cn.txt month_en.txt 
1 January 一月
2 February 二月
3 March 三月
4 April 四月
5 May 五月
6 June 六月
7 July 七月
8 August 八月
9 September 九月
10 October 十月
11 November 十一月
12 December 十二月
# -t参数,指定分隔符
$ join -t ":" /etc/passwd /etc/shadow
root:x:0:0:root:/root:/bin/bash:$6$bdN.334aWsF3a.4i$7Wz4g1PSmJl0T8uSMslucVbA6VaMNeMgPZFaCgEWEmDbeOX/UxtAsI4dwxf4sunbx5wQN5NVQo2Bc/iM0a6Ug/:17154:0:99999:7:::
bin:x:1:1:bin:/bin:/sbin/nologin:*:15980:0:99999:7:::
daemon:x:2:2:daemon:/sbin:/sbin/nologin:*:15980:0:99999:7:::
adm:x:3:4:adm:/var/adm:/sbin/nologin:*:15980:0:99999:7:::
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin:*:15980:0:99999:7:::
sync:x:5:0:sync:/sbin:/bin/sync:*:15980:0:99999:7:::
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown:*:15980:0:99999:7:::
halt:x:7:0:halt:/sbin:/sbin/halt:*:15980:0:99999:7:::
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin:*:15980:0:99999:7:::
...(以下省略)

3.19 tr

  • 功能描述:translate or delete characters - 替换字符或者删除字符
    • 命令行显示,不改变文件本身。
  • 选项参数:
    选项 说明
    -d 删除
  • 实例:
# 创建测试文本,替换字符。
$ cat svn1.txt 
stu001
pw0011
stu002
pw001
stu003
pw003
stu004
stu005
pw005
abbccc
# 0替换成-,1替换成9
$ tr "01" "-9" <svn1.txt
stu--9
pw--99
stu--2
pw--9
stu--3
pw--3
stu--4
stu--5
pw--5
abbccc
# 删除文件中所有的0,未改变文件本身。
$ tr -d "0" <svn1.txt 
stu1
pw11
stu2
pw1
stu3
pw3
stu4
stu5
pw5
abbccc
  • 技巧拓展:
# 加密原理
$ tr "[0-9]" "[A-Z]" <svn1.txt 
stuAAB
pwAABB
stuAAC
pwAAB
stuAAD
pwAAD
stuAAE
stuAAF
pwAAF
abbccc
# 解密
$ tr "[A-Z]" "[0-9]" <svn1.txt          
stu001
pw0011
stu002
pw001
stu003
pw003
stu004
stu005
pw005
abbccc

3.20 vi和vim

  • 功能描述:a programmers text editor - vi和vim都是命令行文本编辑器
    • vi是简单文本编辑器。
    • vim更复杂,功能更强大。
  • 选项参数:
    L001-Linux常用命令汇总_第4张图片
    L001-Linux常用命令汇总_第5张图片
  • 实例:
# vim编辑文件基本操作
$ vim test.txt  #打开文件后,按i,a或o由命令模式进入编辑模式;
  1 I am studying Linux.  #编辑完成后,按Esc键退出编辑模式进入命令模式;
  2 I am studying Linux.  #最后在命令模式下输入":wq"退出并保存编辑的内容。
~
~
~
"test.txt"
2L, 42C written

3.21 seq

  • 功能描述:print a sequence of numbers - 打印数字序列
  • 选项参数:
    选项 说明
    -s --separator=STRING,指定序列的分隔符,默认是\n
    -w --equal-width,在列前加0,使宽度相同
  • 实例:
$ seq -s "-->" 10
1-->2-->3-->4-->5-->6-->7-->8-->9-->10
# -w参数,使宽度相同
$ seq -s "-->" -w 10  
01-->02-->03-->04-->05-->06-->07-->08-->09-->10
# 生成1-100的数字序列定向到文件中
$ seq 100 > ett.txt
# 生成1-5的数字序列,默认是\n换行符
$ seq 5
1
2
3
4
5
# 生成偶数序列
$ seq 2 2 10
2
4
6
8
10

4. 文件压缩及解压命令

4.1 tar

  • 功能描述:GNU `tar’ saves many files together into a single tape or disk archive, and can restore individual files from the archive. - 文件打包命令
  • 选项参数:
    选项 说明
    -z 同时具有gzip的属性
    -c 建立一个压缩文件
    -v 显示执行过程
    -f 使用存档名,要立即接存档名。多个参数时写在最后。
    -x 提取文件
  • 实例:
# 打包/etc目录,生成的压缩包以时间命名
$ tar -zcvf /server/etc_$(date +%F).tar.gz /etc
$ ll
total 9480
-rw-r--r-- 1 root root 9700314 Feb  9 11:51 etc_2017-02-09.tar.gz
drwxr-xr-x 2 root root    4096 Feb  9 11:39 scripts
# 打包/etc目录,生成的压缩包以日期时间命名,tar命令打包时间格式不能使用:冒号,否则报错
$ tar -zcvf $(date +"%Y年%m月%d日_%H点%M分%S秒").tar.gz etc/
# 或者
$ tar -zcvf $(date +"%Y-%m-%d_%H.%M.%S").tar.gz etc/
$ ll
total 18314
-rw-r--r--   1 root root 9323529 Feb 22 16:41 2019-02-22_16.41.02.tar.gz
-rw-r--r--   1 root root 9323529 Feb 22 16:53 2019年02月22日_16点53分22秒.tar.gz
…
# 解压缩
$ tar -xf etc_2017-02-09.tar.gz 
$ ll
total 9484
drwxr-xr-x 83 root root    4096 Feb  9 10:47 etc
-rw-r--r--  1 root root 9700314 Feb  9 11:51 etc_2017-02-09.tar.gz
drwxr-xr-x  2 root root    4096 Feb  9 11:39 scripts

4.2 gzip

  • 功能描述:compress or expand files - 压缩或解压缩文件
    • gzip是个使用广泛的压缩程序,文件经它压缩过后,其名称后面会多处“.gz”扩展名。gzip不仅可以用来压缩大的、较少使用的文件以节省磁盘空间,还可以和tar命令一起构成Linux操作系统中比较流行的压缩文件格式。据统计,gzip命令对文本文件有60%~70%的压缩率。减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间。
  • 选项参数:
    选项 说明
    -a或--ascii 使用ASCII文字模式
    -d或--decompress 或–uncompress,解开压缩文件
    -f或--force 强行压缩文件。不理会文件名称或硬盘连接是否存在以及文件是否为符号链接
    -h或--help 在线帮助
    -l或--list 列出压缩文件的相关信息
    -L或--license 显示版本与版权信息
    -n或--no-name 压缩文件时,不保存原来的文件名称及时间戳
    -N或--name 压缩文件时,保存原来的文件名称及时间戳
    -q或--quiet 不显示警告信息
    -r或--recursive 递归处理,将指定目录下的所有文件及子目录一并处理
    -S或<压缩字尾字符串> 或--suffix<压缩字尾字符串>,更改压缩字尾字符串
    -t或--test 测试压缩文件是否正确无误
    -v或--verbose 显示指令执行过程
    -V或--version 显示版本信息
    -<压缩效率> 压缩效率是一个介于1-9的数值,预设为6,指定越大的数值,压缩效率就会越高
    --best 此参数的效果和指定-9的参数相同
  • 实例:
# 将test1目录下的每个文件压缩成.gz文件
$ ll
total 0
-rw-r--r-- 1 root root 0 Oct  2 15:46 test01
-rw-r--r-- 1 root root 0 Oct  2 15:46 test02
-rw-r--r-- 1 root root 0 Oct  2 15:46 test03
-rw-r--r-- 1 root root 0 Oct  2 15:46 test04
-rw-r--r-- 1 root root 0 Oct  2 15:46 test05
$ gzip *
$ ll
total 20
-rw-r--r-- 1 root root 27 Oct  2 15:46 test01.gz
-rw-r--r-- 1 root root 27 Oct  2 15:46 test02.gz
-rw-r--r-- 1 root root 27 Oct  2 15:46 test03.gz
-rw-r--r-- 1 root root 27 Oct  2 15:46 test04.gz
-rw-r--r-- 1 root root 27 Oct  2 15:46 test05.gz
# 把上例中每个压缩文件解压,并列出详细信息
$ gzip -dv *
test01.gz:	  0.0% -- replaced with test01
test02.gz:	  0.0% -- replaced with test02
test03.gz:	  0.0% -- replaced with test03
test04.gz:	  0.0% -- replaced with test04
test05.gz:	  0.0% -- replaced with test05
# 详细显示每个压缩文件的信息,但不解压
$ gzip -l *
         compressed        uncompressed  ratio uncompressed_name
                 27                   0   0.0% test01
                 27                   0   0.0% test02
                 27                   0   0.0% test03
                 27                   0   0.0% test04
                 27                   0   0.0% test05
# 压缩一个tar备份文件,此时压缩文件的扩展名为.tar.gz
$ gzip -r log.tar
# 递归的压缩目录,所有test1下面的文件都变成了*.gz,目录依然存在只是目录里面的文件相应变成了*.gz这就是压缩,和打包不同。因为是对目录操作,所以需要加上-r选项,这样也可以对子目录进行递归了。
$ gzip -rv test1
test1/test05:	  0.0% -- replaced with test1/test05.gz
test1/test04:	  0.0% -- replaced with test1/test04.gz
test1/test03:	  0.0% -- replaced with test1/test03.gz
test1/test02:	  0.0% -- replaced with test1/test02.gz
test1/test01:	  0.0% -- replaced with test1/test01.gz
# 递归的解压目录
$ gzip -dr test1
$ ll test1
total 0
-rw-r--r-- 1 root root 0 Oct  2 15:46 test01
-rw-r--r-- 1 root root 0 Oct  2 15:46 test02
-rw-r--r-- 1 root root 0 Oct  2 15:46 test03
-rw-r--r-- 1 root root 0 Oct  2 15:46 test04
-rw-r--r-- 1 root root 0 Oct  2 15:46 test05

4.3 zip

  • 功能描述:package and compress (archive) files - 打包和压缩(归档)文件
    • 压缩后会产生“.zip”扩展名的压缩文件
  • 选项参数:
    选项 说明
    -A 调整可执行的自动解压缩文件
    -b<工作目录> 指定暂时存放文件的目录
    -c 替每个被压缩的文件加上注释
    -d 从压缩文件内删除指定的文件
    -D 压缩文件内部建立目录名称
    -f 此参数的效果和指定-u参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中
    -F 尝试修复已损坏的压缩文件
    -g 将文件压缩后附加在已有的压缩文件之后,而非另行建立新的压缩文件
    -h 在线帮助
    -i<范本样式> 只压缩符合条件的文件
    -j 只保存文件名称及其内容,而不存放任何目录名称
    -J 删除压缩文件前面不必要的数据
    -k 使用MS-DOS兼容格式的文件名称
    -l 压缩文件时,把LF字符置换成LF+CR字符
    -ll 压缩文件时,把LF+cp字符置换成LF字符
    -L 显示版权信息
    -m 将文件压缩并加入压缩文件后,删除原始文件,即把文件移到压缩文件中
    -n<字尾字符串> 不压缩具有特定字尾字符串的文件
    -o 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该文件相同
    -q 不显示指令执行过程
    -r 递归处理,将指定目录下的所有文件和目录一并处理
    -S 包含系统和隐藏文件
    -t<日期时间> 把压缩文件的日期设成指定的日期
    -T 检查备份文件内的每个文件是否正确无误
    -u 更新较新的文件到压缩文件内
    -v 显示指令执行过程或显示版本信息
    -V 保存VMS操作系统的文件属性
    -w 在文件名称里加入斑斑编号,本参数仅在VMS操作系统下有效
    -x<范本样式> 压缩时排除符合条件的文件
    -X 不保存额外的文件属性
    -y 直接保存符号链接,而非该链接所指向的文件,本参数尽在UNIX之类的系统下有效
    -z 替压缩文件加上注释
    -$ 保存第一个被压缩文件所在磁盘的卷册名称
    -<压缩效率> 压缩效率是一个介于1-9的数值
  • 实例:
# 将/etc/sysconfig/目录下的所有文件和文件夹打包为当前目录下的sysconfig.zip
$ zip -qr sysconfig.zip /etc/sysconfig

4.4 unzip

  • 功能描述:list, test and extract compressed files in a ZIP archive - 在ZIP存档中列出,测试和提取压缩文件
  • 选项参数:
    选项 说明
    -c 将解压缩的结果显示到屏幕上,并对字符做适当的转换;
    -f 更新现有的文件
    -l 显示压缩文件内所包含的文件
    -p 与-c类似,会将压缩的结果显示到屏幕上,但不会执行任何转换
    -t 检查压缩文件是否正确
    -u 与-f参数类似,但是除了更新现有的文件外,也会将压缩文件中的其他文件解压缩到目录中
    -v 执行时显示详细的信息
    -z 仅显示压缩文件的备注文字
    -a 对文本文件进行必要的字符转换
    -b 不要对文本文件进行字符转换
    -C 压缩文件中的文件名称区分大小写
    -j 不处理压缩文件中原有的目录路径
    -L 将压缩文件中的全部文件名改为小写
    -M 将输出结果送到more程序处理
    -n 解压缩时不要覆盖原有的文件
    -o 不必先询问用户,unzip执行后覆盖原有的文件
    -P<密码> 使用zip的密码选项
    -q 执行时不显示任何信息
    -s 将文件名中的空白字符转换为底线字符
    -V 保留VMS的文件版本信息
    -X 解压缩时同时回存文件原来的UID/GID
    -d<目录> 指定文件解压缩后所要存储的目录
    -x<文件> 指定不要处理.zip压缩文件中的那些文件
    -Z unzip -Z等于执行zipinfo命令
  • 实例:
# 将压缩文件text.zip在当前目录下解压缩
$ unzip text.zip 
Archive:  text.zip
 extracting: test.txt                
# 将压缩文件text.zip在指定目录/tmp下解压缩,如果已有相同文件存在,要求unzip命令不覆盖原文件
$ ll /tmp
total 4
-rw-r--r-- 1 root root 10 Oct  2 15:17 test.txt
$ unzip -n text.zip -d /tmp/
Archive:  text.zip
$ ll /tmp
total 4
-rw-r--r-- 1 root root 10 Oct  2 15:17 test.txt
# 查看压缩文件目录,但不解压
$ unzip -v text.zip 
Archive:  text.zip
 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
      10  Stored       10   0% 09-23-2017 21:46 6a34fde8  test.txt
--------          -------  ---                            -------
      10               10   0%                            1 file
# 将压缩文件test.zip在指定目录/tmp下解压缩,如果已有相同的文件存在,要求unzip命令覆盖原先的文件。
$ unzip -o text.zip -d /tmp/
Archive:  text.zip
 extracting: /tmp/test.txt           

5. 信息显示命令

5.1 uname

  • 功能描述:print system information - 显示系统信息
  • 选项参数:
    选项 说明
    -m 查看是32位还是64位系统
    -r 显示内核版本
    -n 显示主机名(hostname命令)
    -a 显示全部信息
  • 实例:
# 查看全部内核与系统版本信息
$ uname -a
Linux CentOS67 2.6.32-573.26.1.el6.x86_64
\#1 SMP Wed May 4 00:57:44 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
$ uname -m
x86_64
$ uname -r
2.6.32-573.26.1.el6.x86_64
$ uname -n
CentOS67
#查看当前系统版本信息也可以查看redhat-release文件
$ cat /etc/redhat-release
CentOS release 6.7 (Final)

5.2 hostname

  • 功能描述:show or set the system’s host name - 显示或设置系统主机名称
    • 此命令设置主机名是临时生效,永久生效需要修改==/etc/sysconfig/network==文件
  • 实例:
# 显示主机名
$ hostname
Test
# 修改主机名
$ hostname Test1  #临时生效
# Ctrl+d退出登录,重新登录后显示新设置的主机名,临时生效。重启后失效。
# 重启后发现主机名未改变
$ cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=Test  #配置文件中的名字还是Test

5.3 dmesg

  • 功能描述:print or control the kernel ring buffer - 检查和控制内核的环形缓冲区
    • kernel会将开机信息存储在ring buffer中。
    • 显示开机信息,用户诊断系统故障。开机信息保存在/var/log/dmesg文件中
  • 选项参数:
    选项 说明
    -c 显示信息后,清除ring buffer中的内容。
    -s<缓冲区大小> 预设为8196,刚好等于ring buffer的大小。
    -n 设置记录信息的层级
  • 实例:
# 显示开机信息
$ dmesg | tail -5
lo: Disabled Privacy Extensions
e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
e1000: eth1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
eth0: no IPv6 routers present
eth1:no IPv6 routers present

5.4 uptime

  • 功能描述:Tell how long the system has been running - 显示系统总运行时间和平均负载
  • 选项参数:
    选项 说明
    -V 显示版本信息
  • 实例:
# 显示uptime命令的版本信息
$ uptime -V
procps version 3.2.8
# 查看系统负载。依次为:当前时间、运行时间、登录用户数、系统在过去1分钟、5分钟、15分钟的平均负载
$ uptime
 16:01:26 up 13 min,  1 user,  load average: 0.00, 0.00, 0.00

5.5 stat

  • 功能描述:display file or file system status显示文件或文件系统状态(查看文件属性)
  • 选项参数:
    选项 说明
    -L 支持符号连接
    -f 显示文件系统状态而非文件状态
    -t 以简洁方式输出信息
  • 实例:
# stat命令查看文件属性信息
$ stat oldboy.txt 
  File: `oldboy.txt'
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 803h/2051d      Inode: 2229        Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-05-16 22:22:36.045149966 +0800  #访问时间
Modify: 2016-05-16 22:22:32.758156282 +0800  #修改时间
Change: 2016-05-16 22:22:32.758156282 +0800  #状态改变时间
# 创建测试文件,stat命令查看文件的三个时间信息
$ touch oldboy.txt
$ stat oldboy.txt 
  File: `oldboy.txt'
  Size: 45              Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d      Inode: 3549        Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-06-23 10:18:35.359317140 +0800
Modify: 2016-06-23 10:18:35.359317140 +0800
Change: 2016-06-23 10:18:35.359317140 +0800
# 向文件中添加内容,查看三个时间信息的变化
$ echo 111 > oldboy.txt 
$ stat oldboy.txt       
  File: `oldboy.txt'
  Size: 4               Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d      Inode: 3549        Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-06-23 10:18:35.359317140 +0800
Modify: 2016-06-23 10:18:51.154313554 +0800  #追加了内容未打开,文件的修改时间改变
Change: 2016-06-23 10:18:51.154313554 +0800  #追加了内容未打开,状态改变时间改变
# cat命令查看文件,观察变化
$ cat oldboy.txt 
111
$ stat oldboy.txt 
  File: `oldboy.txt'
  Size: 4               Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d      Inode: 3549        Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-06-23 10:19:48.281309377 +0800  #cat查看打开了文件,访问时间改变
Modify: 2016-06-23 10:18:51.154313554 +0800
Change: 2016-06-23 10:18:51.154313554 +0800
# 改变文件属性(用户和用户组)
$ chown oldboy:oldboy oldboy.txt 
$ stat oldboy.txt                
  File: `oldboy.txt'
  Size: 4               Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d      Inode: 3549        Links: 1
Access: (0644/-rw-r--r--)  Uid: (  500/  oldboy)   Gid: (  500/  oldboy)
Access: 2016-06-23 10:19:48.281309377 +0800
Modify: 2016-06-23 10:18:51.154313554 +0800
Change: 2016-06-23 10:20:39.523315754 +0800  #chown改变了属性,状态改变时间变化

5.6 du

  • 功能描述:estimate file space usage - 估计文件空间使用情况
  • 选项参数:
    选项 说明
    -s --summarize,总大小
    -h 以人类可读方式显示
  • 实例:
# 不加任何参数,查看当前目录下的文件和目录总大小
$ du
4      ./test1
4      ./test
160    .
# -hs,参数,以人类可读方式显示总大小
$ du -hs
160K
# 显示文件install.log的大小
$ du -hs install.log
28K	install.log

5.7 df

  • 功能描述:report file system disk space usage - 查看文件系统磁盘空间
  • 选项参数:
    选项 | 说明
    -i | 查看inode节点数量
    -h | 人类可读方式查看磁盘空间
    -T | 查看文件系统类型
  • 实例:
# -i参数,查看inode使用情况
$ df -i
Filesystem     Inodes IUsed  IFree IUse% Mounted on
/dev/sda3      413712 70206 343506   17% /
tmpfs          125595     1 125594    1% /dev/shm
/dev/sda1       51200    44  51156    1% /boot
# -h参数,人类可读方式查看存储空间使用情况
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       6.1G  1.7G  4.2G  28% /
tmpfs           491M     0  491M   0% /dev/shm
/dev/sda1       190M   69M  112M  39% /boot
# -T参数,查看文件系统格式
$ df -T
Filesystem     Type  1K-blocks    Used Available Use% Mounted on
/dev/sda3      ext4    8439248 1463756   6540140  19% /
tmpfs          tmpfs    502384       0    502384   0% /dev/shm
/dev/sda1      ext4     194241   36022    147979  20% /boot
# 查看磁盘分区情况
$ cat /proc/partitions
major minor  #blocks  name

   8        0    8388608 sda
   8        1     204800 sda1
   8        2    1536000 sda2
   8        3    6646784 sda3

5.8 top

  • 功能描述:display Linux tasks - 实时显示进程活动与负载情况
  • 选项参数:
    选项 说明
    d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之
    p 通过指定监控进程ID来仅仅监控某个进程的状态
    q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
    S 指定累计模式
    s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
    i 使top不显示任何闲置或者僵死进程。
    c 显示整个命令行而不只是显示命令名
  • 实例:
# 统计信息前5行是系统整体的统计信息。
$ top
#15:52:17 当前时间,up  2:17 系统运行时间(时:分),1 user 当前登录用户数,
#load average: 0.00, 0.00, 0.00 系统负载,三个数值分别为1分钟、5分钟、15分钟前到现在的平均值
top - 15:52:17 up  2:17,  1 user,  load average: 0.00, 0.00, 0.00
Tasks:  71 total,   1 running,  70 sleeping,   0 stopped,   0 zombie
#us用户空间占用CPU百分比,sy内核空间占用cpu百分比,ni用户进程空间内改变过优先级的进程占用CPU百分比,id空闲CPU百分比,wa等待输入输出的CPU时间百分比,hi硬件CPU中断占用百分比,st虚拟机占用百分比
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1004768k total,   245504k used,   759264k free,    25928k buffers
Swap:  1572860k total,        0k used,  1572860k free,   125016k cached
#PR优先级,NI--nice值,负值表示高优先级,正值表示低优先级。VIRT进程使用的虚拟内存总量,单位kb,VIRT=SWAP+RES,RES进程使用的、未被换出的物理内存大小,单位kb。#RES=CODE+DATA,SHR共享内存大小,单位kb,S进程状态(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)
   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
     7 root      20   0     0    0    0 S  0.3  0.0   0:12.80 events/0 
    17 root      20   0     0    0    0 S  0.3  0.0   0:00.07 bdi-default 
     1 root      20   0 19232 1512 1224 S  0.0  0.2   0:01.37 init 
     2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd 
#常用操作
$ top  #每隔5秒显式所有进程的资源占用情况
$ top -d 2  #每隔2秒显式所有进程的资源占用情况
$ top -c  #每隔5秒显式进程的资源占用情况,并显示进程的命令行参数(默认只有进程名)
$ top -p 12345 -p 6789  #每隔5秒显示pid是12345和pid是6789的两个进程的资源占用情况
$ top -d 2 -c -p 123456  #每隔2秒显示pid是12345的进程的资源使用情况,并显式该进程启动的命令行参数
  • 技巧拓展:
    快捷键 说明
    f 更改显示内容,选择显示的内容。按f键之后会显示列的列表,按a-z即可显示或隐藏对应的列,最后按回车键确定。
    o 按o键可以改变列的显示顺序。按小写的a-z可以将相应的列向右移动,而大写的A-Z可以将相应的列向左移动。最后按回车键确定。
    F或O 按大写的F或O键,然后按a-z可以将进程按照相应的列进行排序。而大写的R键可以将当前的排序倒转。
    h或? 显示帮助画面,给出一些简短的命令总结说明
    k 终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。
    i 忽略闲置和僵死进程,这是一个开关式命令。
    q 退出程序
    r 重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。
    S 切换到累计模式。
    s 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成ms。输入0值则系统将不断刷新,默认值是5s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。
    f或F 从当前显示中添加或者删除项目。
    o或O 改变显示项目的顺序。
    l 切换显示平均负载和启动时间信息。
    m 切换显示内存信息。
    t 切换显示进程和CPU状态信息。
    c 切换显示命令名称和完整命令行。
    M 根据驻留内存大小进行排序。
    P 根据CPU使用百分比大小进行排序。
    T 根据时间/累计时间进行排序。
    W 将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。

5.9 free

  • 功能描述:Display amount of free and used memory in the system - 显示系统挂起、空闲和使用的内存
  • 选项参数:
    选项 说明
    -m 以MB为单位显示
    -h 以人类可读方式显示
  • 实例:
# 以MB为单位显示系统内存情况
free -m
              total       used       free    shared    buffers     cached
Mem:            981        102        879         0        10         31
-/+ buffers/cache:          60        920
Swap:          1499          0       1499
  • 各行说明:
    • Mem行解释:
      • total内存总数:used已经使用的内存数;free空闲的内存数;
      • shared当前已经废弃不用;buffers Buffer缓存内存数;cached Page缓存内存数。
      • 关系:total=used+free
    • (-/+ buffers/cache)行解释:
      • (-buffers/cache) used内存数:Mem行中的used–buffers–cached;
      • (+buffers/cache) free内存数:Mem行中的 free + buffers + cached;
      • 可见==-buffers/cache是被程序实实在在吃掉的内存,而+buffers/cache是可以使用的内存总数==。

5.10 date

  • 功能描述:print or set the system date and time - 显示和设置系统日期和时间
  • 选项参数:
    选项 说明
    -s --set=string,字符串形式设置当前时间
    -d --date-string,显示字符串所指的日期与时间,非当前时间。可设置+-天数或年月的操作。
    %Y 年,四位
    %y last two digits of year(00…99),年份的最后两位数
    %m month(01…12),月份
    %D date,same as %m%d%y
    %d day of month(e.g,01)
    %F full date,same as %Y%m%d
    %N nanoseconds (000000000…999999999),纳秒
    %t 跳格[Tab 键]
    %H 小时(00~23)
    %I 小时(00~12)
    %M 分钟(00~59)
    %S 秒(00~59)
    %j 今年中的第几天
  • 实例:
# 显示系统当前时间
$ date
Sun Jul 10 02:08:08 CST 2016
# 按照“年-月-日 小时:分钟:秒”的格式查看当前系统时间
$ date "+%Y-%m-%d %H:%M:%S"
2018-06-02 19:17:47
# -s参数,设置为字符串指定的时间
$ date -s "20160710 00:10:00"
Sun Jul 10 00:10:00 CST 2016
$ date +"%Y-%m-%d-%w"  #%w,day of week (0..6); 0 is Sunday
2016-07-10-0
# -d参数,设置字符串所描述的时间,非当前时间。
# +-month,+-year,月和年的加减显示
# +-day,天数的加减显示
$ date -d "-1 day" +"%Y-%m-%d"  #显示前1天的日期
2016-07-09
$ date -d "+1 day" +"%Y-%m-%d"  #显示后1天的日期
2016-07-11
#时间同步
$ ntpdate s1a.time.edu.cn  #北京邮电大学时间同步服务器
20 Dec 16:55:52 ntpdate[26679]: step time server 202.112.10.60 offset 116.805593 sec

5.11 cal

  • 功能描述:displays a calendar - 显示日历
  • 选项参数:
    选项 说明
    -1 单月显示,默认选项。
    -3 显示上个月,当前月,下个月。
    -s 以周日为每周的第一天显示,默认选项。
    -m 以周一为每周的第一天显示。
    -j julian day,天文学。
    -y 显示当年日历
    -V 显示版本信息
  • 实例:
# 显示默认日历
$ cal
    February 2017   
Su Mo Tu We Th Fr Sa
          1  2  3  4
 5  6  7  8  9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28
# 显示上个月、当前月、下个月
$ cal -3
    January 2017          February 2017          March 2017     
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa
 1  2  3  4  5  6  7            1  2  3  4            1  2  3  4
 8  9 10 11 12 13 14   5  6  7  8  9 10 11   5  6  7  8  9 10 11
15 16 17 18 19 20 21  12 13 14 15 16 17 18  12 13 14 15 16 17 18
22 23 24 25 26 27 28  19 20 21 22 23 24 25  19 20 21 22 23 24 25
29 30 31              26 27 28              26 27 28 29 30 31   

5.12 sosreport

  • 功能描述:Collect and package diagnostic and support data - 收集并打包诊断和支持数据
    • 当Linux系统出现故障需要联系技术支持人员时,大多数时候都要先使用这个命令来简单收集系统的运行状态和服务配置信息,以便让技术支持人员能够远程解决一些小问题,亦或让他们能提前了解某些复杂问题。
  • 实例:
$ sosreport
sosreport (version 3.2)

This command will collect diagnostic and configuration information from
this CentOS Enterprise Linux system and installed applications.

An archive containing the collected information will be generated in
/tmp/sos.syRwtH and may be provided to a Red Hat support representative.

Any information provided to Red Hat will be treated in accordance with
the published support policies at:

  https://access.redhat.com/support/

The generated archive may contain data considered sensitive and its
content should be reviewed by the originating organization before being
passed to any third party.

No changes will be made to system configuration.

Press ENTER to continue, or CTRL-C to quit.  #此处敲击回车来确认收集信息

Please enter your first initial and last name [backup]:  #此处敲击回车来确认主机编号
Please enter the case id that you are generating this report for []:  #此处敲击回车来确认主机编号 

 Setting up archive ...
 Setting up plugins ...
 Running plugins. Please wait ...

  Running 72/72: yum...                      
Creating compressed archive...

Your sosreport has been generated and saved in:
  /tmp/sosreport-backup-20190618113613.tar.xz  #按下回车键继续

The checksum is: 50357476d44e3813e636806fcd1e37f4

Please send this file to your support representative.
$ ls /tmp  #自动生成了报告打包文件
sosreport-backup-20190618113613.tar.xz  sosreport-backup-20190618113613.tar.xz.md5

6. 搜索文件命令

6.1 which

  • 功能描述:shows the full path of (shell) commands - 显示(shell)命令的完整路径
    • 环境变量PATH中保存了查找命令时需要遍历的目录。which指令会在环境变量$PATH设置的目录里查找符合条件的文件。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
  • 选项参数:
    选项 说明
    -n<文件名长度> 指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名
    -p<文件名长度> 与-n参数相同,但此处的<文件名长度>包含了文件的路径
    -w 指定输出时栏位的宽度
    -V 显示版本信息
  • 实例:
$ which pwd
/bin/pwd

6.2 find

  • 功能描述:search for files in a directory hierarchy - 搜索目录层次结构中的文件
  • 选项参数:
    选项 说明
    -type 文件类型:f file,d directory,c character,b block,s socket
    -name -name “文件名”,按文件名查找。可以使用"*","?"等通配符匹配
    -mtime -mtime 时间,按修改时间查找,时间是数字格式,例如:7天以前:+7,第7天:7,最近7天:-7
    -atime 按访问时间查找,例如:7天以前:+7,第7天:7,最近7天:-7
    -ctime 按状态改变时间查找,例如:7天以前:+7,第7天:7,最近7天:-7
    -perm -perm 4755,按权限查找
    ! 取反
    -a and,交集,并且。
    -o or,并集,或者。例如-name “*.sh” -o -name “a”
    -maxdepth 查找的目录深度(层数)。例如:-maxdepth 1
  • 实例:
#find删除方法
$ find data/ -type f -name "oldboy.txt" | xargs rm -f
#或者:
$ find data/ -type f -name "oldboy.txt" -exec rm -f {} \;
#查找当前目录下的.txt文件,删除7天前修改过的.txt文件
$ find ./ -type f -name "*.txt" -mtime +7 | xargs rm -f
#查找当前目录下删除7天以前修改过的,以oldboy结尾的目录。
$ find ./ -type d -name "*oldboy" -mtime +7 | xargs rm -fr

6.3 whereis

  • 功能描述:locate the binary, source, and manual page files for a command
    • whereis命令用来定位指令的二进制程序、源代码文件和man手册页等相关文件的路径。whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。和find相比,whereis查找的速度非常快,这是因为linux系统会将系统内的所有文件都记录在一个数据库文件中,当使用whereis和下面即将介绍的locate时,会从数据库中查找数据,而不是像find命令那样,通过遍历硬盘来查找,效率自然会很高。但是该数据库文件并不是实时更新,默认情况下是一星期更新一次,因此,我们在用whereis和locate查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新,可使用updatedb命令更新数据库。
# 查找ifconfig命令和man手册的位置
$ whereis ifconfig
ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz

6.4 locate和slocate

  • 功能描述:find files by name - 通过文件名查找文件
    • locate命令其实是find -name的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/mlocate/mlocate.db,这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。
  • 选项参数:
    选项 说明
    -d<目录> --database<目录>,指定数据库所在的目录
    -u 更新slocate数据库
    -i 忽略大小写
    --help 显示帮助
    --version 显示版本信息
  • 实例:
# 搜索/etc目录下所有已sh开头的文件
$ locate /etc/sh
/etc/shadow
/etc/shadow-
/etc/shells
# 搜索用户主目录下,所有以t开头的文件,并忽略大小写
$ locate -i ~/t
/root/ThinkPad.txt
/root/test.sh
/root/test.txt
/root/test1
/root/text.zip
/root/tmp_2017-01-21.tar.gz
/root/test1/test01
/root/test1/test02
/root/test1/test03
/root/test1/test04
/root/test1/test05
- 技巧扩展:
  * 查看二进制文件用==od==命令。

7. 用户管理命令

7.1 useradd

  • 功能描述:create a new user or update default new user information - 添加用户或更新账号信息
  • 选项参数:
    选项 说明
    -c comment,用户注释。
    -d home_dir,设置用户登录的家目录。
    -e expire_date,账号终止日期。
    -g initial_group,属于的组。
    -G group,[…],指定属于多个组。
    -M 不建立用户家目录。
    -m 用户目录不存在则自动创建。
    -s 指定shell
    -u 指定uid
    -D 修改用户的默认属性的配置文件。
  • 实例:
#添加用户oldboy6,并设置其用户注释信息为HandsomeBoy,UID指定为806,归属为用户组root、oldboy、sa成员,shell类型为/bin/sh,家目录为/oldboy6
$ useradd oldboy6 -c "HandsomeBoy" -u 806 -G root,oldboy,sa -s /bin/sh -md /oldboy6
$ tail -1 /etc/passwd
oldboy6:x:806:806:HandsomeBoy:/oldboy6:/bin/sh
$ id oldboy6
uid=806(oldboy6) gid=806(oldboy6) groups=806(oldboy6),0(root),505(sa),506(oldboy)

7.2 userdel

  • 功能描述:delete a user account and related files - 删除账户和关联文件
    • 若不加选项,则仅删除用户账号,而不删除相关文件。
  • 选项参数:
    选项 说明
    -r 删除用户家目录
    -f 强制删除用户,即使用户当前已登录。
  • 实例:
# 强制删除test1用户的家目录
$ userdel -fr test1
$ su - test1
su: user test1 does not exist

7.3 groupadd

  • 功能描述:create a new group - 创建新的用户组
  • 选项参数:
    选项 说明
    -g 创建时指定组的id
  • 实例:
# 添加用户组
$ groupadd incahome

7.4 groupdel

  • 功能描述:delete a group - 删除用户组
  • 实例:
#删除用户组incahome
$ groupadd incahome
$ tail -1 /etc/group
incahome:x:501:
$ groupdel incahome
$ tail -5 /etc/group
tcpdump:x:72:
slocate:x:21:
oldboy:x:500:
mysql:x:27:
apache:x:48:

7.5 usermod

  • 功能描述:modify a user account - 修改用户属性信息
  • 选项参数:
    选项 说明
    -c --comment,用户注释
    -d 指定用户的家目录
    -e<有效期限> 用户账户停止日期,格式为MM/DD/YY
    -f<缓冲天数> 修改在密码过期多少天后即关闭该账号
    -g 修改用户所属的群组
    -G 定义用户属于多个用户组
    -l 修改用户账号名称
    -s 修改用户的shell
    -u 修改uid
    -L 锁定用户密码,使密码无效
    -U 解除密码锁定
  • 实例:
# 将newuser2添加到组staff中
$ usermod -G staff newuser2
# 修改newuser的用户名为newuser1
$usermod -l newuser1 newuser

7.6 passwd

  • 功能描述:update user’s authentication tokens - 设置和修改用户密码
  • 选项参数:
    选项 说明
    --stdin 从标准输入读取密码,非交互式。
    -x,--maximum=DAYS 两次密码修改的最大天数,后面接数字;仅能root权限操作
    -n,--minimum=DAYS 两次密码修改的最小天数,后面接数字;仅能root权限操作
    -w,--warning=DAYS 距多少天提醒用户修改密码;仅能root权限操作
    -i,--inactive=DAYS 密码过期后多少天,用户被禁用;仅能root权限操作
  • 实例:
# 交互式,为oldboy设置修改密码
$ passwd oldboy
# 直接passwd是当前用户修改密码。
# 非交互式修改密码,为oldboy设置修改密码
$ echo "111111" | passwd --stdin oldboy
Changing password for user oldboy.
passwd: all authentication tokens updated successfully.
# 批量创建5个用户,并且随机5位密码。tr " " "\n"也可以用xargs -n 1
$ echo user{01..05}|tr " " "\n"|awk '{print "useradd",$1";PW=$(date +%N|md5sum|cut -c 1-5);echo $PW|passwd --stdin",$1";echo",$1,"$PW>>/tmp/pw.txt"}'|bash
# 要求oldboy用户7天内不能修改密码,60天以后必须修改密码,过期前10天通知oldboy用户,过期30天后禁止用户登录
$ passwd -n 7 -x 60 -w 10 -i 30 oldboy

7.7 chage

  • 功能描述:change user password expiry information - 更改用户密码到期信息
    • /etc/shadow文件
  • 选项参数:
    选项 说明
    -l list,用户密码属性列表
    -d --lastday,最近日期,将最近一次密码设置时间设为“最近日期”
    -E --expiredate,过期日期,将账户过期时间设为“过期日期”,日期写法:MM/DD/YY
    -h --help,显示此帮助信息并退出
    -m --mindays,最小天数,将两次改变密码之间相距的最小天数设为“最小天数”
    -M --maxdays,最大天数,将两次改变密码之间相距的最大天数设为“最大天数”
    -W --warndays,讲过期警告天数设为“警告天数”
    -I 设置密码失效时间
  • 实例:
# 查看root的密码属性信息
$ chage -l root
Last password change                               : Dec 19, 2016  #最近一次密码修改时间
Password expires                                   : never         #密码过期时间
Password inactive                                  : never         #密码失效时间
Account expires						               : never         #账户过期时间
Minimum number of days between password change     : 0             #两次改变密码相距最小天数
Maximum number of days between password change     : 99999         #两次改变密码相距最大天数
Number of days of warning before password expires  : 7             #密码过期前警告天数
# 设置改变密码相距最大天数为60天
$ chage -M 60 root
$ chage -l root
Last password change                               : Dec 19, 2016
Password expires                                   : Feb 17, 2017
Password inactive                                  : never
Account expires                                    : never
Minimum number of days between password change     : 0
Maximum number of days between password change     : 60
Number of days of warning before password expires  : 7
# 可以编辑/etc/login.defs来设定几个参数,以后设置口令默认就按照参数设定为准
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7
# 在/etc/default/useradd可以找到如下2个参数进行设置,可对以后新建的用户起作用
$ useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1  #此处
EXPIRE=      #此处
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

7.8 id

  • 功能描述:print real and effective user and group IDs - 显示真实有效的用户和用户组ID
    • 也可以使用groups命令,但已被id命令取代。
  • 选项参数:
    选项 说明
    -g --group,显示用户所属群组的ID
    -G --groups,显示用户所属附加群组的ID
    -n --name,显示用户所属群组或附加群组的名称
    -r --real,显示实际ID
    -u --user,显示用户ID
    --help 显示帮助
    --version 显示版本信息
  • 实例:
# id命令直接查看当前用户和组信息
$ id
uid=0(root) gid=0(root) groups=0(root)

7.9 su

  • 功能描述:run a shell with substitute user and group IDs - 切换用户
    • 从root用户切换至普通用户无需输入密码
    • 从普通用户切换至root用户需要输入密码
  • 选项参数:
    选项 说明
    - 切换用户环境变量
    -c 执行完命令退回原来的用户
  • 实例:
#切换至oldboy用户,并使用oldboy用户查看root家目录的文件
$ su - oldboy
[oldboy@Test ~]$ su - root -c ls ~
Password: 
anaconda-ks.cfg  install.log  install.log.syslog
[oldboy@Test ~]$  #执行完ls命令退回oldboy用户
#查看用户环境变量
$ env | grep root  #env可以显示系统环境变量
USER=root
MAIL=/var/spool/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/root
HOME=/root
Logname=root

7.10 sudo

  • 功能描述:execute a command as another user -
    • 命令分类提权给普通用户使用,普通用户不需要知道root密码。
    • 对应的配置文件==/etc/sudoers==
  • 选项参数:
    选项 说明
    -l 列出用户允许使用的命令
# 查看oldboy用户可以使用的sudo命令
$ sudo -l
[sudo] password for oldboy:
(ALL)/usr/sbin/useradd

7.11 visudo

  • 功能描述:edit the sudoers file - 编辑/etc/sudoers配置文件,有语法检查功能。
  • 选项参数:
    选项 说明
    -c 检查/etc/sudoers配置文件语法
  • 实例:
# 编辑/etc/sudoers配置文件,第98行插入oldboy的命令权限配置。
# 对应列配置:用户或用户组	主机=角色	授权的命令,全路径,多个用逗号分隔
$ visudo
oldboy  ALL=(ALL)       /usr/sbin/useradd
# 普通用户sudo执行命令时会提示输入密码,可添加NOPASSWD参数,每次sudo执行命令时不用输入密码。
$ visudo
oldboy  ALL=(ALL)       NOPASSWD:       ALL  #赋予了oldboy用户所有的权限
# 检查sudoers配置文件语法
$ viduso -c
/etc/sudoers: parsed OK

8. 基础网络操作命令

8.1 telnet

  • 功能描述:user interface to the TELNET protocol
    • telnet命令用于登录远程主机,对远程主机进行管理。
    • telnet因为采用明文传送报文,安全性不好,很多Linux服务器都不开放telnet服务,而改用更安全的ssh方式了。
  • 选项参数:
    选项 说明
    远程主机 指定要登录的远程主机(IP)
    端口 指定telnet协议使用的端口号
  • 实例:
$ telnet 172.16.1.31 22
Trying 172.16.1.31...
Connected to 172.16.1.31.  #出现Connected提示,表示连接成功。Ctrl+c断开连接。
Escape character is '^]'.
SSH-2.0-OpenSSH_5.3

8.2 ssh

  • 功能描述:OpenSSH SSH client (remote login program) - ssh服务的客户端工具
  • 选项参数:
    选项 说明
    -p 小写p,指定端口号
    -t 打开终端
  • 实例:
# 直接连接,第一次连接时会提示生成密钥。
[oldboy@nfs01 ~]$ ssh -p 52113 [email protected]
[email protected]'s password:'
Last login: Sun Jul 17 01:09:52 2016 from 10.0.0.31
[oldboy@m01 ~]$  #已经登录到m01主机
# 接命令连接,执行完命令会返回结果并返回本地登录状态
[oldboy@nfs01 ~]$ ssh -p 52113 [email protected] /bin/cat /etc/hosts
[email protected]'s password:
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 m01
::1         localhost localhost.localdomain
localhost6 localhost6.localdomain6 m01
172.16.1.5    lb01
172.16.1.6    lb02
172.16.1.7    web02
172.16.1.8    web01
172.16.1.31    nfs01
172.16.1.41    backup
172.16.1.51    db01
172.16.1.61    m01
[oldboy@nfs01 ~]$

8.3 scp

  • 功能描述:secure copy (remote file copy program) - 远程安全拷贝文件命令
  • 选项参数:
    选项 说明
    -P 大写P,指定端口号
    -r 递归拷贝目录
    -p 小写p,保持属性
  • 实例:
# scp推送:PUSH
$ scp -P 52113 -rp /etc [email protected]:/tmp
$ ls /tmp
etc
# scp拉取:PULL
$ scp -P52113 -rp [email protected]:/tmp/etc /data
$ ls /data
etc

8.4 wget

  • 功能描述:The non-interactive network downloader - 非交互式网络下载器
  • 选项参数:
    选项 说明
    -q 安静下载,不提示。
    -O 给下载的文件指定文件名
    -b 后台下载模式
    -P 下载到指定目录
    -p 下载页面所有资源,包括图片、视频等
    -t 最大尝试次数
    -c 断点续传
    -r 递归下载
  • 实例:
# -O参数,下载的文件自定义文件名
$ wget -O BaiduPinyin.exe
http://sw.bos.baidu.com/sw-search-sp/software/0b515d1625a74/BaiduPinyinSetup_5.4.4920.0.exe
--2017-10-21 22:29:53--  http://sw.bos.baidu.com/sw-search-sp/software/0b515d1625a74/BaiduPinyinSetup_5.4.4920.0.exe
Resolving sw.bos.baidu.com...221.195.34.47
Connecting to sw.bos.baidu.com|221.195.34.47|:80... connected.
HTTP request sent, awaiting response...200 OK
Length: 45042280 (43M)[application/octet-stream]
Saving to: “BaiduPinyin.exe” 

100%[==========================================>]45,042,280  4.79M/s   in 9.0s 

2017-10-21 22:30:03 (4.79 MB/s) - “BaiduPinyin.exe” saved [45042280/45042280]

8.5 ping

  • 功能描述:send ICMP ECHO_REQUEST to network hosts - 向网络主机发送ICMP请求数据包
    • 测试网络链路是否畅通。
    • 与8字节的ICMP头数据结合使用。
  • 选项参数:
    选项 说明
    -c count 指定发送ping包的次数
    -s packetsize 指定ping包的大小,单位byte,默认是56。
  • 实例:
# 不加任何参数,一直发送ping包
$ ping www.baidu.com
PING www.a.shifen.com (220.181.38.149) 56(84) bytes of data.
64 bytes from 220.181.38.149: icmp_seq=1 ttl=128 time=3.79 ms
64 bytes from 220.181.38.149: icmp_seq=2 ttl=128 time=3.54 ms
64 bytes from 220.181.38.149: icmp_seq=3 ttl=128 time=4.01 ms
64 bytes from 220.181.38.149: icmp_seq=4 ttl=128 time=3.67 ms
64 bytes from 220.181.38.149: icmp_seq=5 ttl=128 time=3.88 ms
^C  #Ctrl+c结束ping命令
--- www.a.shifen.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4433ms
rtt min/avg/max/mdev = 3.549/3.783/4.013/0.160 ms
# -c参数,指定发送ping包的数量
$ ping -c 3 www.baidu.com
PING www.baidu.com (220.181.38.150) 56(84) bytes of data.
64 bytes from 220.181.38.150: icmp_seq=1 ttl=128 time=3.60 ms
64 bytes from 220.181.38.150: icmp_seq=2 ttl=128 time=3.85 ms
64 bytes from 220.181.38.150: icmp_seq=3 ttl=128 time=6.00 ms

--- www.baidu.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2010ms
rtt min/avg/max/mdev = 3.606/4.489/6.005/10.78 ms

8.6 route

  • 功能描述:show / manipulate the IP routing table - 显示/操作IP路由表
    • 直接在命令行下执行route命令添加路由不会永久保存,当网卡重启或者系统重启之后该路由就失效了;
    • 可以在/etc/rc.local中添加route命令来保证该路由设置永久生效。
  • 选项参数:
    选项 说明
    -n 不执行DNS反向查找,直接显示数字形式的IP地址
  • 实例:
# 添加网关/设置网关:增加一条到达244.0.0.0的路由
$ route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0
# 屏蔽一条路由:增加一条屏蔽的路由,目的地址为224.x.x.x将被拒绝。
# route add -net 224.0.0.0 netmask 240.0.0.0 reject
# 删除路由记录:
$ route del -net 224.0.0.0 netmask 240.0.0.0
$ route del -net 224.0.0.0 netmask 240.0.0.0 reject
# 删除和添加设置默认网关:
$ route del default gw 192.168.120.240
$ route add default gw 192.168.120.240
# -n参数,直接返回路由的ip地址信息
$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        0.0.0.0         255.255.255.0   U     0      0        0 eth0
10.10.0.0       0.0.0.0         255.255.255.0   U     0      0        0 eth0
172.16.206.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
0.0.0.0         172.16.206.2    0.0.0.0         UG    0      0        0 eth0
  • Flags字段状态说明:
    • Flags为路由标志,标记当前网络节点的状态。
      状态关键字 | 说明
      :— | :—
      U | up,表示此路由当前为启动状态
      H | host,表示此网关为一体机
      G | gateway,表示此网关为一路由器
      R | reinstate route,使用动态路由重新初始化的路由
      D | Dynamically,此路由是动态性地写入。
      M | Modified,此路由是由路由守护程序或导向器动态修改。
      ! | 表示此路由当前为关闭状态。

8.7 ifconfig

  • 功能描述:configure a network interface - 配置网络接口
    • 可获取网卡配置与网络状态信息。
  • 实例:
# 查看现有网卡信息
$ ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:29:24:4A  
          inet addr:172.16.206.128  Bcast:172.16.206.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe29:244a/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:15115 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1581 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1110812 (1.0 MiB)  TX bytes:262289 (256.1 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
# 配置别名IP
$ ifconfig eth0:0 10.0.0.10 netmask 255.255.255.0 up 
# ip地址和子网掩码也可以写成10.0.0.10/24的形式ifconfig eth0:0 10.0.0.10/24 up
$ ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:29:24:4A  
          inet addr:172.16.206.128  Bcast:172.16.206.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe29:244a/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:15209 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1636 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1121042 (1.0 MiB)  TX bytes:271319 (264.9 KiB)

eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:29:24:4A  
          inet addr:10.0.0.10  Bcast:10.0.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
- 技巧拓展:
```shell
# CentOS7系统ip命令配置网卡
$ ip addr add 10.0.0.12/24 dev eth0:1
# 查看配置
$ ip addr

8.8 ifup和ifdown

  • 功能描述:
    • ifup - bring a network interface up - 启动网络接口(网卡)
    • ifdown - take a network interface down - 停止网络接口(网卡)
  • 实例:
# 禁用和启动网卡
ifdown eth0; ifup eth0

8.9 netstat和ss

  • 功能描述:
    • netstat - Print network connections, routing tables, interface statistics, masquerade, connections, and multicast memberships - 打印网络连接,路由表,接口统计信息,伪装,连接和多播成员资格
    • ss - another utility to investigate sockets - 调查套接字的另一个实用程序
  • 选项参数:
    选项 说明
    -l 显示监听状态
    -n 显示ip地址
    -t tcp
    -u udp
    -p 显示程序进程信息
    -a 查看所有
  • 实例:
# 显示网络信息
$ netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State      
tcp        0     64 bogon:ssh                   bogon:51445                 ESTABLISHED 
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node Path
unix  2      [ ]         DGRAM                    8637   @/org/kernel/udev/udevd
unix  5      [ ]         DGRAM                    10441  /dev/log
unix  2      [ ]         DGRAM                    10975  
unix  2      [ ]         DGRAM                    10758  
unix  2      [ ]         DGRAM                    10623  
unix  3      [ ]         DGRAM                    8653   
unix  3      [ ]         DGRAM                    8652
# 通过服务名称或端口查询服务状态信息
$ netstat -lntup | grep rsync
tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN      1288/rsync          
tcp        0      0 :::873                      :::*                        LISTEN      1288/rsync          
$ netstat -lntup | grep 873
tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN      1288/rsync          
tcp        0      0 :::873                      :::*                        LISTEN      1288/rsync

8.10 ip

  • 功能描述:show / manipulate routing, devices, policy routing and tunnels - 显示/配置网络路由等信息
  • 使用方法:ip [ OPTIONS ] OBJECT { COMMAND | help },ip [ -force ] -batch filename
  • 选项参数:
    选项 说明
    -V 显示指令版本信息;
    -s 输出更详细的信息;
    -f 强制使用指定的协议族;
    -4 指定使用的网络层协议是IPv4协议;
    -6 指定使用的网络层协议是IPv6协议;
    -0 输出信息每条记录输出一行,即使内容较多也不换行显示;
    -r 显示主机时,不使用IP地址,而使用主机的域名。
  • 网络对象:link/addr/addrlabel/route/rule/neigh/ntable/tunnel/maddr/mroute/mrule/monitor/xfrm/token
  • 实例:
# 使用ip命令添加辅助IP地址,ifconfig命令是添加别名IP地址
$ ip addr add 10.0.0.102/24 dev eth0 label eth0:1
# 用ip命令也可以查看网卡配置情况
$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:13:d9:d3 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.8/24 brd 10.0.0.255 scope global eth0
    inet 10.0.0.101/24 brd 10.0.0.255 scope global secondary eth0:0
    inet 10.0.0.102/24 scope global secondary eth0:1
    inet6 fe80::20c:29ff:fe13:d9d3/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:13:d9:dd brd ff:ff:ff:ff:ff:ff
    inet 172.16.1.8/24 brd 172.16.1.255 scope global eth1
    inet6 fe80::20c:29ff:fe13:d9dd/64 scope link 
       valid_lft forever preferred_lft forever

9. 深入网络操作命令

9.1 nmap

  • 功能描述:Network exploration tool and security / port scanner - 网络探索工具和安全/端口扫描程序
  • 选项参数:
    选项 说明
    -O 激活操作探测
    -P0 只进行扫描,不ping主机
    -PT 是同TCP的ping
    -P 指定要扫描的端口,可以是一个单独的端口,用逗号隔开多个端口,使用“-”表示端口范围
    -e 在多网络接口Linux系统中,指定扫描使用的网络接口
    -g 将指定的端口作为源端口进行扫描
    --ttl 指定发送的扫描报文的生存期
    --packet-trace 显示扫描过程中收发报文统计
    -d 增加调试信息地输出
    -v 得到更多选项信息
    -A 使用所有高级扫描选项
  • 实例:
# 扫描网站的开放端口
$ nmap www.baidu.com

Starting Nmap 5.51 ( http://nmap.org ) at 2019-06-18 16:56 CST
Nmap scan report for www.baidu.com (220.181.38.150)
Host is up (0.011s latency).
Other addresses for www.baidu.com (not scanned): 220.181.38.149
Not shown: 998 filtered ports
PORT    STATE SERVICE
80/tcp  open  http
443/tcp open  https

Nmap done: 1 IP address (1 host up) scanned in 52.13 seconds

9.2 lsof

  • 功能描述:list open files - 查看打开文件的进程。
    • 也可以查看端口对应服务名和连接情况。
  • 选项参数:
    选项 说明
    -i 找出符合条件的进程
  • 实例:
# -i参数,找出22端口对应的进程
$ lsof -i :22
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1303 root    3u  IPv4  10559      0t0  TCP *:ssh (LISTEN)
sshd    1303 root    4u  IPv6  10563      0t0  TCP *:ssh (LISTEN)
sshd    3672 root    3r  IPv4  14721      0t0  TCP 172.16.206.128:ssh->172.16.206.1:53480 (ESTABLISHED)

9.3 mail

  • 功能描述:send and receive Internet mail - 发送和接收邮件
  • 选项参数:
    选项 说明
    -s<邮件主题> 指定邮件的主题
    -u<用户帐号> 读取指定用户的邮件
    -v 执行时,显示详细的信息
    -b<地址> 指定密件副本的收信人地址
    -c<地址> 指定副本的收信人地址
    -f<邮件文件> 读取指定邮件文件中的邮件
    -i 不显示终端发出的信息
    -I 使用互动模式
    -n 程序使用时,不使用mail.rc文件中的设置
    -N 阅读邮件时,不显示邮件的标题
  • 实例:
# 修改邮件配置文件/etc/mail.rc 追加以下配置
#cust conf
set from=[email protected]
set smtp=smtp.163.com
set smtp-auth-user="[email protected]" smtp-auth-password="xxxxxxxx"
set smtp-auth=login
# 使用shell当编辑器
# 第一行是输入的命令,-s表示邮件的主题,后面的[email protected]则是邮件的接收人
# 输入完这行命令后回车,会进入邮件正文的编写,我们可以输入任何文字。
# 当邮件正文输入完成后,需要按CTRL+D结束输入。直接回车就完成了邮件的发送。
$ mail -s "hello world" [email protected]
hello
world
EOT
# 使用管道进行邮件发送
$ echo "hello world" | mail -s "hello world" [email protected]
# 使用文件进行邮件发送
$ mail -s "hello from a file" [email protected] <mail.txt
# 发送附件
# 需要先安装uuencode软件包,这个程序是对二进制文件进行编码使其适合通过邮件进行发送
$ yum install -y sharutils
# uuencode有两个参数,第一个是要发送的文件,第二个是显示的文件名称。
$ uuencode test.txt test | mail -s "hello 附件" [email protected]

9.4 mutt

  • 功能描述:The Mutt Mail User Agent - 电子邮件命令行客户端
  • 使用方法:
# 打开指定邮箱
$ mutt -f <MAILBOX>
# 发送电子邮件,指定主题和抄送收件人。
$ mutt -s <SUBJECT> -c <抄送人> <收件人>
# 发送带有附件的电子邮件
$ mutt -a <file1> <file2> --<收件人>
# 指定要作为消息正文包含的文件
$ mutt -i <file> <收件人>
  • 实例:
# 发送邮件给[email protected],主题是testccc,内容是ccc
$ echo "ccc"|mutt -s "testccc" [email protected]

9.5 nslookup

  • 功能描述:query Internet name servers interactively - 查询主机DNS记录
    • 有两种工作模式,即“交互模式”和“非交互模式”。在“交互模式”下,用户可以向域名服务器查询各类主机、域名的信息,或者输出域名中的主机列表。而在“非交互模式”下,用户可以针对一个主机或域名仅仅获取特定的名称或所需信息。
  • 使用方法:进入交互模式,直接输入nslookup命令,不加任何参数,则直接进入交互模式,此时nslookup会连接到默认的域名服务器(即/etc/resolv.conf的第一个dns地址)。或者输入nslookup -nameserver/ip。进入非交互模式,就直接输入nslookup 域名就可以了。
  • 选项参数:
    选项 说明
    -sil 不显示任何警告信息
  • 实例:
# 查询百度的域名信息
$ nslookup www.baidu.com
Server:		10.0.0.2
Address:	10.0.0.2#53

Non-authoritative answer:
www.baidu.com	canonical name = www.a.shifen.com.
Name:	www.a.shifen.com
Address: 220.181.38.150
Name:	www.a.shifen.com
Address: 220.181.38.149

9.6 dig

  • 功能描述:DNS lookup utility - DNS查询工具

    • 可以用来测试域名系统工作是否正常。
  • 选项参数:

    选项 说明
    @<服务器地址> 指定进行域名解析的域名服务器;
    -b 当主机具有多个IP地址,指定使用本机的哪个IP地址向域名服务器发送域名查询请求;
    -f<文件名称> 指定dig以批处理的方式运行,指定的文件中保存着需要批处理查询的DNS任务信息;
    -P 指定域名服务器所使用端口号;
    -t<类型> 指定要查询的DNS数据类型;
    -x 执行逆向域名查询;
    -4 使用IPv4;
    -6 使用IPv6;
    -h 显示指令帮助信息。
    选项 说明
    主机 指定要查询域名的主机
    查询类型 指定DNS查询的类型
    查询类 指定查询DNS的class
    查询选项 指定查询选项
  • 实例:

# dig直接接域名
$ dig www.baidu.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6 <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53774
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.baidu.com.			IN	A

;; ANSWER SECTION:
www.baidu.com.		5	IN	CNAME	www.a.shifen.com.
www.a.shifen.com.	5	IN	A	220.181.38.149
www.a.shifen.com.	5	IN	A	220.181.38.150

;; Query time: 4 msec
;; SERVER: 10.0.0.2#53(10.0.0.2)
;; WHEN: Tue Jun 25 14:05:13 2019
;; MSG SIZE  rcvd: 90
# 指定域名解析服务器,跟踪解析
$ dig @223.5.5.5 www.baidu.com +trace

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6 <<>> @223.5.5.5 www.baidu.com +trace
; (1 server found)
;; global options: +cmd
.			156	IN	NS	e.root-servers.net.
.			156	IN	NS	m.root-servers.net.
.			156	IN	NS	j.root-servers.net.
.			156	IN	NS	h.root-servers.net.
.			156	IN	NS	i.root-servers.net.
.			156	IN	NS	k.root-servers.net.
.			156	IN	NS	l.root-servers.net.
.			156	IN	NS	c.root-servers.net.
.			156	IN	NS	f.root-servers.net.
.			156	IN	NS	b.root-servers.net.
.			156	IN	NS	g.root-servers.net.
.			156	IN	NS	a.root-servers.net.
.			156	IN	NS	d.root-servers.net.
;; Received 228 bytes from 223.5.5.5#53(223.5.5.5) in 98 ms

com.			172800	IN	NS	c.gtld-servers.net.
com.			172800	IN	NS	i.gtld-servers.net.
com.			172800	IN	NS	e.gtld-servers.net.
com.			172800	IN	NS	d.gtld-servers.net.
com.			172800	IN	NS	b.gtld-servers.net.
com.			172800	IN	NS	h.gtld-servers.net.
com.			172800	IN	NS	m.gtld-servers.net.
com.			172800	IN	NS	l.gtld-servers.net.
com.			172800	IN	NS	g.gtld-servers.net.
com.			172800	IN	NS	k.gtld-servers.net.
com.			172800	IN	NS	j.gtld-servers.net.
com.			172800	IN	NS	f.gtld-servers.net.
com.			172800	IN	NS	a.gtld-servers.net.
;; Received 491 bytes from 192.33.4.12#53(192.33.4.12) in 232 ms

baidu.com.		172800	IN	NS	ns2.baidu.com.
baidu.com.		172800	IN	NS	ns3.baidu.com.
baidu.com.		172800	IN	NS	ns4.baidu.com.
baidu.com.		172800	IN	NS	ns1.baidu.com.
baidu.com.		172800	IN	NS	ns7.baidu.com.
;; Received 201 bytes from 192.54.112.30#53(192.54.112.30) in 1097 ms

www.baidu.com.		1200	IN	CNAME	www.a.shifen.com.
a.shifen.com.		1200	IN	NS	ns3.a.shifen.com.
a.shifen.com.		1200	IN	NS	ns4.a.shifen.com.
a.shifen.com.		1200	IN	NS	ns2.a.shifen.com.
a.shifen.com.		1200	IN	NS	ns1.a.shifen.com.
a.shifen.com.		1200	IN	NS	ns5.a.shifen.com.
;; Received 228 bytes from 220.181.33.31#53(220.181.33.31) in 5 ms

9.7 host

  • 功能说明:DNS lookup utility - DNS查找实用程序
    • 域名分析、查询工具。
  • 实例:
# 查询某个域名的A记录
$ host www.baidu.com
www.baidu.com has address 220.181.38.150
www.baidu.com has address 220.181.38.149
www.baidu.com is an alias for www.a.shifen.com.
www.baidu.com is an alias for www.a.shifen.com.

9.8 traceroute

  • 功能描述:print the route packets trace to network host - 追踪显示网络主机的路由数据包
    • 默认发包60字节
    • 通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。
    • traceroute通过发送小的数据包到目的设备直到其返回,来测量其需要多长时间。一条路径上的每个设备traceroute要测3次。输出结果中包括每次测试的时间(ms)和设备的名称(如有的话)及其ip地址。
  • 选项参数:
    选项 说明
    -d 使用Socket层级的排错功能;
    -f<存活数值> 设置第一个检测数据包的存活数值TTL的大小;
    -F 设置勿离断位;
    -g<网关> 设置来源路由网关,最多可设置8个;
    -i<网络界面> 使用指定的网络界面送出数据包;
    -I 使用ICMP回应取代UDP资料信息;
    -m 设置检测数据包的最大存活数值TTL的大小;
    -n 直接使用IP地址而非主机名称;
    -p<通信端口> 设置UDP传输协议的通信端口;
    -r 忽略普通的Routing Table,直接将数据包送到远端主机上。
    -s<来源地址> 设置本地主机送出数据包的IP地址;
    -t<服务类型> 设置检测数据包的TOS数值;
    -v 详细显示指令的执行过程;
    -w<超时秒数> 设置等待远端主机回报的时间;
    -x 开启或关闭数据包的正确性检验。
  • 实例:
# 访问网站的路由情况
$ traceroute www.58.com
traceroute to www.58.com (211.151.111.30), 30 hops max, 40 byte packets
 1  unknown (192.168.2.1)  3.453 ms  3.801 ms  3.937 ms
 2  221.6.45.33 (221.6.45.33)  7.768 ms  7.816 ms  7.840 ms
 3  221.6.0.233 (221.6.0.233)  13.784 ms  13.827 ms 221.6.9.81 (221.6.9.81)  9.758 ms
 4  221.6.2.169 (221.6.2.169)  11.777 ms 122.96.66.13 (122.96.66.13)  34.952 ms 221.6.2.53 (221.6.2.53)  41.372 ms
 5  219.158.96.149 (219.158.96.149)  39.167 ms  39.210 ms  39.238 ms
 6  123.126.0.194 (123.126.0.194)  37.270 ms 123.126.0.66 (123.126.0.66)  37.163 ms  37.441 ms
 7  124.65.57.26 (124.65.57.26)  42.787 ms  42.799 ms  42.809 ms
 8  61.148.146.210 (61.148.146.210)  30.176 ms 61.148.154.98 (61.148.154.98)  32.613 ms  32.675 ms
 9  202.106.42.102 (202.106.42.102)  44.563 ms  44.600 ms  44.627 ms
10  210.77.139.150 (210.77.139.150)  53.302 ms  53.233 ms  53.032 ms
11  211.151.104.6 (211.151.104.6)  39.585 ms  39.502 ms  39.598 ms
12  211.151.111.30 (211.151.111.30)  35.161 ms  35.938 ms  36.005 ms
# 指定发包次数
$ traceroute -q 4 www.58.com

9.9 tcpdump

  • 功能描述:dump traffic on a network - 网络抓包工具
  • 选项参数:
    选项 说明
    -a 尝试将网络和广播地址转换成名称;
    -c<数据包数目> 收到指定的数据包数目后,就停止进行倾倒操作;
    -d 把编译过的数据包编码转换成可阅读的格式,并输出到标准输出;
    -dd 把编译过的数据包编码转换成C语言的格式,并输出到标准输出;
    -ddd 把编译过的数据包编码转换成十进制数字的格式,并输出到标准输出;
    -e 在每列输出资料上显示连接层级的文件头;
    -f 用数字显示网际网络地址;
    -F<表达文件> 指定内含表达方式的文件;
    -i<网络接口> 使用指定的网络接口送出数据包;
    -l 使用标准输出列的缓冲区;
    -n 不把主机的网络地址转换成名字;
    -N 不列出域名;
    -O 不将数据包编码最佳化;
    -p 不让网络接口进入混杂模式;
    -q 快速输出,仅列出少数的传输协议信息;
    -r<数据包文件> 从指定的文件读取数据包数据;
    -s<数据包大小> 设置每个数据包的大小;
    -S 用绝对而非相对数值列出TCP关联数;
    -t 在每列倾倒资料上不显示时间戳记;
    -tt 在每列输出资料上显示未经格式化的时间戳记;
    -T<数据包类型> 强制将表达方式所指定的数据包转译成设置的数据包类型;
    -v 详细显示指令执行过程;
    -vv 更详细显示指令执行过程;
    -x 用十六进制字码列出数据包资料;
    -w<数据包文件> 把数据包数据写入指定的文件。
  • 实例:
# 监控eth0网卡的ping信息
$ tcpdump -n icmp -i eth0
# 直接启动tcpdump将监视第一个网络接口上所有流过的数据包
$ tcpdump
# 监视指定网络接口的数据包,如果不指定网卡,默认tcpdump只会监视第一个网络接口。
$ tcpdump -i eth1
# 监视指定主机的数据包,打印所有进入或离开nfs01的数据包。
$ tcpdump host nfs01
# 也可以指定ip,例如截获所有210.27.48.1 的主机收到的和发出的所有的数据包
$ tcpdump host 210.27.48.1
# 打印helios 与 hot 或者与 ace 之间通信的数据包
$ tcpdump host helios and \( hot or ace \)
# 截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信
$ tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)
# 打印ace与任何其他主机之间通信的IP 数据包, 但不包括与helios之间的数据包.
$ tcpdump ip host ace and not helios
# 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:
$ tcpdump ip host 210.27.48.1 and ! 210.27.48.2
# 截获主机hostname发送的所有数据
$ tcpdump -i eth0 src host hostname
# 监视所有送到主机hostname的数据包
$ tcpdump -i eth0 dst host hostname
# 监视指定主机和端口的数据包,如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令:
$ tcpdump tcp port 23 host 210.27.48.1
# 对本机的udp 123 端口进行监视 123 为ntp的服务端口
$ tcpdump udp port 123
# 监视指定网络的数据包,打印本地主机与Berkeley网络上的主机之间的所有通信数据包
tcpdump net ucb-ether
# ucb-ether此处可理解为“Berkeley网络”的网络地址,此表达式最原始的含义可表达为:打印网络地址为ucb-ether的所有数据包
# 打印所有通过网关snup的ftp数据包
$ tcpdump 'gateway snup and (port ftp or ftp-data)'
# 注意:表达式被单引号括起来了,这可以防止shell对其中的括号进行错误解析
# 打印所有源地址或目标地址是本地主机的IP数据包
$ tcpdump ip and not net localnet
# 如果本地网络通过网关连到了另一网络,则另一网络并不能算作本地网络。

9.10 nc

  • 功能描述:arbitrary TCP and UDP connections and listens - 任意TCP和UDP连接并侦听
  • 选项参数:
    选项 说明
    -g<网关> 设置路由器远程通信网关,最多设置8个;
    -G<指向器数目> 设置来源路由指向器,其数值为4的倍数;
    -h 在线帮助;
    -i<延迟秒数> 设置时间间隔,以便传送信息及扫描通信端口;
    -l 使用监听模式,监控传入的资料;
    -n 直接使用ip地址,而不通过域名服务器;
    -o<输出文件> 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存;
    -p<通信端口> 设置本地主机使用的通信端口;
    -r 指定源端口和目的端口都进行随机的选择;
    -s<来源位址> 设置本地主机送出数据包的IP地址;
    -u 使用UDP传输协议;
    -v 显示指令执行过程;
    -w<超时秒数> 设置等待连线的时间;
    -z 使用0输入/输出模式,只在扫描通信端口时使用。
  • 实例:
# 远程拷贝文件:从server1拷贝文件到server2上。需要先在server2上用nc激活监听。
# server2上运行:
$ nc -lp 1234 > install.log
# server1上运行:
$ ll install.log
-rw-r–r–   1 root root 39693 12月 20   2007 install.log
$ nc -w 1 192.168.228.222 1234 < install.log
# 克隆硬盘或分区:操作与上面的拷贝是雷同的,只需要由dd获得硬盘或分区的数据,然后传输即可。克隆硬盘或分区的操作,不应在已经mount的的系统上进行。所以,需要使用安装光盘引导后,进入拯救模式(或使用Knoppix工具光盘)启动系统后,在server2上进行类似的监听动作:
$ nc -l -p 1234 | dd of=/dev/sda
# server1上执行传输,即可完成从server1克隆sda硬盘到server2的任务:
$ dd if=/dev/sda | nc 192.168.228.222 1234
# 完成上述工作的前提是需要落实光盘的拯救模式支持服务器上的网卡,并正确配置IP。
# 端口扫描
$ nc -v -w 1 10.0.0.31 -z 1-50
Connection to 10.0.0.31 22 port [tcp/ssh] succeeded!
# 保存Web页面
$ while true; do
     nc -l -p 80 -q 1 < somepage.html;
  done
# 聊天:nc还可以作为简单的字符下聊天工具使用,同样的,server2上需要启动监听:
$ nc -lp 1234
# server1上传输:
$ nc 192.168.228.222 1234
# 这样,双方就可以相互交流了。使用Ctrl+D正常退出。
# 传输目录:从server1拷贝nginx-0.6.34目录内容到server2上。需要先在server2上,用nc激活监听,server2上运行:
$ nc -l 1234 | tar xzvf -
# server1上运行:
$ ll -d nginx-0.6.34
drwxr-xr-x 8 1000 1000 4096 12-23 17:25 nginx-0.6.34
$ tar czvf – nginx-0.6.34 | nc 192.168.228.222 1234

9.11 curl

  • 功能描述:transfer a URL - 是一个利用URL规则在命令行下工作的文件传输工具
    • 它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具。作为一款强力工具,curl支持包括HTTP、HTTPS、ftp等众多协议,还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。做网页处理流程和数据检索自动化,curl可以助一臂之力。
  • 选项参数:
    选项 说明
    -I 查看响应的header信息
    -s 安静的
    -w 获取状态码
  • 实例:
# 获取请求头信息
$ curl -I www.csdn.net
HTTP/1.1 301 Moved Permanently
Server: openresty
Date: Fri, 21 Jun 2019 03:57:57 GMT
Content-Type: text/html
Content-Length: 182
Connection: keep-alive
Keep-Alive: timeout=20
Location: https://www.csdn.net/

10. 有关磁盘与文件系统的命令

10.1 mount和umount

  • 功能描述:mount file systems/unmount file systems - 挂载/卸载文件系统
    • 卸载文件系统需要先退出要卸载的目录。
  • 选项参数:
    选项 说明
    -t 挂载的文件系统类型
    -lf umount使用此参数强制卸载。
  • 实例:
# 挂载光盘格式
$ mount -t iso9660 /dev/cdrom /media/cdrom  #iso9660是光盘的格式
# 挂载NFS网络文件系统
$ mount -t nfs 172.16.1.31:/data /mnt
# 强制卸载NFS网络文件系统
$ umount -lf /mnt

10.2 fsck

  • 功能描述:check and repair a Linux file system - 检查并修复Linux文件系统
  • 选项参数:
    选项 说明
    -a 自动修复文件系统,不询问任何问题;
    -A 依照/etc/fstab配置文件的内容,检查文件内所列的全部文件系统;
    -N 不执行指令,仅列出实际执行会进行的动作;
    -P 当搭配"-A"参数使用时,则会同时检查所有的文件系统;
    -r 采用互动模式,在执行修复时询问问题,让用户得以确认并决定处理方式;
    -R 当搭配"-A"参数使用时,则会略过/目录的文件系统不予检查;
    -s 依序执行检查作业,而非同时执行;
    -t<文件系统类型> 指定要检查的文件系统类型;
    -T 执行fsck指令时,不显示标题信息;
    -V 显示指令执行过程。
  • 实例:
# linux的文件系统损坏会导致linux不正常关机,出错的时候如果系统告诉你是哪一块硬盘的分区有问题,比如是/dev/hda2,接着用如下的命令去对付它,结束后使用reboot命令重启系统。
$ fsck -y /dev/hda2
# 如果不知道是哪个地方出了问题,可以直接:
$ fsck
# 在随后的多个确认对话框中输入:y
# 结束后同样使用reboot命令重启系统

10.3 e2fsck

  • 功能描述:check a Linux ext2/ext3/ext4 file system - 检查Linux ext2/ext3/ext4文件系统
    • 执行e2fsck或fsck前请先umount partition,否则有机会令档案系统毁损。如果需要对根目录/进行检查及修复,便需要进入singal user mode执行。
  • 选项参数:
    选项 说明
    -a 不询问使用者意见,便自动修复文件系统;
    -b 指定superblock,而不使用预设的superblock;
    -B<区块大小> 指定区块的大小,单位为字节;
    -c 一并执行badblocks,以标示损坏的区块;
    -C 将检查过程的信息完整记录在file descriptor中,使得整个检查过程都能完整监控;
    -d 显示排错信息;
    -f 即使文件系统没有错误迹象,仍强制地检查正确性;
    -F 执行前先清除设备的缓冲区;
    -l<文件> 将文件中指定的区块加到损坏区块列表;
    -L<文件> 先清除损坏区块列表,再将文件中指定的区块加到损坏区块列表。因此损坏区块列表的区块跟文件中指定的区块是一样的;
    -n 以只读模式开启文件系统,并采取非互动方式执行,所有的问题对话均设置以"no"回答;
    -p 不询问使用者意见,便自动修复文件系统;
    -r 此参数只为了兼容性而存在,并无实际作用;
    -s 如果文件系统的字节顺序不适当,就交换字节顺序,否则不做任何动作;
    -S 不管文件系统的字节顺序,一律交换字节顺序;
    -t 显示时间信息;
    -v 执行时显示详细的信息;
    -V 显示版本信息;
    -y 采取非互动方式执行,所有的问题均设置以"yes"回答。
  • 实例:
# 检查/dev/sda1是否有问题,如发现问题便自动修复:
$ e2fsck -a -y /dev/sda1
  • 回传值含义:
    • e2fsck执行后的传回值及代表意义如下:
      :— | :—
      0 | 没有任何错误发生。
      1 | 文件系统发生错误,并且已经修正。
      2 | 文件系统发生错误,并且已经修正。
      4 | 文件系统发生错误,但没有修正。
      8 | 运作时发生错误。
      16 | 使用的语法发生错误。
      128 | 共享的函数库发生错误。

10.4 dd

  • 功能描述:convert and copy a file - 转换和复制文件
  • 选项参数:
    选项 说明
    if 代表输入文件。
    of 代表输入文件。
    bs 块大小
    count 块数量
    /dev/zero 是一个字符设备,会不断返回0值字节
  • 实例:
# 创建一个1000M大小的/dev/sdc设备文件,块大小1M,分为1000块。
$ dd if=/dev/zero of=/dev/sdc bs=1M count=100

10.5 dumpe2fs

  • 功能描述:dump ext2/ext3/ext4 filesystem information - 查看文件系统内部信息(元数据信息)
  • 选项参数:
    选项 说明
    -b 打印文件系统中预留的块信息
    -ob 指定检查文件系统时使用的超级块
    -OB 检查文件系统时使用的指定的块大小
    -h 仅显示超级块信息
    -i 从指定的文件系统映像文件中读取文件系统信息
    -x 以16进制格式打印信息块成员
  • 实例:
# dumpe2fs配合grep查看文件系统inode大小
# sda1是boot分区,inode大小是128字节
$ dumpe2fs /dev/sda1 | grep -i "inode size"  #-i参数忽略大小写
dumpe2fs 1.41.12 (17-May-2010)
Inode size:               128
# sda2是swap分区,无法查看inode大小
$ dumpe2fs /dev/sda2 | grep -i "inode size"
dumpe2fs 1.41.12 (17-May-2010)
dumpe2fs: Bad magic number in super-block while trying to open /dev/sda2
# sda3是/分区,inode大小是256字节
$ dumpe2fs /dev/sda3 | grep -i "inode size" 
dumpe2fs 1.41.12 (17-May-2010)
Inode size:               256

10.6 dump

  • 功能描述:ext2/3/4 filesystem backup - ext2/3/4文件系统备份
    • 可将目录或整个文件系统备份至指定的设备,或备份成一个大文件。
  • 选项参数:
    选项 说明
    -0123456789 备份的层级;
    -b<区块大小> 指定区块的大小,单位为KB;
    -B<区块数目> 指定备份卷册的区块数目;
    -c 修改备份磁带预设的密度与容量;
    -d<密度> 设置磁带的密度。单位为BPI;
    -f<设备名称> 指定备份设备;
    -h<层级> 当备份层级等于或大于指定的层级时,将不备份用户标示为“nodump”的文件;
    -n 当备份工作需要管理员介入时,向所有“operator”群组中的使用者发出通知;
    -s<磁带长度> 备份磁带的长度,单位为英尺;
    -T<日期> 指定备份的时间与日期;
    -u 备份完毕后,在/etc/dumpdates中记录备份的文件系统、层级、日期与时间等;
    -w 与-W类似,但仅显示需要备份的文件;
    -W 显示需要备份的文件及其最后一次备份的层级、时间与日期。
  • 实例:
# 将/home目录所有内容备份到/tmp/homeback.bak文件中,备份层级为0并在/etc/dumpdates中记录相关信息:
‍$ dump -0u -f /tmp/homeback.bak /home
# 将/home目录所有内容备份到/tmp/homeback.bak文件中,备份层级为1(只备份上次使用层次0备份后发生过改变的数据)并在/etc/dumpdates中记录相关信息:
$ dump -1u -f /tmp/homeback.bak /home
# 通过dump命令的备份层级,可实现完整+增量备份、完整+差异备份,在配合crontab可以实现无人值守备份。

10.7 fdisk

  • 功能描述:Partition table manipulator for Linux - Linux系统分区工具
    • 用于小于2T,MBR分区表类型。
  • 选项参数:
    选项 说明
    -b<分区大小> 指定每个分区的大小;
    -l 列出指定的外围设备的分区表状况;
    也可以使用cat /proc/partitions查看
    -s<分区编号> 将指定的分区大小输出到标准输出上,单位为区块;
    -c 关闭DOS兼容模式
    -u 使用扇区位单位;
    -v 显示版本信息。
  • 实例:
# 列出现有硬盘设备分区情况
$ fdisk -l

Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000254bf

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              26         217     1536000   82  Linux swap / Solaris
Partition 2 does not end on cylinder boundary.
/dev/sda3             217        1306     8743936   83  Linux

Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
# 使用组合选项-cu,关闭DOS兼容模式并使用扇区为单位对/dev/sdb进行分区
$ fdisk -cu /dev/sdb
# 输入m显示命令帮助
Command (m for help): m
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition  #删除一个分区
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes  #退出不保存
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)
# 输入p列出目前分区情况
Command (m for help): p

Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x272d8219

   Device Boot      Start         End      Blocks   Id  System
# 依次输入n(建立新的磁盘分区)-->p或者e(选择建立主分区还是扩展分区)-->输入分区号(主分区的分区号只能是1-4,扩展分区是从5开始)
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1305, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-1305, default 1305): +4G  #输入错误可以使用快捷键Ctrl+u删除

Command (m for help): p

Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x272d8219

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         523     4200966   83  Linux
# 再创建一个扩展分区
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
e
Partition number (1-4): 2
First cylinder (524-1305, default 524): 
Using default value 524
Last cylinder, +cylinders or +size{K,M,G} (524-1305, default 1305): 
Using default value 1305

Command (m for help): p

Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x272d8219

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         523     4200966   83  Linux
/dev/sdb2             524        1305     6281415    5  Extended
# 在扩展分区上创建一个逻辑分区
Command (m for help): n
Command action
   l   logical (5 or over)
   p   primary partition (1-4)
l
First cylinder (524-1305, default 524): 
Using default value 524
Last cylinder, +cylinders or +size{K,M,G} (524-1305, default 1305): 
Using default value 1305

Command (m for help): p

Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x272d8219

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         523     4200966   83  Linux
/dev/sdb2             524        1305     6281415    5  Extended
/dev/sdb5             524        1305     6281383+  83  Linux
# 输入w,保存分区配置并退出。
Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
# 使分区能够使用还需要格式化和挂载分区并通知系统内核
$ mkfs.ext4 /dev/sdb1
$ mount /dev/sdb1 /media
$ partprobe /dev/sdb

10.8 parted

  • 功能描述:a partition manipulation program - 万能分区工具。
    • 大于2T,GPT分区表类型。
    • parted命令所作的操作实时生效。
  • 选项参数:
    选项 说明
    -h 显示帮助信息;
    -i 交互式模式;
    -s 脚本模式,不提示用户;
    -v 显示版本号。
  • 实例:
# 更改分区表类型
$ parted /dev/sdb mklabel gpt
# parted命令分区
$ parted /dev/sdb
# help显示帮助信息
(parted) help                                                             
  align-check TYPE N                        check partition N for TYPE(min|opt) alignment
  check NUMBER                             do a simple check on the file system
  cp [FROM-DEVICE] FROM-NUMBER TO-NUMBER   copy file system to another partition
  help [COMMAND]                           print general help, or help on COMMAND
  mklabel,mktable LABEL-TYPE               create a new disklabel (partition table)
  mkfs NUMBER FS-TYPE                      make a FS-TYPE file system on partition NUMBER
  mkpart PART-TYPE [FS-TYPE] START END     make a partition
  mkpartfs PART-TYPE FS-TYPE START END     make a partition with a file system
  move NUMBER START END                    move partition NUMBER
  name NUMBER NAME                         name partition NUMBER as NAME
  print [devices|free|list,all|NUMBER]     display the partition table, available devices, free space, all found
        partitions, or a particular partition
  quit                                     exit program
  rescue START END                         rescue a lost partition near START and END
  resize NUMBER START END                  resize partition NUMBER and its file system
  rm NUMBER                                delete partition NUMBER
  select DEVICE                            choose the device to edit
  set NUMBER FLAG STATE                    change the FLAG on partition NUMBER
  toggle [NUMBER [FLAG]]                   toggle the state of FLAG on partition NUMBER
  unit UNIT                                set the default unit to UNIT
  version                                  display the version number and copyright information of GNU Parted
# 创建主分区
(parted) mkpart primary 0 4096 Ignore  #起始和结束位置默认单位是M,可以写成4G等方式,Ignore忽略警告。
(parted) p  #或者print /dev/sdb
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system  Name     Flags
 1      17.4kB  4096MB  4096MB               primary
# 创建交换分区
(parted) mkpart primary Linux-swap 4096 8192 Ignore
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system  Name     Flags
 1      17.4kB  4096MB  4096MB               primary
 2      4096MB  8192MB  4096MB               primary
# 创建逻辑分区,可以不用分扩展分区,最好先分扩展再分逻辑。
(parted) mkpart logical ext4 8192 10.7G Ignore
(parted) p                                                                
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system  Name     Flags
 1      17.4kB  4096MB  4096MB               primary
 2      4096MB  8192MB  4096MB               primary
 3      8192MB  10.7GB  2545MB               logical
# 删除分区分区
(parted) rm 1                                                             
(parted) p                                                                
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system  Name     Flags
 2      4096MB  8192MB  4096MB               primary
 3      8192MB  10.7GB  2545MB               logical
# 非交互式分区方法
$ parted /dev/sdb;mkpart logical ext4 0 4096 Ignore

10.9 mkfs

  • 功能描述:build a Linux file system - 创建Linux文件系统(格式化分区)
  • 选项参数:
    选项 说明
    -t<文件系统类型> 指定要建立何种文件系统;
    -v 显示版本信息与详细的使用方法;
    -V 显示简要的使用方法;
    -c 创建文件系统前检查设备是否有坏块。
  • 实例:
# 将sdb1分区格式化成ext4文件系统
$ mkfs -t ext4 /dev/sdb1  #或者写成mkfs.ext4
# 指定块大小,Inode大小
$ mkfs -t ext4 -b 4096 -I 256 /dev/sdb1

10.10 partprobe

  • 功能描述:inform the OS of partition table changes - 通知系统内核分区表更改
    • 配合fdisk命令分区便可不用重启系统
  • 选项参数:
    选项 说明
    -d 不更新内核;
    -s 显示摘要和分区;
    -h 显示帮助信息;
    -v 显示版本信息。
  • 实例:
$ partprobe /dev/sdb

-d:不更新内核;
-s:显示摘要和分区;
-h:显示帮助信息;
-v:显示版本信息。

  • 实例:
$ partprobe /dev/sdb

10.11 mkswap

  • 功能描述:set up a Linux swap area - 设置Linux交换分区
  • 实例:
# 设置交换分区
$ mkswap /dev/sdb2
# 启用交换分区
$ swapon /dev/sdb2
# 可以写入/etc/fstab,以便在引导时启用:
$ vim /etc/fstab
/dev/sdb2 swap swap defaults 0 0

10.12 swapon和swapoff

  • 功能描述:enable/disable devices and files for paging and swapping - 启用/禁用交换分区或文件
  • 实例:
$ swapon /dev/sdb2
$ swapoff /dev/sdb2

10.13 sync

  • 功能描述:flush file system buffers - 刷新文件系统缓冲区
    • 用于强制被改变的内容立刻写入磁盘;
    • 在Linux/Unix系统中,在文件或数据处理过程中一般先放到内存缓冲区中,等到适当的时候再写入磁盘,以提高系统的运行效率。sync命令则可用来强制将内存缓冲区中的数据立即写入磁盘中。用户通常不需执行sync命令,系统会自动执行update或bdflush操作,将缓冲区的数据写 入磁盘。只有在update或bdflush无法执行或用户需要非正常关机时,才需手动执行sync命令。
  • 技巧拓展:
    • buffer与cache
      • buffer:为了解决写磁盘的效率
      • cache:为了解决读磁盘的效率
      • linux系统为了提高读写磁盘的效率,会先将数据放在一块buffer中。在写磁盘时并不是立即将数据写到磁盘中,而是先写入这块buffer中了。此时如果重启系统,就可能造成数据丢失。sync命令用来flush文件系统buffer,这样数据才会真正的写到磁盘中,并且buffer才能够释放出来,flush就是用来清空buffer。sync命令会强制将数据写入磁盘中,并释放该数据对应的buffer,所以常常会在写磁盘后输入sync命令来将数据真正的写入磁盘。如果不去手动的输入sync命令来真正的去写磁盘,linux系统也会周期性的去sync数据。

10.14 resize2fs

  • 功能描述:ext2/ext3/ext4 file system resizer - 调整ext2/ext3/ext4文件系统大小
    • 如果文件系统是处于mount状态下,那么它只能做到扩容,前提条件是内核支持在线resize。
  • 选项参数:
    选项 说明
    -d 打开调试特性;
    -p 打印已完成的百分比进度条;
    -f 强制执行调整大小操作,覆盖掉安全检查操作;
    -F 开始执行调整大小前,刷新文件系统设备的缓冲区。
  • 实例:
# LVM分区调整重设大小
$ resize2fs /dev/vbirdvg/vgirdlv

11. 系统及用户权限相关命令

11.1 chmod

  • 功能描述:change file mode bits - 改变文件的权限位
  • 选项参数:
    选项 说明
    -R 递归改变目录和目录下所有文件的权限
  • 实例:
# rwx方式改变文件权限
$ ls -l test.txt
-rw-r--r-- 1 root root 62 Jul 9 22:20 test.txt
$ chmod u=x,g=w,o=rwx test.txt  #u=user,g=group,o=ther
$ ls -l test.txt
# 数字方式改变文件权限
$ chmod 644 test.txt
$ ls -l test.txt
-rw-r--r-- 1 root root 43 May 30 21:53 test.txt

11.2 chown

  • 功能描述:change file owner and group - 改变文件的用户和用户组
  • 选项参数:
    选项 说明
    -R 递归,改变目录和目录下所有文件的用户和用户组
  • 实例:
# 修改文件所属用户
$ chown oldboy test.txt
$ ls -l test.txt 
-rw-r--r--. 1 oldboy root 43 May 30 21:53 test.txt
# 修改文件所属用户组
$ chown .oldboy test.txt 
$ ls -l test.txt 
-rw-r--r--. 1 oldboy oldboy 43 May 30 21:53 test.txt
# 修改文件的用户和用户组
$ chown root:root test.txt  #冒号可以用点号.替代
$ ls -l test.txt 
-rw-r--r--. 1 root root 43 May 30 21:53 test.txt
# -R参数,递归改变目录及其中文件的用户和用户组
$ ll -d test test/test_a/
drwxr-xr-x 3 root root 4096 Jul  9 22:32 test
drwxr-xr-x 2 root root 4096 Jul  9 22:32 test/test_a/
$ chown -R oldboy.oldboy test
$ ll -d test test/test_a/
drwxr-xr-x 3 oldboy oldboy 4096 Jul  9 22:32 test
drwxr-xr-x 2 oldboy oldboy 4096 Jul  9 22:32 test/test_a/

11.3 chgrp

  • 功能描述:change group ownership - 改变文件的用户组
    • 基本被chown命令替代。
    • 如果用户不是该文件的属主或root用户,则不能改变文件的属组。
  • 选项参数:
    选项 说明
    -R 递归处理,改变目录下所有文件。
  • 实例:
# 改变文件用户组
$ chgrp oldboy test.txt
$ ll test.txt
-rw-r--r--. 1 root oldboy 43 May 30 21:53 test.txt

11.4 umask

  • 功能描述:Display or set file mode mask - 显示或控制文件默认权限
  • 实例:
# root用户默认umask值是022,普通用户是020
$ umask
0022
$ touch test1.txt
$ ll test1.txt 
-rw-r--r-- 1 root root 0 Jul  9 23:48 test1.txt  #root用户创建普通文件的最大权限0666-0022=0644
$ umask 0020  #设置创建文件的默认权限为0022
$ touch test2.txt
$ ll test2.txt
-rw-r--rw- 1 root root 0 Jul  9 23:51 test2.txt  #0666-0020=0646

12. 查看系统用户登录信息的命令

12.1 whoami

  • 功能描述:print effective userid - 打印有效的用户ID(查看当前用户)
  • 实例:
# whoami命令查看当前有效的用户名称,相当于执行id -un命令
$ whoami
root
$ id -un
root
$ su -oldboy 
$ whoami 
oldboy 

12.2 who

  • 功能描述:show who is logged on - 查看当前登入主机的用户终端信息(已经被w命令替代)
  • 实例:
# 各列解释:登录的用户名,终端设备,登录到系统的时间
$ who
root	pts/0	2016-06-08 02:31(172.16.83.1)

12.3 w

  • 功能描述:Show who is logged on and what they are doing - 显示已登录的用户和他们正在做什么
  • 实例:
$ w
 03:08:45 up 41 min,  1 user,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    172.16.83.1      02:31    0.00s  0.06s  0.00s w

12.4 last

  • 功能描述:last, lastb - show listing of last logged in users - 显示上次登录用户的列表
    • 数据文件位置:/var/log/wtmp
  • 实例:
$ last | tail -5
reboot   system boot  2.6.32-573.el6.x Tue Dec 20 00:20 - 00:13  (9+23:52)   
root     tty1                          Tue Dec 20 00:13 - down   (00:06)    
reboot   system boot  2.6.32-573.el6.x Tue Dec 20 00:12 - 00:20  (00:07)    

wtmp begins Tue Dec 20 00:12:50 2016

12.5 lastlog

  • 功能描述:reports the most recent login of all users or of a given user - 报告所有用户或给定用户的最新登录信息
    • 数据文件位置:/var/log/lastlog
  • 实例:
$ lastlog | tail -5
sshd                                       **Never logged in**
tcpdump                                    **Never logged in**
oldboy           pts/1    172.16.83.1      Thu May 19 14:52:55 +0800 2016
oldoby                                     **Never logged in**
apache                                     **Never logged in**
$ lastlog -u root
Username         Port     From             Latest
root             pts/1    10.0.0.1         Sun Jun 12 15:47:01 +0800 2016

12.6 users

  • 功能描述:print the user names of users currently logged in to the current host - 打印当前计算机登录的用户的用户名
  • 实例:
#显示当前登录系统的所有用户的用户列表。每个显示的用户名对应一个登录会话。如果一个用户有不止一个登录会话,那他的用户名将重复显示。
$ users
oldboy root

12.7 finger

  • 功能描述:user information lookup program - 用户信息查找程序
    • 包括本地与远端主机的用户皆可,帐号名称没有大小写的差别。
    • 单独执行finger指令,它会显示本地主机现在所有的用户的登陆信息,包括帐号名称,真实姓名,登入终端机,闲置时间,登入时间以及地址和电话。
  • 选项参数:
    选项 说明
    -l 列出该用户的帐号名称,真实姓名,用户专属目录,登入所用的Shell,登入时间,转信地址,电子邮件状态,还有计划文件和方案文件内容;
    -m 排除查找用户的真实姓名;
    -s 列出该用户的帐号名称,真实姓名,登入终端机,闲置时间,登入时间以及地址和电话;
    -p 列出该用户的帐号名称,真实姓名,用户专属目录,登入所用的Shell,登入时间,转信地址,电子邮件状态,但不显示该用户的计划文件和方案文件内容。
  • 实例:
# 单独执行finger命令,显示所有用户登录信息。
$ finger
Login     Name       Tty      Idle  Login Time   Office     Office Phone
root      root       pts/1          Jun 18 14:39 (10.0.0.1)

13. 内置命令及其他

13.1 echo

  • 功能描述:Write arguments to the standard output. - 标准打印输出内容的常用命令。
    • 配合>或>>可以覆盖文件及追加文件内容。
      • >意思为重定向,会清除文件里所有以前数据。
      • >>为追加内容,只在文件尾部追加需要的内容。
    • 还有一个比较复杂不常用的类似命令printf
  • 选项参数:
    选项 说明
    -e 启用反斜杠转义字符解释,\n换行,\t Tab键
  • 实例:
# 输出变量值
$ echo $SHELL
/bin/bash
# >输出重定向,会覆盖文件原有内容。
$ echo "hello world" >hello.txt
$ cat hello.txt
hello world
#多行输入
$ echo "aa  #直接回车可多行输入
> bb
> cc
> dd
> " >> hello.txt  #>>追加输出重定向,不会清空原有内容,新内容追加至结尾
$ cat oldboy.txt 
hello world
aa
bb
cc
dd
# -e参数,可以使用反斜杠转义字符的解释器
$ echo "a\nb\nc" >test.txt
$ cat test.txt
a\nb\nc
$ echo -e "a\nb\nc" >test.txt 
$ cat test.txt
a
b
c

13.2 printf

  • 功能描述:format and print data - 格式化输出结果到标准输出
  • 选项参数:
    格式替代符 说明
    %b 相对应的参数被视为含有要被处理的转义序列之字符串。
    %c ASCII字符。显示相对应参数的第一个字符
    %d,%i 十进制整数
    %e,%E,%f 浮点格式
    %g,%e,%f 看哪一个较短,则删除结尾的零
    %G,%E,%f 看哪一个较短,则删除结尾的零
    %o 不带正负号的八进制值
    %s 字符串
    %u 不带正负号的十进制值
    %x 不带正负号的十六进制值,使用a至f表示10至15
    %X 不带正负号的十六进制值,使用A至F表示10至15
    %% 字面意义的%
  • 转义序列:
    转义序列 说明
    \a 警告字符,通常为ASCII的BEL字符
    \b 后退
    \c 抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略
    \f 换页(formfeed)
    \n 换行
    \r 回车(Carriage return)
    \t 水平制表符
    \v 垂直制表符
    \ 一个字面上的反斜杠字符
    \ddd 表示1到3位数八进制值的字符,仅在格式字符串中有效
    \0ddd 表示1到3位的八进制值字符
  • 实例:
# 打印字符串
$ printf "Hello World"
Hello World
# 编写脚本格式化控制输出
# %-5s格式为左对齐且宽度为5的字符串代替(-表示左对齐),不使用则是右对齐。
# %-4.2f格式为左对齐宽度为4,保留两位小数。
$ vim printf_test.sh
#!/bin/bash
printf "%-5s %-10s %-4s\n" NO Name Mark
printf "%-5s %-10s %-4.2f\n" 01 Tom 90.3456
printf "%-5s %-10s %-4.2f\n" 02 Jack 89.2345
printf "%-5s %-10s %-4.2f\n" 03 Jeff 98.4323

13.3 rpm

  • 功能描述:RPM Package Manager - RMP包管理器
    • 存在依赖问题。
  • 选项参数:
    选项 说明
    -i --install,安装
    -v --verbose,显示输出
    -h --hash,打印哈希标记
    -q --query,查询
    -a --all,查询所有安装的软件包
    -f --file,文件
    -l --list,列表
    -e --erase,卸载
    --force 强制
    --nodeps 忽略依赖
    -U --upgrade,升级软件包
  • 常用组合选项:
    组合选项 说明
    rpm -ivh filename.rpm 安装软件
    rpm -Uvh filename.rpm 升级软件
    rpm -e filename.rpm 卸载软件
    rpm -qpi filename.rpm 查询软件描述信息
    rpm -qpl filename.rpm 列出软件文件信息
    rpm -qf filename.rpm 查询文件属于哪个RPM
  • 实例:
# 查询一个软件包有没有安装
$ rpm -qa httpd-tools
httpd-tools-2.2.15-53.el6.centos.x86_64
# 查询一个命令属于哪个包
$ rpm -qf /usr/bin/htpasswd 
httpd-tools-2.2.15-53.el6.centos.x86_64
# 卸载
$ rpm -e --nodeps --force package    #-e卸载,--nodeps忽略依赖,--force强制
# 安装
$ rpm -ivh PACKAGE
# 升级
$ rpm -Uvh PACKAGE
# 查看包中有哪些文件
$ rpm -ql tree
/usr/bin/tree
/usr/share/doc/tree-1.5.3
/usr/share/doc/tree-1.5.3/LICENSE
/usr/share/doc/tree-1.5.3/README
/usr/share/man/man1/tree.1.gz

13.4 yum

  • 功能描述:Yellowdog Updater Modified - 包管理器

    • 能帮助解决依赖问题。
  • 选项参数:

    选项 说明
    -y 自动确认安装
    命令 说明
    repolist all 列出所有仓库
    list all 列出仓库中所有软件包
    info 软件包名称 查看软件包信息
    install 软件包名称 安装软件包,install package1 [package2] […]
    reinstall 软件包名称 重新安装软件包
    update 软件包名称 升级软件包,update [package1] [package2] […],不指定软件包的话使用yum update会更新所有软件包,线上系统尽量不要做,除非有已知安全漏洞。
    remove 软件包名称 移除软件包
    clean all 清除所有仓库缓存
    check-update 检查可更新的软件包
    grouplist 查看系统中已经安装的软件包组
    groupinstall 软件包组 安装指定的软件包组
    yum groupremove 软件包组 移除指定的软件包组
    groupinfo 软件包组 查询指定的软件包组信息
  • 实例:

# yum安装软件
$ yum install -y tree

13.5 watch

  • 功能描述:execute a program periodically, showing output fullscreen - 定期执行程序并全屏显示
  • 选项参数:
    选项 说明
    -n 指定程序执行的时间间隔(秒),默认2秒
  • 实例:
# 每5秒显示/data目录中的文件列表
$ watch -n 5 ls /data
Every 5.0s: ls /data                           Sun Jul 17 02:10:54 2016

aa.txt
# 克隆终端窗口在/data目录创建001目录
$ cd /data;mkdir 001
# 返回第一个终端窗口再次观察
Every 5.0s: ls /data                           Sun Jul 17 02:10:54 2016

001
aa.txt

13.6 alias

  • 功能描述:Define or display aliases - 定义或显示别名
    • 查看别名直接输入alias即可;设置别名alias cp=‘cp -i’
      • 通过给危险命令加一些保护参数,防止人为误操作
      • 把很多复杂的字符串或命令变成一个简单的字符串或命令。
      • 别名生效的位置:
        root用户:/root/.bashrc
        所有用户生效:/etc/bashrc或者/etc/profile
        使配置生效:source /etc/profile或者. /etc/profile
  • 实例:
# 给rm命令设置别名
$ alias rm='echo this command does not allow to use.'
$ rm 
this command does not allow to use.
# 自定义简化命令,更改别名后再输入net就可以查看网卡配置。
$ alias net='cat /etc/sysconfig/network-scripts/ifcfg-eth0'
# 定义别名永久生效
. /etc/profile  #全局生效。
source ~/.bashrc  #当前用户生效。

13.7 unalias

  • 功能描述:Remove each NAME from the list of defined aliases - 从已定义的别名列表中删除某个别名
  • 选项参数:
    选项 说明
    -a 删除所有定义的别名
  • 实例:
# 取消rm命令的别名
$ unalias rm

13.8 clear

  • 功能描述:clear the terminal screen - 清除当前终端屏幕上的任何信息
    • 快捷键:Ctrl+L

13.9 history

  • 功能描述:Display or manipulate the history list - 显示或操作历史记录列表
    • 历史命令被保存到用户家目录的.bash_history文件中。
  • 选项参数:
    选项 说明
    -c clear,清空历史记录
    -d -d 数字,删除指定的记录。
  • 实例:
# 清空历史记录
$ history -c
$ history
    1  history
# 删除指定的记录
$ echo 1
1
$ echo 3
3
$ echo 2
2
$ echo 111111 | passwd --stdin oldboy       
Changing password for user oldboy.
passwd: all authentication tokens updated successfully.
$ history
    1  history
    2  echo 1
    3  echo 3
    4  echo 2
    5  echo 111111| passwd --stdin oldboy  #历史记录查看到了暴露的密码
    6  history
$ history -d 5  #删除第5条记录
$ history
    1  history
    2  echo 1
    3  echo 3
    4  echo 2
    5  history
    6  history -d 5
    7  history

13.10 eject

  • 功能描述:eject removable media - 弹出可移动媒体(U盘、光盘、软盘、磁带设备等)
  • 选项参数:
    选项 说明
    -d 显示默认的设备
    -T 弹出或收入设备的托盘
    -r 弹出光盘
    -f 弹出软驱
    -q 弹出磁带
  • 实例:
# 弹出默认设备
$ eject
# 弹出默认设备,默认顺序为:光驱、SCSI设备、软驱和磁带。
$ eject [/dev/cdrom]
# 弹出光盘
$ eject -r [/dev/cdrom]
# 弹出软驱
$ eject -f [/mnt/floppy]
# 弹出磁带
$ eject -q [/mnt/tape]

13.11 time

  • 功能描述:Report time consumed by pipeline’s execution - 报告命令执行消耗的时间
  • 实例:
# 度量ls命令耗时
$ time ls /etc
...
real	0m0.004s
user	0m0.000s
sys		0m0.003s

13.12 xargs

  • 功能描述:build and execute command lines from standard input - 从标准输入构建和执行命令行
    • 从标准输入(管道或stdin、输入重定向)获取数据,并将数据转换成命令行的参数。
  • 选项参数:
    选项 说明
    -n -n 数字,分组
    -i 结合find管道把前面知道到的文件名和{}关联起来
    -I 可以指定成不同的括号,例如[]或()
  • 实例:
# 创建测试文件
$ echo "1 2 3 4 5 6 7 8 9" >oldboy.txt 
$ cat oldboy.txt 
1 2 3 4 5 6 7 8 9
# -n参数,分3组显示
$ xargs -n 3 <oldboy.txt  
1 2 3
4 5 6
7 8 9
# xargs实例2
$ cat test.txt 
1 2 3 4 5 6
7 8 9
10 11
$ xargs < test.txt 
1 2 3 4 5 6 7 8 9 10 11
# -i参数,结合|管道使用把找到的文件名移动至/tmp下
$ find . -type f -name "file2.txt" | xargs -i mv {} /tmp/
# -I参数,可使用不同的括号替代
$ find . -type f -name "file2.txt" | xargs -I mv [] /tmp/

13.13 exec

  • 功能描述:Replace the shell with the given command - 用给定的命令替换当前shell
    • exec命令通常用在shell脚本程序中,可以调用其他命令。
    • 如果在当前终端中使用此命令,则当指定的命令执行完毕后会退出终端。
  • 选项参数:
    选项 说明
    -c 在空环境中执行指定的命令
  • 实例:
$ exec -c ls -l
total 40
-rw-------. 1 root root  1134 May  8 13:22 anaconda-ks.cfg
-rw-r--r--. 1 root root 21797 May  8 13:22 install.log
-rw-r--r--. 1 root root  7363 May  8 13:21 install.log.syslog
-rw-r--r--  1 root root     0 Jun 12 17:56 test1.txt

Connection closed by foreign host.

13.14 export

  • 功能描述:Set export attribute for shell variables - 把shell变量定义为环境变量
    • 自定义环境变量(全局变量)
  • 选项参数:
    选项 说明
    -f 代表[变量名称]中为函数名称;
    -n 删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中;
    -p 列出所有的shell赋予程序的环境变量。
  • 实例:
# 声明一个全局变量AA
$ export AA=testAA
$ echo $AA
testAA
# 编写一个简单脚本使用此变量
$ vim test.sh
#!/bin/bash
echo $AA  #脚本内可以随时调用此变量
# 脚本执行结果
$ sh test.sh 
testAA

13.15 set

  • 功能描述:Set or unset values of shell options and positional parameters - 显示系统中已经存在的变量,包括全局变量和局部变量。
  • 选项参数:
    选项 说明
    -o 显示bash shell的所有参数配置信息
  • 实例:
$ set | tail
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
SHLVL=1
SSH_CLIENT='10.0.0.1 56705 22'
SSH_CONNECTION='10.0.0.1 56705 10.0.0.41 22'
SSH_TTY=/dev/pts/0
TERM=xterm
UID=0
USER=root
_=set
colors=/etc/DIR_COLORS 
$ set -o | head
allexport      	off
braceexpand    	on
emacs          	on
errexit        	off
errtrace       	off
functrace      	off
hashall        	on
histexpand     	on
history        	on
ignoreeof      	off

13.16 unset

  • 功能描述:Unset values and attributes of shell variables and functions - 取消设置shell变量和函数的值和属性
  • 实例:
$ echo $USER
user01
$ unset USER
$ echo $USER
# 已经取消变量设置,输出空行。

13.17 type

  • 功能描述:Display information about command type - 显示有关命令类型的信息
  • 选项参数:
    选项 说明
    -t 输出“file”、“alias”或者“builtin”,分别表示给定的指令为“外部指令”、“命令别名”或者“内部指令”;
    -p 如果给出的指令为外部指令,则显示其绝对路径;
    -a 在环境变量“PATH”指定的路径中,显示给定指令的信息,包括命令别名。
  • 命令类型:
    类型 说明
    alias 别名。
    keyword 关键字,Shell保留字。
    function 函数,Shell函数。
    builtin 内建命令,Shell内建命令。
    file 文件,磁盘文件,外部命令。
    unfound 没有找到。
  • 实例:
$ type ll
ll is aliased to `ls -l --color=auto'
$ type rsync
rsync is /usr/bin/rsync
$ type cd
cd is a shell builtin

13.18 bc

  • 功能描述:An arbitrary precision calculator language - 任意精度计算器语言
    • 支持浮点运算
  • 选项参数:
    选项 说明
    -i 强制进入交互式模式;
    -l 定义使用的标准数学库;
    -w 对POSIX bc的扩展给出警告信息;
    -q 不打印正常的GNU bc环境信息;
    -v 显示指令版本信息;
    -h 显示指令的帮助信息。
  • 实例:
# 进行浮点运算
$ echo "3.12*2" | bc
6.24
# scale设定小数精度为2位(数值范围)
$ echo "scale=2;3/8" | bc
.37
# 进制转换,执行结果为:11000000,这是用bc将十进制转换成二进制。
#!/bin/bash
abc=192
echo "obase=2;$abc" | bc
# 进制转换,执行结果为:192,这是用bc将二进制转换为十进制。
#!/bin/bash
abc=11000000
echo "obase=10;ibase=2;$abc" | bc
# 计算平方和平方根:
echo "10^10" | bc
echo "sqrt(100)" | bc

13.19 查看bash内置命令清单

# 可以使用man cd错误的查看命令帮助的方法便可列出bash内置命令
$ man cd
NAME
       bash, :, ., [, alias, bg, bind, break, builtin, caller, cd, command,
       compgen, complete, compopt, continue, declare, dirs,  disown,  echo,
       enable,  eval,  exec,  exit,  export,  false, fc, fg, getopts, hash,
       help, history,  jobs,  kill,  let,  local,  logout,  mapfile,  popd,
       printf,  pushd,  pwd,  read,  readonly,  return,  set, shift, shopt,
       source, suspend, test, times, trap,  true,  type,  typeset,  ulimit,
       umask, unalias, unset, wait - bash built-in commands, see bash(1)

14. 系统管理与性能监视命令

14.1 chkconfig

  • 功能描述:updates and queries runleve information for system services - 更新和查询系统服务的运行级别信息
  • 选项参数:
    选项 说明
    --list 查看自启动服务
    --add 添加新的服务
    --del 移除服务
  • 实例:
# 查看系统运行级别3开启的服务
$ chkconfig --list | grep 3:on
crond          	0:off	1:off	2:on	3:on	4:on	5:on   6:off
network        	0:off	1:off	2:on	3:on	4:on	5:on   6:off
rsyslog        	0:off	1:off	2:on	3:on	4:on	5:on   6:off
sshd           	0:off	1:off	2:on	3:on	4:on	5:on   6:off
sysstat        	0:off	1:on	2:on	3:on	4:on	5:on   6:off
# 关闭某个开机自启动服务
$ chkconfig crond off
$ chkconfig --list crond
crond	0:off   1:off   2:off	3:off   4:off   5:off	6:off

14.2 vmstat

  • 功能描述:Report virtual memory statistics - 报告虚拟内存统计信息
    • 可以报告关于进程、内存、I/O等系统整体运行状态。
  • 选项参数:
    选项 说明
    -a 显示活动内页;
    -f 显示启动后创建的进程总数;
    -m 显示slab信息;
    -n 头信息仅显示一次;
    -s 以表格方式显示事件计数器和内存状态;
    -d 报告磁盘状态;
    -p 显示指定的硬盘分区状态;
    -S 输出信息的单位。
  • 实例:
# 每3秒滚动显示一次内存状态
$ vmstat 3
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    320  42188 167332 1534368    0    0     4     7    1    0  0  0 99  0  0
 0  0    320  42188 167332 1534392    0    0     0     0 1002   39  0  0 100  0  0
 0  0    320  42188 167336 1534392    0    0     0    19 1002   44  0  0 100  0  0
 0  0    320  42188 167336 1534392    0    0     0     0 1002   41  0  0 100  0  0
 0  0    320  42188 167336 1534392    0    0     0     0 1002   41  0  0 100  0  0
  • 字段说明:
    字段 说明
    Procs(进程) r: 运行队列中进程数量,这个值也可以判断是否需要增加CPU。(长期大于1)
    b: 等待IO的进程数量。
    Memory(内存) swpd: 使用虚拟内存大小,如果swpd的值不为0,但是SI,SO的值长期为0,这种情况不会影响系统性能。
    free: 空闲物理内存大小。
    buff: 用作缓冲的内存大小。
    cache: 用作缓存的内存大小,如果cache的值大的时候,说明cache处的文件数多,如果频繁访问到的文件都能被cache处,那么磁盘的读IO bi会非常小。
    Swap si: 每秒从交换区写到内存的大小,由磁盘调入内存。
    so: 每秒写入交换区的内存大小,由内存调入磁盘。
    注意:内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响,磁盘IO和CPU资源都会被消耗。有些朋友看到空闲内存(free)很少的或接近于0时,就认为内存不够用了,不能光看这一点,还要结合si和so,如果free很少,但是si和so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。
    IO(现在的Linux版本块的大小为1kb) bi: 每秒读取的块数
    bo: 每秒写入的块数
    注意:随机磁盘读写的时候,这2个值越大(如超出1024k),能看到CPU在IO等待的值也会越大。
    system(系统) in: 每秒中断数,包括时钟中断。
    cs: 每秒上下文切换数。
    注意:上面2个值越大,会看到由内核消耗的CPU时间会越大。
    CPU(以百分比表示) us: 用户进程执行时间百分比(user time)
    us的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超50%的使用,那么我们就该考虑优化程序算法或者进行加速。
    sy: 内核系统进程执行时间百分比(system time),sy的值高时,说明系统内核消耗的CPU资源多,这并不是良性表现,我们应该检查原因。
    wa: IO等待时间百分比,wa的值高时,说明IO等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)。
    id: 空闲时间百分比

14.3 mpstat

  • 功能描述:Report processors related statistics - 报告处理器状态信息
    • 这些信息存放在==/proc/stat==文件中
  • 使用方法:mpstat [选项] [间隔(秒)] [次数]
  • 选项参数:
    选项 说明
    -P 指定CPU编号
  • 实例:
# 每两秒报告一条处理器信息,共报告8条,最后一条是平均值。
$ mpstat 2 10
Linux 2.6.32-754.el6.x86_64 (backup) 	06/21/2019 	_x86_64_	(2 CPU)

01:44:52 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
01:44:54 PM  all    0.00    0.00    0.25    0.00    0.00    0.00    0.00    0.00   99.75
01:44:56 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:44:58 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:45:00 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:45:02 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:45:04 PM  all    0.00    0.00    0.25    0.00    0.00    0.00    0.00    0.00   99.75
01:45:06 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:45:08 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
Average:     all    0.00    0.00    0.06    0.00    0.00    0.00    0.00    0.00   99.94
# 每三秒报告一条处理器信息,共报告3条,不指报告条数会持续滚动显示。
$ mpstat -P 0 3 3
Linux 2.6.32-754.el6.x86_64 (backup) 	06/21/2019 	_x86_64_	(2 CPU)

01:47:23 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
01:47:26 PM    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:47:29 PM    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:47:32 PM    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
Average:       0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

14.4 iostat

  • 功能描述:Report Central Processing Unit (CPU) statistics and input/output statistics for devices, partitions and network filesystems (NFS) - 报告CPU统计信息和输入/输出统计信息
    • 它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。
  • 使用方法:iostat [选项] [间隔(秒)] [次数]
  • 选项参数:
    选项 说明
    -c 仅显示CPU使用情况;
    -d 仅显示设备利用率;
    -k 显示状态以千字节每秒为单位,而不使用块每秒;
    -m 显示状态以兆字节每秒为单位;
    -p 仅显示块设备和所有被使用的其他分区的状态;
    -t 显示每个报告产生时的时间;
    -V 显示版号并退出;
    -x 显示扩展状态。
  • 实例:
# 查看磁盘/dev/sda3的I/O使用情况
$ iostat -x /dev/sda3
Linux 2.6.32-754.el6.x86_64 (backup) 	06/21/2019 	_x86_64_	(2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.01    0.00    0.06    0.03    0.00   99.90

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda3              0.34     0.11    0.37    0.06    11.54     1.34    30.32     0.00    0.56    0.55    0.64   0.43   0.02
  • 字段说明:
    字段 说明
    Device 监测设备名称
    rrqm/s 每秒需要读取需求的数量
    wrqm/s 每秒需要写入需求的数量
    r/s 每秒实际读取需求的数量
    w/s 每秒实际写入需求的数量
    rsec/s 每秒读取区段的数量
    wsec/s 每秒写入区段的数量
    rkB/s 每秒实际读取的大小,单位为KB
    wkB/s 每秒实际写入的大小,单位为KB
    avgrq-sz 需求的平均大小区段
    avgqu-sz 需求的平均队列长度
    await 等待I/O平均的时间(milliseconds)
    svctm I/O需求完成的平均时间
    %util 被I/O需求消耗的CPU百分比

14.5 sar

  • 功能描述:Collect, report, or save system activity information - 收集,报告,或保存系统活动信息
  • 使用方法:sar [选项] [间隔(秒)] [次数]
  • 选项参数:
    选项 说明
    -A 显示所有的报告信息;
    -b 显示I/O速率;
    -B 显示换页状态;
    -c 显示进程创建活动;
    -d 显示每个块设备的状态;
    -e 设置显示报告的结束时间;
    -f 从指定文件提取报告;
    -i 设状态信息刷新的间隔时间;
    -P 报告每个CPU的状态;
    -R 显示内存状态;
    -u 显示CPU利用率;
    -v 显示索引节点,文件和其他内核表的状态;
    -w 显示交换分区状态;
    -x 显示给定进程的状态。
  • 实例:
# 显示I/O速率
$ sar -b 2 4
Linux 2.6.32-754.el6.x86_64 (backup) 	06/21/2019 	_x86_64_	(2 CPU)

02:08:46 PM       tps      rtps      wtps   bread/s   bwrtn/s
02:08:48 PM      0.00      0.00      0.00      0.00      0.00
02:08:50 PM      0.00      0.00      0.00      0.00      0.00
02:08:52 PM      0.00      0.00      0.00      0.00      0.00
02:08:54 PM      0.00      0.00      0.00      0.00      0.00
Average:         0.00      0.00      0.00      0.00      0.00

14.6 ipcs

  • 功能描述:provide information on ipc facilities - 用于报告Linux中进程间通信设施的状态
    • 显示的信息包括消息列表、共享内存和信号量的信息
  • 选项参数:
    选项 说明
    -a 显示全部可显示的信息;
    -q 显示活动的消息队列信息;
    -m 显示活动的共享内存信息;
    -s 显示活动的信号量信息。
  • 实例:
# 显示活动的消息队列信息
$ ipcs -q
------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages    

14.7 ipcrm

  • 功能描述:remove a message queue, semaphore set or shared memory id - 移除消息队列,信号量集或者共享内存id
    • msgctl、shmctl 和 semctl子例程提供了删除操作的细节。标识和关键字可以用ipcs命令找到
  • 选项参数:
    选项 说明
    -m SharedMemory id 删除共享内存标识SharedMemoryID。与SharedMemoryID有关联的共享内存段以及数据结构都会在最后一次拆离操作后删除。
    -M SharedMemoryKey 删除用关键字SharedMemoryKey创建的共享内存标识。与其相关的共享内存段和数据结构段都将在最后一次拆离操作后删除。
    -q MessageID 删除消息队列标识MessageID和与其相关的消息队列和数据结构。
    -Q MessageKey 删除由关键字MessageKey创建的消息队列标识和与其相关的消息队列和数据结构。
    -s SemaphoreID 删除信号量标识SemaphoreID和与其相关的信号量集及数据结构。
    -S SemaphoreKey 删除由关键字SemaphoreKey创建的信号标识和与其相关的信号量集和数据结构。
  • 实例:
# 删除和SharedMemoryID 18602相关的共享内存段
$ ipcrm -m 18602

14.8 strace

  • 功能描述:trace system calls and signals - 跟踪系统调用和信号
    • strace的最简单的用法就是执行一个指定的命令,在指定的命令结束之后它也就退出了。在命令执行的过程中,strace会记录和解析命令进程的所有系统调用以及这个进程所接收到的所有的信号值。
  • 选项参数:
    选项 说明
    -p 追踪指定的PID
    -s 指定输出的字符串的最大长度。默认为32。
    -t 输出结果精确到秒
  • 实例:
# 追踪一个进程的PID,并输出日志。
$ strace -t -s 10 -o log.txt -p 1291

14.9 ltrace

  • 功能描述:A library call tracer - 库调用跟踪器
  • 选项参数:
    选项 说明
    -c 对库调用计数。在底部打印一个方便的摘要。
    -o 写入文件而不是终端
  • 实例:
# 跟踪程序二进制的调用库
$ ltrace ./{program}
# 对库调用计数
$ ltrace -c {/path/to/program}
# 输出写入文件
$ ltrace -o {file} {/path/to/program}

14.10 getenforce

  • 功能描述:get the current mode of SELinux - 检查当前SELinux模式状态
    • 或者使用命令sestatus进行查看
  • 实例:
# 获取SELinux状态
$ getenforce
Disabled
$ sestatus
SELinux status:                 disabled

14.11 setenforce

  • 功能描述:modify the mode SELinux is running in - 修改SELinux状态
    • 还需编辑修改==/etc/selinux/config==配置文件
    • 修改SELinux状态和配置文件后,需要重启系统使配置生效。
  • 选项参数:
    选项 说明
    1 启用
    0 警告、不启用。
  • 实例:
$ setenforce  #TAB键查看提示
usage:  setenforce [ Enforcing | Permissive | 1 | 0 ]
$ setenforce 0    #设置为0,Permissive
# 修改配置文件
$ sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
# 最后重启系统
$ reboot

14.12 tune2fs

  • 功能描述:adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems - 调整ext2、ext3、ext4文件系统上的可调文件系统参数
    • Windows下面如果出现意外断电死机情况,下次开机一般都会出现系统自检。Linux系统下面也有文件系统自检,而且是可以通过tune2fs命令,自行定义自检周期及方式。
  • 选项参数:
    选项 说明
    -c 调整最大加载次数;
    -C 设置文件系统已经被加载的次数;
    -e 设置内核代码检测到错误时的行为;
    -f 强制执行修改,即使发生错误;
    -i 设置相邻两次文件系统检查的相隔时间;
    -j 为“ext2”文件系统添加日志功能,将其转换为“ext3”文件系统;
    -l 显示文件超级块内容;
    -L 设置文件系统卷标;
    -m 显示文件保留块的百分比;
    -M 设置文件系统最后被加载到的目录;
    -o 设置或清除文件系统加载的特性或选项;
    -O 设置或清除文件系统的特性或选项;
    -r 设置文件系统保留块的大小;
    -T 设置文件系统上次被检查的时间;
    -u 设置可以使用文件系统保留块的用户;
    -U 设置文件系统的UUID。
  • 实例:
$ tune2fs -c 30 /dev/hda1  #设置强制检查前文件系统可以挂载的次数
$ tune2fs -c -l /dev/hda1  #关闭强制检查挂载次数限制。
$ tune2fs -i 10 /dev/hda1  #10天后检查
$ tune2fs -i 1d /dev/hda1  #1天后检查
$ tune2fs -i 3w /dev/hda1  #3周后检查
$ tune2fs -i 6m /dev/hda1  #半年后检查
$ tune2fs -i 0 /dev/hda1   #禁用时间检查
$ tune2fs -j /dev/hda1     #添加日志功能,将ext2转换成ext3文件系统
$ tune2fs -r 40000 /dev/hda1  #调整/dev/hda1分区的保留空间为40000个磁盘块
$ tune2fs -o acl,user_xattr /dev/hda1  #设置/dev/hda1挂载选项,启用Posix Access Control Lists和用户指定的扩展属性

14.13 shoumount

  • 功能描述:show mount information for an NFS server - 显示NFS服务器挂载信息
  • 选项参数:
    选项 说明
    -e --exports,显示NFS服务器输出的目录列表
    -d --directories,显示NFS服务器中提供共享的目录
    -a --all,以ip:/dir形式显示NFS服务器的IP地址和可被挂载的目录
  • 实例:
# -e参数
$ showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
# -d参数
$ showmount -d 172.16.1.31
Directories on 172.16.1.31:
# -a参数
$ showmount -a 172.16.1.31
All mount points on 172.16.1.31:

14.14 exportfs

  • 功能描述:maintain table of exported NFS file systems - 管理当前NFS共享的文件系统列表
  • 选项参数:
    选项 说明
    -rv exports -rv 相当于/etc/init.d/nfs reload
    如果修改了/etc/exports配置文件需要重新启动服务
  • 实例:
# 重新加载NFS服务
$ /usr/sbin/exportfs -rv

14.15 rpcinfo

  • 功能描述:report RPC information - 显示RPC服务相关信息
  • 选项参数:
    选项 说明
    -n 端口号
    -p 主机
  • 实例:
$ rpcinfo -p 10.0.0.41
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp  45012  status
    100024    1   tcp  49310  status

15. 关机/重启/注销和查看系统信息命令

15.1 reboot

  • 功能描述:reboot or stop the system - 重启系统
    • 相当于shutdown -r now,init 6
  • 实例:
$ reboot
Broadcast message from root@CentOS6
        (/dev/pts/0) at 10:35 ...
The system is going down for reboot NOW!

15.2 shutdown

  • 功能描述:bring the system down - 关机。
    • 相当于halt、init 0
  • 选项参数:
    选项 说明
    -h halt
    -r reboot
  • 实例:
# 立刻关机
$ shutdown -h now
# 一分钟后重启
$ shutdown -r 1

15.3 halt

  • 功能描述:reboot, halt, poweroff - reboot or stop the system - 关机
    • 相当于shutdown -h now、init 0
  • 实例:
$ halt
Broadcast message from root@test       
(/dev/pts/0) at 16:15 ...
The system is going down for halt NOW!

15.4 poweroff

  • 功能描述:reboot, halt, poweroff - reboot or stop the system - 关机
  • 实例:
$ poweroff
Broadcast message from root@nfs01
       (/dev/pts/0) at 23:04 ... 

The system is going down for power off NOW!
Connection closing...Socket close.
 
Connection closed by foreign host. 

Disconnected from remote host(nfs01-31) at 23:04:27.

15.5 logout

  • 功能描述: Exit a login shell - 退出当前登录的shell
    • 快捷键:Ctrl+d
  • 实例:
# 退出当前登录的shell
$ su - oldboy
[oldboy@Test ~]$ logout
$ logout
Connection closing...Socket close. 

Connection closed by foreign host. 

Disconnected from remote host(Test-200) at 23:06:02.

15.6 exit

  • 功能描述:Exit the shell - 退出shell
    • 用法和logout类似

16. 进程管理相关命令

16.1 bg

  • 功能描述:Move jobs to the background - 把进程移到后台运行
    • 快捷键:Ctrl + z
  • 实例:
# 恢复特定作业(使用jobs -l获取进程ID)并在后台运行它
$ bg [job_id]

16.2 fg

  • 功能描述:Move job to the foreground - 把进程移到前台运行
  • 实例:
# 将指定进程置于前台
$ fg [job_id]

16.3 jobs

  • 功能描述:Display status of jobs - 显示任务状态
  • 选项参数:
    选项 说明
    -l 显示所有任务的状态和进程ID
    -p 显示所有任务的进程ID
  • 实例:
# 显示所有任务的状态和进程ID
$ jobs -l
[1]+ 24812 Stopped                 vim aa.txt
# 显示指定任务ID的状态
$ jobs 1
[1]+  Stopped                 vim aa.txt

16.4 kill

  • 功能描述:terminate a process - 终止某个进程
    • 用于终止某个指定PID的服务进程。
  • 实例:
# 终止PID是3306的进程
$ kill 3306

16.5 killall

  • 功能描述:kill processes by name - 终止指定名称所对应的全部进程
  • 实例:
# 终止httpd服务进程
$ pidof httpd
13581 13580 13579 13578 13577 13576
$ killall httpd
$ pidof httpd
$  #相关进程已经全部终止

16.6 pkill

  • 功能描述:pgrep, pkill - look up or signal processes based on name and other attributes - 根据名称查找和处理进程
  • 实例:
# 强制终止所有指定进程名的进程
$ pkill -9 [process_name]

16.7 crontab

  • 功能描述:maintain crontab files for individual users - 维护单个用户的定时任务文件
    • ==/var/spool/cron/==所有用户crontab文件存放的目录,以用户名命名。
    • /etc/crontab定时任务系统配置文件
  • 选项参数:
    选项 说明
    -u user 指定用户
    -l list user’s crontab,查看定时任务列表。
    -e edit user’s crontab,编辑定时任务。
    -r delete user’s crontab
    -i prompt before deleting user’s crontab,删除前提示
    -s selinux context
  • 实例:
# 用户建立的crontab文件存放在/var/spool/cron/目录下,文件名与用户名一致。
# 格式分为7段,前5段是时间设定段,第6段指定指定的用户,第7段是所要执行的命令端。
# 时间段说明:分(0-59),时(0-23),日(1-31),月(1-12),周(0-6)
# 查看定时任务列表
$ crontab -l
#time sync 2016-07-03
*/5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1    #每5分钟执行时间同步

16.8 ps

  • 功能描述:report a snapshot of the current processes - 查看进程状态
  • 选项参数:
    选项 说明
    -a 显示所有进程(包括其他用户的进程)
    -u 用户以及其他详细信息
    -x 显示没有控制终端的进程
    -ef 常用组合参数
  • 进程状态说明:
    状态关键字 说明
    R(运行) 进程正在运行或在运行队列中等待。
    S(中断) 进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该状态。
    D(不可中断) 进程不响应系统异步信号,即便用kill命令也不能将其中断。
    Z(僵死) 进程已经终止,但进程描述符依然存在,直到父进程调用wait4()系统函数后将进程释放。
    T(停止) 进程收到停止信号后停止运行。
  • 实例:
# 查看并筛选出rsync进程相关信息
$ ps -ef | grep rsync | grep -v grep
root       1288      1  0 11:28 ?        00:00:00 /usr/bin/rsync --daemon
# 查看所有进程的状态
$ ps -aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.3  52940  6872 ?        Ss   10:59   0:04 /usr/lib/syste
root          2  0.0  0.0      0     0 ?        S    10:59   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    10:59   0:00 [ksoftirqd/0]
...  #以下省略
  • 各列说明:
    显示列 说明
    USER 进程的所有者
    PID 进程ID号
    %CPU CPU占用率
    %MEM 内存占用率
    VSZ 虚拟内存使用量,单位是KB
    RSS 占用的固定内存量,单位是KB
    TTY 所在终端
    STAT 进程状态
    START 被启动的时间
    TIME 实际使用CPU的时间
    COMMAND 命令名称与参数

16.9 pstree

  • 功能描述:display a tree of processes - 显示进程树
  • 选项参数:
    选项 说明
    -a 显示每个程序的完整指令,包含路径,参数或是常驻服务的标示;
    -c 不使用精简标示法;
    -G 使用VT100终端机的列绘图字符;
    -h 列出树状图时,特别标明现在执行的程序;
    -H<程序识别码> 此参数的效果和指定"-h"参数类似,但特别标明指定的程序;
    -l 采用长列格式显示树状图;
    -n 用程序识别码排序。预设是以程序名称来排序;
    -p 显示程序识别码;
    -u 显示用户名称;
    -U 使用UTF-8列绘图字符;
    -V 显示版本信息。
  • 实例:
$ pstree -a
init
  ├─crond
  ├─mingetty /dev/tty1
  ├─mingetty /dev/tty2
  ├─mingetty /dev/tty3
  ├─mingetty /dev/tty4
  ├─mingetty /dev/tty5
  ├─mingetty /dev/tty6
  ├─rpc.statd
  ├─rpcbind
  ├─rsync --daemon
  ├─rsyslogd -i /var/run/syslogd.pid -c 5
  │   ├─{rsyslogd}
  │   ├─{rsyslogd}
  │   └─{rsyslogd}
  ├─sshd
  │   └─sshd 
  │       └─bash
  │           └─pstree -a
  └─udevd -d
      ├─udevd -d
      └─udevd -d

16.10 nice

  • 功能描述:run a program with modified scheduling priority - 修改进程的调度优先级的程序
    • nice范围:-20至19(由高到低)
  • 选项参数:
    选项 说明
    -n 指定进程的优先级(整数)
  • 实例:
# 将当前目录下的documents目录打包,但不希望tar占用太多CPU,设置最低优先级。
$ nice -19 tar zcf pack.tar.gz documents
# 设置最高优先级:因为“-19”中的“-”仅表示参数前缀;所以,如果希望将当前目录下的documents目录打包,并且赋予tar进程最高的优先级需要再加一个“-”
$ nice --20 tar zcf pack.tar.gz documents

16.11 nohup

  • 功能描述:run a command immune to hangups, with output to a non-tty - 运行一个免于挂起的命令,输出到非tty
  • 实例:
# 不指定命令的输出文件,默认输出到当前目录下的nohup.out文件
$ nohup ls
nohup: ignoring input and appending output to `nohup.out'
$ ls
anaconda-ks.cfg  install.log  install.log.syslog  nohup.out
# 指定输出文件
$ nohup ls > lsout.log 2>&1
$ ls
anaconda-ks.cfg  install.log  install.log.syslog  lsout.log  nohup.out

16.12 pgrep

  • 功能描述:look up or signal processes based on name and other attributes - 根据名称和其他属性查找或发出信号流程
    • 显示查找到的进程id。每一个进程ID以一个十进制数表示,通过一个分割字符串和下一个ID分开,默认的分割字符串是一个新行。对于每个属性选项,用户可以在命令行上指定一个以逗号分割的可能值的集合。
  • 选项参数:
    选项 说明
    -o 仅显示找到的最小(起始)进程号;
    -n 仅显示找到的最大(结束)进程号;
    -l 显示进程名称;
    -P 指定父进程号;
    -g 指定进程组;
    -t 指定开启进程的终端;
    -u 指定进程的有效用户ID。
  • 实例:
$ pgrep -lo httpd
4557 httpd
$ pgrep -ln httpd
4566 httpd
$ pgrep -l httpd
4557 httpd
4560 httpd
4561 httpd
4562 httpd
4563 httpd
4564 httpd
4565 httpd
4566 httpd
$ pgrep httpd
4557
4560
4561
4562
4563
4564
4565
4566

14.13 runlevel

  • 功能描述:output previous and current runlevel - 显示当前系统运行级别
  • 实例:
# 查看当前系统运行级别
$ runlevel
N 3

16.14 init

  • 功能描述:Upstart process management daemon - 切换系统运行级别,后面接对应级别的数字。
  • 实例:
# 切换系统运行级别
$ init 6  #级别6是重启
# 查看各级别说明
$ cat /etc/inittab
# Default runlevel. The runlevels used are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
# 
id:3:initdefault:  #默认级别是3

16.15 service

  • 功能描述:run a System V init script - 控制系统服务的实用工具
    • 推荐使用/etc/init.d/SEVICENAME [start|stop…]的方式启动、重启或停止服务,可以TAB键命令补全。
  • 选项参数:
    选项 说明
    -h 显示帮助信息
    –status-all 显示所有服务的状态
  • 实例:
# 查看网络服务状态
$ service network status
Configured devices:
lo eth0 eth1
Currently active devices:
lo eth0 eth1
#重启网络服务
$ service network restart
Shutting down interface eth0:                              [  OK  ]
Shutting down interface eth1:                              [  OK  ]
Shutting down loopback interface:                          [  OK  ]
Bringing up loopback interface:                            [  OK  ]
Bringing up interface eth0:  Determining if ip address 10.0.0.41 is already in use for device eth0...
                                                           [  OK  ]
Bringing up interface eth1:  Determining if ip address 172.16.1.41 is already in use for device eth1...
                                                           [  OK  ]

16.16 pidof

  • 功能描述:find the process ID of a running program - 找到正在运行程序的进程ID
  • 选项参数:
    选项 说明
    -s 仅返回一个进程号;
    -c 仅显示具有相同“root”目录的进程;
    -x 显示由脚本开启的进程;
    -o 指定不显示的进程ID。
  • 实例:
# 找到进程的PID号
$ pidof rsync 
1288
$ pidof sshd
1307 1268

你可能感兴趣的:(L001-Linux常用命令汇总)