Shell介绍

计算机硬件是由运算器、控制器、存储器、输入/输出设备等共同组成的,而让各种硬件设备各司其职且又能协同运行的东西就是系统内核
系统内核包含系统运行的最核心功能,所以一般不建议直接修改内核参数来使用操作系统。
用户把一些命令“告诉”终端(shell),它就会调用相应的程序服务去完成某些工作。
主流Linux系统选择Bash解释器作为命令行终端主要有以下4项优势

  • 通过上下方向键来调取过往执行过的Linux命令;
  • 命令或参数仅需输入前几位就可以用Tab键补全;
  • 具有强大的批处理脚本;
  • 具有实用的环境变量功能。

    命令帮助

    常见执行Linux命令的格式是这样的
    命令名称 [命令参数] [命令对象]
    注意,命令名称、命令参数、命令对象之间请用空格键分隔。

命令参数的长格式与短格式示例

| 长格式 | man help | | —- | —- | | 短格式 | man -h |

man命令中常用按键以及用途

按键 用途
空格键 向下翻一页
PaGe down 向下翻一页
PaGe up 向上翻一页
home 直接前往首页
end 直接前往尾页
/ 从上至下搜索某个关键词,如“/linux”
? 从下至上搜索某个关键词,如“?linux”
n 定位到下一个搜索到的关键词
N 定位到上一个搜索到的关键词
q 退出帮助文档

man命令帮助信息的结构以及意义

结构名称 代表意义
NAME 命令的名称
SYNOPSIS 参数的大致使用方法
DESCRIPTION 介绍说明
EXAMPLES 演示(附带简单说明)
OVERVIEW 概述
DEFAULTS 默认的功能
OPTIONS 具体的可用选项(带介绍)
ENVIRONMENT 环境变量
FILES 用到的文件
SEE ALSO 相关的资料
HISTORY 维护历史与联系方式

安装中文man手册(不推荐)

  1. yum -y install man-pages-zh-CN.noarch
  2. echo "alias cman='man -M /usr/share/man/zh_CN'" >> .bashrc
  3. source .bashrc

系统工作命令

echo

在终端输出字符串或变量提取后的值
echo [字符串|$变量]

date

显示及设置系统的时间或日期
date [选项] ["+指定的格式"]
date命令中的参数以及作用

参数 作用
%t 跳格[Tab键]
%H 小时(00~23)
%I 小时(00~12)
%M 分钟(00~59)
%S 秒(00~59)
%j 今年中的第几天
  1. [root@localhost ~]# date
  2. 2019 04 09 星期二 10:54:16 CST
  3. [root@localhost ~]# date "+%Y-%m-%d %H:%M:%S"
  4. 2019-04-09 10:54:47
  5. [root@localhost ~]# date -s "20190409 10:55:00"
  6. 2019 04 09 星期二 10:55:00 CST
  7. [root@localhost ~]# date "+%j"
  8. 099 \\显示当年已经过去几天

reboot

重启系统

poweroff

关闭系统

wget

在终端中下载网络文件
wget [参数] 下载地址
wget命令的参数以及作用

参数 作用
-b 后台下载模式
-P 下载到指定目录
-t 最大尝试次数
-c 断点续传
-p 下载页面内所有资源,包括图片、视频等
-r 递归下载

PS

查看系统中的进程状态
ps [参数]

参数 作用
-a 显示所有进程(包括其他用户的进程)
-u 用户以及其他详细信息
-x 显示没有控制终端的进程

