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.noarchecho "alias cman='man -M /usr/share/man/zh_CN'" >> .bashrcsource .bashrc
系统工作命令
echo
在终端输出字符串或变量提取后的值echo [字符串|$变量]
date
显示及设置系统的时间或日期date [选项] ["+指定的格式"]
date命令中的参数以及作用
| 参数 | 作用 |
|---|---|
| %t | 跳格[Tab键] |
| %H | 小时(00~23) |
| %I | 小时(00~12) |
| %M | 分钟(00~59) |
| %S | 秒(00~59) |
| %j | 今年中的第几天 |
[root@localhost ~]# date2019年 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 sshd7401 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/passwd28 /etc/passwd
stat
查看文件的具体存储信息和时间等信息stat 文件名
命令stat anaconda-ks.cfg会显示出文件的三种时间状态:Access、Modify、Change。
[root@node-1 ~]# stat anaconda-ks.cfgFile: ‘anaconda-ks.cfg’Size: 1369 Blocks: 8 IO Block: 4096 regular fileDevice: fd00h/64768d Inode: 100732215 Links: 1Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)Context: system_u:object_r:admin_home_t:s0Access: 2019-04-09 05:28:11.892639642 -0400Modify: 2019-04-09 05:26:58.816607340 -0400Change: 2019-04-09 05:26:58.817607367 -0400Birth: -
cut
用于按“列”提取文本字符
cut [参数] 文本
| 参数 | 作用 |
|---|---|
| -d | 设置间隔符号 |
| -f | 设置间隔出来的列数 |
[root@node-1 ~]# cut -d: -f1 /etc/passwdrootbindaemonadmlpsyncshutdownhaltoperatorgamesftpnobodysystemd-networkdbuspolkitdpostfixchronysshdunboundrpcqemuglustersaslauthradvdtssrpcusernfsnobody
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 ****chronykexec-tools%end%addon com_redhat_kdump --enable --reserve-mb='auto'%end!%anacondapwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notemptypwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok--- 35,47 ----chronykexec-tools+ 12345678%end%addon com_redhat_kdump --enable --reserve-mb='auto'%end! qwerty%anacondapwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notemptypwpolicy 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.cfganaconda-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.cfganaconda-ks.cfg[root@node-1 ~]# lsanaconda-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/passwdbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinmail:x:8:12:mail:/var/spool/mail:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologingames:x:12:100:games:/usr/games:/sbin/nologinftp:x:14:50:FTP User:/var/ftp:/sbin/nologinnobody:x:99:99:Nobody:/:/sbin/nologinsystemd-network:x:192:192:systemd Network Management:/:/sbin/nologindbus:x:81:81:System message bus:/:/sbin/nologinpolkitd:x:999:997:User for polkitd:/:/sbin/nologinpostfix:x:89:89::/var/spool/postfix:/sbin/nologinchrony:x:998:996::/var/lib/chrony:/sbin/nologinsshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologinunbound:x:997:995:Unbound DNS resolver:/etc/unbound:/sbin/nologinrpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologinqemu:x:107:107:qemu user:/:/sbin/nologingluster:x:996:994:GlusterFS daemons:/run/gluster:/sbin/nologinsaslauth:x:995:76:Saslauthd user:/run/saslauthd:/sbin/nologinradvd:x:75:75:radvd user:/:/sbin/nologintss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologinrpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologinnfsnobody: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 ~]# lshosts
