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手册(不推荐)
yum -y install man-pages-zh-CN.noarch
echo "alias cman='man -M /usr/share/man/zh_CN'" >> .bashrc
source .bashrc
系统工作命令
echo
在终端输出字符串或变量提取后的值echo [字符串|$变量]
date
显示及设置系统的时间或日期date [选项] ["+指定的格式"]
date命令中的参数以及作用
参数 | 作用 |
---|---|
%t | 跳格[Tab键] |
%H | 小时(00~23) |
%I | 小时(00~12) |
%M | 分钟(00~59) |
%S | 秒(00~59) |
%j | 今年中的第几天 |
[root@localhost ~]# date
2019年 04月 09日 星期二 10:54:16 CST
[root@localhost ~]# date "+%Y-%m-%d %H:%M:%S"
2019-04-09 10:54:47
[root@localhost ~]# date -s "20190409 10:55:00"
2019年 04月 09日 星期二 10:55:00 CST
[root@localhost ~]# date "+%j"
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 [参数] [服务名称]
[root@localhost ~]# pidof sshd
7401 6798
kill
终止某个指定PID的服务进程kill [参数] [进程ID]
killall
终止某个指定名称的服务所对应的全部进程killall [参数] [服务名称]
小提示:
如果我们在系统终端中执行一个命令后想立即停止它,可以同时按下Ctrl + C组合键(生产环境中比较常用的一个快捷键),这样将立即终止该命令的进程。或者,如果有些命令在执行时不断地在屏幕上输出信息,影响到后续命令的输入,则可以在执行命令时在末尾添加上一个&符号,这样命令将进入系统后台来执行。
系统状态检测命令
ifconfig
获取网卡配置与网络状态等信息ifconfig [网络设备] [参数]
uname
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
history
显示历史执行过的命令history [-c]
执行history命令能显示出当前用户在本地计算机中执行过的最近1000条命令记录。如果觉得1000不够用,还可以自定义/etc/profile文件中的HISTSIZE变量值。在使用history命令时,如果使用-c参数则会清空所有的命令历史记录。还可以使用“!编码数字”的方式来重复执行某一次的命令。
sosreport
工作目录切换命令
pwd
cd
用于切换工作路径
[root@node-1 ~]# cd ~ \\进入用户家目录
[root@node-1 ~]# cd - \\进入上次的目录,并且显示上次目录路径
/root
[root@node-1 ~]# cd .. \\进入上一层目录
[root@node-1 /]# cd . \\进入当前目录
ls
显示目录中的文件信息ls [选项] [文件]
参数 | 作用 |
---|---|
-a | 看到全部文件(包括隐藏文件) |
-l | 查看文件的属性、大小等详细信息 |
—color | 用颜色区分文件类型 |
-d | 查看当前文件夹的属性 |
文本文件编辑命令
cat
more
head
tail
查看纯文本文档的后N行或持续刷新内容tail [选项] [文件]
tr
替换文本文件中的字符tr [原始字符] [目标字符]
[root@node-1 ~]# cat anaconda-ks.cfg | tr [a-z] [A-Z] \\把这个文件中的小写都变成大写输出
wc
统计指定文本的行数、字数、字节数wc [参数] [文本]
wc的参数以及作用
参数 | 作用 |
---|---|
-l | 只显示行数 |
-w | 只显示单词数 |
-c | 只显示字节数 |
[root@node-1 ~]# wc -l /etc/passwd
28 /etc/passwd
stat
查看文件的具体存储信息和时间等信息stat 文件名
命令stat anaconda-ks.cfg会显示出文件的三种时间状态:Access、Modify、Change。
[root@node-1 ~]# stat anaconda-ks.cfg
File: ‘anaconda-ks.cfg’
Size: 1369 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 100732215 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:admin_home_t:s0
Access: 2019-04-09 05:28:11.892639642 -0400
Modify: 2019-04-09 05:26:58.816607340 -0400
Change: 2019-04-09 05:26:58.817607367 -0400
Birth: -
cut
用于按“列”提取文本字符
cut [参数] 文本
参数 | 作用 |
---|---|
-d | 设置间隔符号 |
-f | 设置间隔出来的列数 |
[root@node-1 ~]# cut -d: -f1 /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
operator
games
ftp
nobody
systemd-network
dbus
polkitd
postfix
chrony
sshd
unbound
rpc
qemu
gluster
saslauth
radvd
tss
rpcuser
nfsnobody
diff
比较多个文本文件的差异diff [参数] 文件
[root@node-1 ~]# diff -c diff_a.txt diff_b.txt
*** diff_a.txt 2019-04-09 06:42:59.999351187 -0400
--- diff_b.txt 2019-04-09 06:43:34.211301903 -0400
***************
*** 35,46 ****
chrony
kexec-tools
%end
%addon com_redhat_kdump --enable --reserve-mb='auto'
%end
!
%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
--- 35,47 ----
chrony
kexec-tools
+ 12345678
%end
%addon com_redhat_kdump --enable --reserve-mb='auto'
%end
! qwerty
%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
文件目录管理命令
touch
创建空白文件或设置文件的时间touch [选项] [文件]
touch命令的参数及其作用
参数 | 作用 |
---|---|
-a | 仅修改“读取时间”(atime) |
-m | 仅修改“修改时间”(mtime) |
-d | 同时修改atime与mtime |
[root@node-1 ~]# ls -l anaconda-ks.cfg
-rw-------. 1 root root 1369 Apr 9 05:26 anaconda-ks.cfg
[root@node-1 ~]# echo hello >> anaconda-ks.cfg
[root@node-1 ~]# ls -l anaconda-ks.cfg
-rw-------. 1 root root 1375 Apr 9 07:23 anaconda-ks.cfg
[root@node-1 ~]# touch -d "20190409 05:26" anaconda-ks.cfg
[root@node-1 ~]# ls -l anaconda-ks.cfg
-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
dd
按照指定大小和个数的数据块来复制文件或转换文件dd [参数]
Linux系统中有一个名为 /dev/zero
的设备文件,每次在课堂上解释它时都充满哲学理论的色彩。因为这个文件不会占用系统存储空间,因此可以使用它作为dd命令的输入文件,来生成一个指定大小的文件。
dd命令的参数及其作用
参数 | 作用 |
---|---|
if | 输入的文件名称 |
of | 输出的文件名称 |
bs | 设置每个“块”的大小 |
count | 设置要复制“块”的个数 |
[root@node-1 ~]# dd if /dev/zero of=560_file count=1 bs=560M
[root@node-1 ~]# dd if=/dev/cdrom of=Centos7.iso
file
查看文件的类型file 文件名
[root@node-1 ~]# file anaconda-ks.cfg
anaconda-ks.cfg: ASCII text
[root@node-1 ~]# file /dev/sda
/dev/sda: block special
打包压缩与搜索命令
tar
对文件进行打包压缩或解压tar [选项] [文件]
参数 | 作用 |
---|---|
-c | 创建压缩文件 |
-x | 解开压缩文件 |
-t | 查看压缩包内有哪些文件 |
-z | 用Gzip压缩或解压 |
-j | 用bzip2压缩或解压,压缩率比Gzip高一些 |
-v | 显示压缩或解压的过程 |
-f | 目标文件名 |
-p | 保留原始的权限与属性 |
-P | 使用绝对路径来压缩 |
-C | 指定解压到的目录 |
[root@node-1 ~]# tar -czvf root.tar.gz anaconda-ks.cfg
anaconda-ks.cfg
[root@node-1 ~]# ls
anaconda-ks.cfg root.tar.gz
[root@node-1 ~]# mkdir test
[root@node-1 ~]# tar -xzvf root.tar.gz -C test/
anaconda-ks.cfg
[root@node-1 ~]# ls test/
anaconda-ks.cfg
grep
在文本中执行关键词搜索grep [选项] [文件]
grep命令的参数及其作用
参数 | 作用 |
---|---|
-b | 将可执行文件(binary)当作文本文件(text)来搜索 |
-c | 仅显示找到的行数 |
-i | 忽略大小写 |
-n | 显示行号 |
-v | 反向选择—仅列出没有“关键词”的行 |
[root@node-1 ~]# grep /sbin/nologin /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
unbound:x:997:995:Unbound DNS resolver:/etc/unbound:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
gluster:x:996:994:GlusterFS daemons:/run/gluster:/sbin/nologin
saslauth:x:995:76:Saslauthd user:/run/saslauthd:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
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 …… {}\; | 后面可跟用于进一步处理搜索结果的命令 |
[root@node-1 ~]# find /etc -name "host*"
/etc/host.conf
/etc/hosts
/etc/hosts.allow
/etc/hosts.deny
/etc/selinux/targeted/active/modules/100/hostname
/etc/hostname
[root@node-1 ~]# find /etc -name "hosts" -exec cp -a {} ./ \;
[root@node-1 ~]# ls
hosts