在Linux系统中,有5种常见的进程状态,分别为运行、中断、不可中断、僵死与停止,其各自含义如下所示。

  • R(运行):进程正在运行或在运行队列中等待。
  • S(中断):进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该 状态。
  • D(不可中断):进程不响应系统异步信号,即便用kill命令也不能将其中断。
  • Z(僵死):进程已经终止,但进程描述符依然存在, 直到父进程调用wait4()系统函数后将进程释放。
  • T(停止):进程收到停止信号后停止运行 | USER | PID | %CPU | %MEM | VSZ | RSS | TTY | STAT | START | TIME | COMMAND | | —- | —- | —- | —- | —- | —- | —- | —- | —- | —- | —- | | 进程的所有者 | 进程ID号 | 运算器占用率 | 内存占用率 | 虚拟内存使用量(单位是KB) | 占用的固定内存量(单位是KB) | 所在终端 | 进程
    状态 | 被启动
    的时间 | 实际使用 CPU的时间 | 命令名称与参数 | | root | 1 | 0.0 | 0.4 | 53684 | 7628 | ? | Ss | 07 :22 | 0:02 | /usr/lib/systemd/systemd | | root | 2 | 0.0 | 0.0 | 0 | 0 | ? | S | 07:22 | 0:00 | [kthreadd] | | root | 3 | 0.0 | 0.0 | 0 | 0 | ? | S | 07:22 | 0:00 | [ksoftirqd/0] | | root | 5 | 0.0 | 0.0 | 0 | 0 | ? | S< | 07:22 | 0:00 | [kworker/0:0H] | | root | 7 | 0.0 | 0.0 | 0 | 0 | ? | S | 07:22 | 0:00 | [migration/0] | | ………………省略部分输出信息……………… | | | | | | | | | | |

在Linux系统中的命令参数有长短格式之分,长格式和长格式之间不能合并,长格式和短格式之间也不能合并,但短格式和短格式之间是可以合并的,合并后仅保留一个-(减号)即可。另外ps命令可允许参数不加减号(-),因此可直接写成ps aux的样子。

top

动态地监视进程活动与系统负载等信息
top
第1行:系统时间、运行时间、登录终端数、系统负载(三个数值分别为1分钟、5分钟、15分钟内的平均值,数值越小意味着负载越低)。
第2行:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程数。
第3行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源百分比、空闲的资源百分比等。
第4行:物理内存总量、内存使用量、内存空闲量、作为内核缓存的内存量。
第5行:虚拟内存总量、虚拟内存使用量、虚拟内存空闲量、已被提前加载的内存量。

pidof

查询某个指定服务进程的PID值
pidof [参数] [服务名称]

  1. [root@localhost ~]# pidof sshd
  2. 7401 6798

kill

终止某个指定PID的服务进程
kill [参数] [进程ID]

killall

终止某个指定名称的服务所对应的全部进程
killall [参数] [服务名称]

小提示:
如果我们在系统终端中执行一个命令后想立即停止它,可以同时按下Ctrl + C组合键(生产环境中比较常用的一个快捷键),这样将立即终止该命令的进程。或者,如果有些命令在执行时不断地在屏幕上输出信息,影响到后续命令的输入,则可以在执行命令时在末尾添加上一个&符号,这样命令将进入系统后台来执行。

系统状态检测命令

ifconfig

获取网卡配置与网络状态等信息
ifconfig [网络设备] [参数]

uname

查看系统内核与系统版本等信息
uname [-a]

uptime

查看系统的负载信息
uptime
显示当前系统时间、系统已运行时间、启用终端数量以及平均负载值等信息
平均负载值指的是系统在最近1分钟、5分钟、15分钟内的压力情况

系统平均负载被定义为在特定时间间隔内运行队列中的平均进程数。如果一个进程满足以下条件则其就会位于运行队列中:

  • 它没有在等待I/O操作的结果
  • 它没有主动进入等待状态(也就是没有调用’wait’)
  • 没有被停止(例如:等待终止)

一般来说,每个CPU内核当前活动进程数不大于3,则系统运行表现良好!当然这里说的是每个cpu内核,也就是如果你的主机是四核cpu的话,那么只要uptime最后输出的一串字符数值小于12即表示系统负载不是很严重.当然如果达到20,那就表示当前系统负载非常严重,估计打开执行web脚本非常缓慢.

free

显示当前系统中内存的使用量信息
free [-h]
执行free -h命令后的输出信息

内存总量 已用量 可用量 进程共享的内存量 磁盘缓存的内存量 缓存的内存量
total used free shared buffers cached
Mem 1.8GB 1.3GB 542MB 9.8MB 1.6MB 413MB
-/+

buffers/cache | | 869MB | 957MB | | | | | Swap | 2.0GB | 0 | 2.0GB | | | |

who

查看当前登入主机的用户终端信息
who [参数]
执行who命令的结果

登录的用户名 终端设备 登录到系统的时间
root :0 2017-08-24

17:52 (:0) | | root | pts/0 | 2017-08-24 17:52 (:0) |

last

查看所有系统的登录记录
last [参数]

history

显示历史执行过的命令
history [-c]
执行history命令能显示出当前用户在本地计算机中执行过的最近1000条命令记录。如果觉得1000不够用,还可以自定义/etc/profile文件中的HISTSIZE变量值。在使用history命令时,如果使用-c参数则会清空所有的命令历史记录。还可以使用“!编码数字”的方式来重复执行某一次的命令。

sosreport

用于收集系统配置及架构信息并输出诊断文档

工作目录切换命令

pwd

显示用户当前所处的工作目录

cd

用于切换工作路径

  1. [root@node-1 ~]# cd ~ \\进入用户家目录
  2. [root@node-1 ~]# cd - \\进入上次的目录,并且显示上次目录路径
  3. /root
  4. [root@node-1 ~]# cd .. \\进入上一层目录
  5. [root@node-1 /]# cd . \\进入当前目录

ls

显示目录中的文件信息
ls [选项] [文件]

参数 作用
-a 看到全部文件(包括隐藏文件)
-l 查看文件的属性、大小等详细信息
—color 用颜色区分文件类型
-d 查看当前文件夹的属性

文本文件编辑命令

cat

查看纯文本文件(内容较少的)
cat [选项] [文件]

more

用于查看纯文本文件(内容较多的)
more [选项] 文件

head

查看纯文本文档的前N行
head [选项] [文件]

tail

查看纯文本文档的后N行或持续刷新内容
tail [选项] [文件]

tr

替换文本文件中的字符
tr [原始字符] [目标字符]

  1. [root@node-1 ~]# cat anaconda-ks.cfg | tr [a-z] [A-Z] \\把这个文件中的小写都变成大写输出

wc

统计指定文本的行数、字数、字节数
wc [参数] [文本]
wc的参数以及作用

参数 作用
-l 只显示行数
-w 只显示单词数
-c 只显示字节数
  1. [root@node-1 ~]# wc -l /etc/passwd
  2. 28 /etc/passwd

stat

查看文件的具体存储信息和时间等信息
stat 文件名
命令stat anaconda-ks.cfg会显示出文件的三种时间状态:Access、Modify、Change。

  1. [root@node-1 ~]# stat anaconda-ks.cfg
  2. File: anaconda-ks.cfg
  3. Size: 1369 Blocks: 8 IO Block: 4096 regular file
  4. Device: fd00h/64768d Inode: 100732215 Links: 1
  5. Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
  6. Context: system_u:object_r:admin_home_t:s0
  7. Access: 2019-04-09 05:28:11.892639642 -0400
  8. Modify: 2019-04-09 05:26:58.816607340 -0400
  9. Change: 2019-04-09 05:26:58.817607367 -0400
  10. Birth: -

cut

用于按“列”提取文本字符
cut [参数] 文本

参数 作用
-d 设置间隔符号
-f 设置间隔出来的列数
  1. [root@node-1 ~]# cut -d: -f1 /etc/passwd
  2. root
  3. bin
  4. daemon
  5. adm
  6. lp
  7. sync
  8. shutdown
  9. halt
  10. mail
  11. operator
  12. games
  13. ftp
  14. nobody
  15. systemd-network
  16. dbus
  17. polkitd
  18. postfix
  19. chrony
  20. sshd
  21. unbound
  22. rpc
  23. qemu
  24. gluster
  25. saslauth
  26. radvd
  27. tss
  28. rpcuser
  29. nfsnobody

diff

比较多个文本文件的差异
diff [参数] 文件

  1. [root@node-1 ~]# diff -c diff_a.txt diff_b.txt
  2. *** diff_a.txt 2019-04-09 06:42:59.999351187 -0400
  3. --- diff_b.txt 2019-04-09 06:43:34.211301903 -0400
  4. ***************
  5. *** 35,46 ****
  6. chrony
  7. kexec-tools
  8. %end
  9. %addon com_redhat_kdump --enable --reserve-mb='auto'
  10. %end
  11. !
  12. %anaconda
  13. pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
  14. pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
  15. --- 35,47 ----
  16. chrony
  17. kexec-tools
  18. + 12345678
  19. %end
  20. %addon com_redhat_kdump --enable --reserve-mb='auto'
  21. %end
  22. ! qwerty
  23. %anaconda
  24. pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
  25. pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok

文件目录管理命令

touch

创建空白文件或设置文件的时间
touch [选项] [文件]
touch命令的参数及其作用

参数 作用
-a 仅修改“读取时间”(atime)
-m 仅修改“修改时间”(mtime)
-d 同时修改atime与mtime
  1. [root@node-1 ~]# ls -l anaconda-ks.cfg
  2. -rw-------. 1 root root 1369 Apr 9 05:26 anaconda-ks.cfg
  3. [root@node-1 ~]# echo hello >> anaconda-ks.cfg
  4. [root@node-1 ~]# ls -l anaconda-ks.cfg
  5. -rw-------. 1 root root 1375 Apr 9 07:23 anaconda-ks.cfg
  6. [root@node-1 ~]# touch -d "20190409 05:26" anaconda-ks.cfg
  7. [root@node-1 ~]# ls -l anaconda-ks.cfg
  8. -rw-------. 1 root root 1375 Apr 9 05:26 anaconda-ks.cfg

mkdir

用于创建空白的目录
mkdir [选项] 目录

参数 作用
-p 创建出具有嵌套叠层关系的文件目录

cp

用于复制文件或目录
cp [选项] 源文件 目标文件

  • 如果目标文件是目录,则会把源文件复制到该目录中;
  • 如果目标文件也是普通文件,则会询问是否要覆盖它;
  • 如果目标文件不存在,则执行正常的复制操作。

cp命令的参数及其作用

参数 作用
-p 保留原始文件的属性
-d 若对象为“链接文件”,则保留该“链接文件”的属性
-r 递归持续复制(用于目录)
-i 若目标文件存在则询问是否覆盖
-a 相当于-pdr(p、d、r为上述参数)

mv

剪切文件或将文件重命名
mv [选项] 源文件 [目标路径|目标文件名]

rm

删除文件或目录
rm [选项] 文件

dd

按照指定大小和个数的数据块来复制文件或转换文件
dd [参数]
Linux系统中有一个名为 /dev/zero 的设备文件,每次在课堂上解释它时都充满哲学理论的色彩。因为这个文件不会占用系统存储空间,因此可以使用它作为dd命令的输入文件,来生成一个指定大小的文件。

dd命令的参数及其作用

参数 作用
if 输入的文件名称
of 输出的文件名称
bs 设置每个“块”的大小
count 设置要复制“块”的个数
  1. [root@node-1 ~]# dd if /dev/zero of=560_file count=1 bs=560M
  2. [root@node-1 ~]# dd if=/dev/cdrom of=Centos7.iso

file

查看文件的类型
file 文件名

  1. [root@node-1 ~]# file anaconda-ks.cfg
  2. anaconda-ks.cfg: ASCII text
  3. [root@node-1 ~]# file /dev/sda
  4. /dev/sda: block special

打包压缩与搜索命令

tar

对文件进行打包压缩或解压
tar [选项] [文件]

参数 作用
-c 创建压缩文件
-x 解开压缩文件
-t 查看压缩包内有哪些文件
-z 用Gzip压缩或解压
-j 用bzip2压缩或解压,压缩率比Gzip高一些
-v 显示压缩或解压的过程
-f 目标文件名
-p 保留原始的权限与属性
-P 使用绝对路径来压缩
-C 指定解压到的目录
  1. [root@node-1 ~]# tar -czvf root.tar.gz anaconda-ks.cfg
  2. anaconda-ks.cfg
  3. [root@node-1 ~]# ls
  4. anaconda-ks.cfg root.tar.gz
  5. [root@node-1 ~]# mkdir test
  6. [root@node-1 ~]# tar -xzvf root.tar.gz -C test/
  7. anaconda-ks.cfg
  8. [root@node-1 ~]# ls test/
  9. anaconda-ks.cfg

grep

在文本中执行关键词搜索
grep [选项] [文件]
grep命令的参数及其作用

参数 作用
-b 将可执行文件(binary)当作文本文件(text)来搜索
-c 仅显示找到的行数
-i 忽略大小写
-n 显示行号
-v 反向选择—仅列出没有“关键词”的行
  1. [root@node-1 ~]# grep /sbin/nologin /etc/passwd
  2. bin:x:1:1:bin:/bin:/sbin/nologin
  3. daemon:x:2:2:daemon:/sbin:/sbin/nologin
  4. adm:x:3:4:adm:/var/adm:/sbin/nologin
  5. lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
  6. mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
  7. operator:x:11:0:operator:/root:/sbin/nologin
  8. games:x:12:100:games:/usr/games:/sbin/nologin
  9. ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
  10. nobody:x:99:99:Nobody:/:/sbin/nologin
  11. systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
  12. dbus:x:81:81:System message bus:/:/sbin/nologin
  13. polkitd:x:999:997:User for polkitd:/:/sbin/nologin
  14. postfix:x:89:89::/var/spool/postfix:/sbin/nologin
  15. chrony:x:998:996::/var/lib/chrony:/sbin/nologin
  16. sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
  17. unbound:x:997:995:Unbound DNS resolver:/etc/unbound:/sbin/nologin
  18. rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
  19. qemu:x:107:107:qemu user:/:/sbin/nologin
  20. gluster:x:996:994:GlusterFS daemons:/run/gluster:/sbin/nologin
  21. saslauth:x:995:76:Saslauthd user:/run/saslauthd:/sbin/nologin
  22. radvd:x:75:75:radvd user:/:/sbin/nologin
  23. tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
  24. rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
  25. nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

find

按照指定条件来查找文件
find [查找路径] 寻找条件 操作
find命令中的参数以及作用

参数 作用
-name 匹配名称
-perm 匹配权限(mode为完全匹配,-mode为包含即可)
-user
匹配所有者
-group 匹配所有组
-mtime

-n +n | 匹配修改内容的时间(-n指n天以内,+n指n天以前) | | -atime -n +n | 匹配访问文件的时间(-n指n天以内,+n指n天以前) | | -ctime -n +n | 匹配修改文件权限的时间(-n指n天以内,+n指n天以前) | | -nouser | 匹配无所有者的文件 | | -nogroup | 匹配无所有组的文件 | | -newer f1 !f2 | 匹配比文件f1新但比f2旧的文件 | | —type b/d/c/p/l/f | 匹配文件类型(后面的字母参数依次表示块设备、目录、字符设备、管道、链接文件、文本文件) | | -size | 匹配文件的大小(+50KB为查找超过50KB的文件,而-50KB为查找小于50KB的文件) | | -prune | 忽略某个目录 | | -exec …… {}\; | 后面可跟用于进一步处理搜索结果的命令 |

  1. [root@node-1 ~]# find /etc -name "host*"
  2. /etc/host.conf
  3. /etc/hosts
  4. /etc/hosts.allow
  5. /etc/hosts.deny
  6. /etc/selinux/targeted/active/modules/100/hostname
  7. /etc/hostname
  8. [root@node-1 ~]# find /etc -name "hosts" -exec cp -a {} ./ \;
  9. [root@node-1 ~]# ls
  10. hosts