一、强大好用的shell
shell中充当的是人与内核(硬件)之间的翻译官,用户把一些命令告诉终端,它就会调用相应的服务区完成某些工作。
许多Linux系统默认使用的终端是Bash(Bourne-Again SHell)解释器,主要有以下四项优势
- 通过上下键来调取过往执行的Linux命令;
- 命令或参数仅需要输入前几位就可以用tab补全;
- 具有强大的批处理脚本;
- 具有实用的环境变量功能。
二、执行查看帮助命令
Linux系统中已经有了Bash这么好用的“翻译官”,那么接下来就有必要好好学习下怎么跟它沟通了。要想准确、高效地完成各种任务,仅依赖于命令本身是不够的,还应该根据实际情况来灵活调整各种命令的参数。比如,我们切寿司时尽管可以用菜刀,但米粒一定会撒得满地都是,因此寿司刀上设计的用于透气的圆孔就是为了更好地适应场景而额外增加的参数。当您学完本书并具备一定的工作经验之后,一定能够领悟Linux命令的奥秘。常见执行Linux命令的格式是这样的:
命令名称 [命令参数] [命令对象]
注意,命令名称、命令参数、命令对象之间请用空格键分隔
例如:在命令行终端中输入man man命令来查看man命令自身的帮助信息
在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 |
维护历史与联系方式 |
三、常用系统工作命令
1、echo命令
echo命令用于在终端输出字符串或变量提取后的值,格式为“echo [字符串 | $变量]”。
例如,把指定字符串“Linuxprobe.com”输出到终端屏幕的命令为:
[root@linuxprobe ~]# echo Linuxprobe.Com
该命令会在终端屏幕上显示如下信息:
Linuxprobe.Com
使用$变量的方式提取变量SHELL的值,并将其输出到屏幕上:
[root@linuxprobe ~]# echo $SHELL
/bin/bash
2、date命令
date命令用于显示及设置系统的时间或日期,格式为“date [选项] [+指定的格式]”。
date命令中常见的参数格式如下表
参数 |
作用 |
%t |
跳格[Tab键] |
%H |
小时(00~23) |
%I |
小时(00~12) |
%M |
分钟(00~59) |
%S |
秒(00~59) |
%j |
今年中的第几天 |
下面举例说明:
3、reboot命令
reboot命令用于重启系统,其格式为reboot。
由于重启计算机这种操作会涉及硬件资源的管理权限,因此默认只能使用root管理员来重启。
4、poweroff命令
poweroff命令用于关闭系统,其格式为poweroff。
该命令与reboot命令相同,都会涉及硬件资源的管理权限,因此默认只有root管理员才可以关闭电脑。
5、wget命令
wget命令用于在终端中下载网络文件,格式为“wget [参数] 下载地址”。
参数及作用如下表
参数 |
作用 |
-b |
后台下载模式 |
-P |
下载到指定目录 |
-t |
最大尝试次数 |
-c |
断点续传 |
-p |
下载页面内所有资源,包括图片、视频等 |
-r |
递归下载 |
6、ps命令
ps命令用于查看系统中的进程状态,格式为“ps [参数]”。
ps命令的常见参数以及作用如下表
参数 |
作用 |
-a |
显示所有进程(包括其他用户的进程) |
-u |
用户以及其他详细信息 |
-x |
显示没有控制终端的进程 |
Linux系统中时刻运行着许多进程,如果能够合理地管理它们,则可以优化系统的性能。
在Linux系统中,有5种常见的进程状态,分别为运行、中断、不可中断、僵死与停止,其各自含义如下所示。
- R(运行):进程正在运行或在运行队列中等待。
- S(中断):进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该 状态。
- D(不可中断):进程不响应系统异步信号,即便用kill命令也不能将其中断。
- Z(僵死):进程已经终止,但进程描述符依然存在, 直到父进程调用wait4()系统函数后将进程释放。
- T(停止):进程收到停止信号后停止运行。
当执行ps aux命令后通常会看到如下图所示的进程状态(太多了只截取部分)
7、top命令
top命令用于动态地监视进程活动与系统负载等信息,其格式为top。
top命令相当强大,能够动态地查看系统运维状态,完全将它看作Linux中的“强化版的Windows任务管理器”。
top命令的运行界面如图
8、pidof命令
pidof命令用于查询某个指定服务进程的PID值,格式为“pidof [参数] [服务名称]”。
每个进程的进程号码值(PID)是唯一的,因此可以通过PID来区分不同的进程。
例如,可以使用如下命令来查询本机上sshd服务程序的PID
9、kill命令
kill命令用于终止某个指定PID的服务进程,格式为“kill [参数] [进程PID]”。
使用kill命令把上面用pidof命令查询到的PID所代表的进程终止掉。
例如:kill 1593 这种操作的效果等同于强制停止sshd服务
10、killall命令
killall命令用于终止某个指定名称的服务所对应的全部进程,格式为:“killall [参数] [服务名称]”。
通常来讲,复杂软件的服务程序会有多个进程协同为用户提供服务,如果逐个去结束这些进程会比较麻烦,
此时可以使用killall命令来批量结束某个服务程序带有的全部进程。例如:killall httpd
四、系统状态检测命令
1、ifconfig命令
ifconfig命令用于获取网卡配置与网络状态等信息,格式为“ifconfig [网络设备] [参数]”。
使用ifconfig命令来查看本机当前的网卡配置与网络状态等信息时,其实主要查看的就是:
网卡名称、inet参数后面的IP地址、ether参数后面的网卡物理地址(又称为MAC地址),
以及RX、TX的接收数据包与发送数据包的个数及累计流量
2、uname命令
uname命令用于查看系统内核与系统版本等信息,格式为“uname [-a]”。
在使用uname命令时,一般会固定搭配上-a参数来完整地查看:
当前系统的内核名称、主机名、内核发行版本、节点名、系统时间、硬件名称、硬件平台、处理器类型以及操作系统名称等信息。
3、uptime命令
uptime用于查看系统的负载信息,格式为uptime。
uptime命令可以显示当前系统时间、系统已运行时间、启用终端数量以及平均负载值等信息。
平均负载值指的是系统在最近1分钟、5分钟、15分钟内的压力情况(下面加粗的信息部分);
负载值越低越好,尽量不要长期超过1,在生产环境中不要超过5。
4、free命令
free用于显示当前系统中内存的使用量信息,格式为“free [-h]”。
为了保证Linux系统不会因资源耗尽而突然宕机,运维人员需要时刻关注内存的使用量。
在使用free命令时,可以结合使用-h参数以更人性化的方式输出当前内存的实时使用量信息。
下图是执行free -h命令之后的输出信息。
5、who命令
who用于查看当前登入主机的用户终端信息,格式为“who [参数]”。
这三个简单的字母可以快速显示出所有正在登录本机的用户的名称以及他们正在开启的终端信息。
6、last命令
last命令用于查看所有系统的登录记录,格式为“last [参数]”。
使用last命令可以查看本机的登录记录。但是,由于这些信息都是以日志文件的形式保存在系统中,因此黑客可以很容易地对内容进行篡改。
千万不要单纯以该命令的输出信息而判断系统有无被恶意入侵!
7、history命令
history命令用于显示历史执行过的命令,格式为“history [-c]”。
history命令应该是作者最喜欢的命令。执行history命令能显示出当前用户在本地计算机中执行过的最近1000条命令记录。
如果觉得1000不够用,还可以自定义/etc/profile文件中的HISTSIZE变量值。
在使用history命令时,如果使用-c参数则会清空所有的命令历史记录。
还可以使用“!编码数字”的方式来重复执行某一次的命令。例如想执行第242条命令,只需输入!242
8、sosreport命令
sosreport命令用于收集系统配置及架构信息并输出诊断文档,格式为sosreport。
五、工作目录切换命令
1、pwd命令
pwd命令用于显示用户当前所处的工作目录,格式为“pwd [选项]”。
2、cd命令
cd命令用于切换工作路径,格式为“cd [目录名称]”。
可以通过cd命令迅速、灵活地切换到不同的工作目录。
除了常见的切换目录方式,还可以使用“cd -”命令返回到上一次所处的目录;
使用“cd..”命令进入上级目录,以及使用“cd ~”命令切换到当前用户的家目录;
亦或使用“cd ~username”切换到其他用户的家目录。
3、ls命令
ls命令用于显示目录中的文件信息,格式为“ls [选项] [文件] ”。
所处的工作目录不同,当前工作目录下的文件肯定也不同。
使用ls命令的“-a”参数看到全部文件(包括隐藏文件),使用“-l”参数可以查看文件的属性、大小等详细信息。
六、文本文件编辑命令
1、cat命令
cat命令用于查看纯文本文件(内容较少的),格式为“cat [选项] [文件]”。
如果在查看文本内容时还想顺便显示行号的话,在cat命令后面追加一个-n参数。
例如:cat -n vsftpd.conf
2、more命令
more命令用于查看纯文本文件(内容较多的),格式为“more [选项]文件”。
3、head命令
head命令用于查看纯文本文档的前N行,格式为“head [选项] [文件]”。
在阅读文本内容时,如果只想查看文本中前20行的内容。输入head -n 20 vsftpd.conf
4、tail命令
tail命令用于查看纯文本文档的后N行或持续刷新内容,格式为“tail [选项] [文件]”。
比如需要查看文本内容的最后20行,只需要执行“tail -n 20 文件名”命令就可以达到这样的效果。
tail命令最强悍的功能是可以持续刷新一个文件的内容,当想要实时查看最新日志文件时,这特别有用,此时的命令格式为“tail -f 文件名”
5、tr命令
tr命令用于替换文本文件中的字符,格式为“tr [原始字符] [目标字符]”。
在很多时候,我们想要快速地替换文本中的一些词汇,又或者把整个文本内容都进行替换,
如果进行手工替换,难免工作量太大,尤其是需要处理大批量的内容时,进行手工替换更是不现实。
例如,把某个文本内容中的英文全部替换为大写
cat anaconda-ks.cfg | tr [a-z] [A-Z]
6、wc命令
wc命令用于统计指定文本的行数、字数、字节数,格式为“wc [参数] 文本”。
wc的参数及作用如下:
参数 |
作用 |
-l |
只显示行数 |
-w |
只显示单词数 |
-c |
只显示字节数 |
7、stat命令
stat命令用于查看文件的具体存储信息和时间等信息,格式为“stat 文件名称”。
stat命令可以用于查看文件的存储信息和时间等信息,命令stat vsftpd.conf会显示出文件的三种时间状态。
8、cut命令
cut命令用于按“列”提取文本字符,格式为“cut [参数] 文本”。
在Linux系统中,如何准确地提取出最想要的数据,这也是我们应该重点学习的内容。
一般而言,按基于“行”的方式来提取数据是比较简单的,只需要设置好要搜索的关键词即可。
但是如果按列搜索,不仅要使用-f参数来设置需要看的列数,还需要使用-d参数来设置间隔符号。
passwd在保存用户数据信息时,用户信息的每一项值之间是采用冒号来间隔的。
接下来使用下述命令尝试提取出passwd文件中的用户名信息,即提取以冒号(:)为间隔符号的第一列内容:
cut -d: -f1 /etc/passwd
9、diff命令
diff命令用于比较多个文本文件的差异,格式为“diff [参数] 文件”。
在使用diff命令时,不仅可以使用--brief参数来确认两个文件是否不同,还可以使用-c参数来详细比较出多个文件的差异之处。
例如,先使用cat命令分别查看diff_A.txt和diff_B.txt文件的内容,然后进行比较:
cat diff_A.txt
cat diff_B.txt
接下来使用diff --brief命令显示比较后的结果,判断文件是否相同。
diff --brief diff_A.txt diff_B.txt
最后使用带有-c参数的diff命令来描述文件内容具体的不同:
diff -c diff_A.txt diff_B.txt
七、文件目录管理命令
1、touch命令
touch命令用于创建空白文件或设置文件的时间,格式为“touch [选项] [文件]”。
在创建空白的文本文件方面,这个touch命令相当简捷。
比如,touch linuxprobe命令可以创建出一个名为linuxprobe的空白文本文件。
有难度的操作主要是体现在设置文件内容的修改时间(mtime)、文件权限或属性的更改时间(ctime)与文件的读取时间(atime)上面。
touch命令的参数及其作用如下:
参数 |
作用 |
-a |
仅修改“读取时间”(atime) |
-m |
仅修改“修改时间”(mtime) |
-d |
同时修改atime与mtime |
2、mkdir命令
mkdir命令用于创建空白的目录,格式为“mkdir [选项] 目录”。
在Linux系统中,文件夹是最常见的文件类型之一。
除了能创建单个空白目录外,mkdir命令还可以结合-p参数来递归创建出具有嵌套叠层关系的文件目录。
3、cp命令
cp命令用于复制文件或目录,格式为“cp [选项] 源文件 目标文件”。
在Linux系统中,复制操作具体分为3种情况:
- 如果目标文件是目录,则会把源文件复制到该目录中;
- 如果目标文件也是普通文件,则会询问是否要覆盖它;
- 如果目标文件不存在,则执行正常的复制操作。
cp命令的参数及其作用如下表所示:
参数 |
作用 |
-p |
保留原始文件的属性 |
-d |
若对象为“链接文件”,则保留该“链接文件”的属性 |
-r |
递归持续复制(用于目录) |
-i |
若目标文件存在则询问是否覆盖 |
-a |
相当于-pdr(p、d、r为上述参数) |
4、mv命令
mv命令用于剪切文件或将文件重命名,格式为“mv [选项] 源文件 [目标路径|目标文件名]”。
剪切操作不同于复制操作,因为它会默认把源文件删除掉,只保留剪切后的文件。
如果在同一个目录中对一个文件进行剪切操作,其实也就是对其进行重命名。
5、rm命令
rm命令用于删除文件或目录,格式为“rm [选项] 文件”。
在Linux系统中删除文件时,系统会默认向您询问是否要执行删除操作,如果不想总是看到这种反复的确认信息,可在rm命令后跟上-f参数来强制删除。
另外,想要删除一个目录,需要在rm命令后面一个-r参数才可以,否则删除不掉。
6、dd命令
dd命令用于按照指定大小和个数的数据块来复制文件或转换文件,格式为“dd [参数]”。
dd命令是一个比较重要而且比较有特色的一个命令,它能够让用户按照指定大小和个数的数据块来复制文件的内容。
Linux系统中有一个名为/dev/zero的设备文件。这个文件不会占用系统存储空间,但却可以提供无穷无尽的数据。
因此可以使用它作为dd命令的输入文件,来生成一个指定大小的文件。
dd命令的参数及其作用如下所示:
参数 |
作用 |
if |
输入的文件名称 |
of |
输出的文件名称 |
bs |
设置每个“块”的大小 |
count |
设置要复制“块”的个数 |
例如我们可以用dd命令从/dev/zero设备文件中取出一个大小为560MB的数据块,然后保存成名为560_file的文件。
dd if=/dev/zero of=560_file count=1 bs=560M
7、file命令
file命令用于查看文件的类型,格式为“file 文件名”。
在Linux系统中,由于文本、目录、设备等所有这些一切都统称为文件,不知道具体的文件类型,这时就需要使用file命令来查看文件类型。
八、打包压缩与搜索命令
1、tar命令
tar命令用于对文件进行打包压缩或解压,格式为“tar [选项] [文件]”。
在Linux系统中,常见的文件格式比较多,其中主要使用的是.tar或.tar.gz或.tar.bz2格式。
参数及作用如下表:
参数 |
作用 |
-c |
创建压缩文件 |
-x |
解开压缩文件 |
-t |
查看压缩包内有哪些文件 |
-z |
用Gzip压缩或解压 |
-j |
用bzip2压缩或解压 |
-v |
显示压缩或解压的过程 |
-f |
目标文件名 |
-p |
保留原始的权限与属性 |
-P |
使用绝对路径来压缩 |
-C |
指定解压到的目录 |
2、grep命令
grep命令用于在文本中执行关键词搜索,并显示匹配的结果,格式为“grep [选项] [文件]”。
grep命令的参数及其作用如下表所示:
参数 |
作用 |
-b |
将可执行文件(binary)当作文本文件(text)来搜索 |
-c |
仅显示找到的行数 |
-i |
忽略大小写 |
-n |
显示行号 |
-v |
反向选择—仅列出没有“关键词”的行 |
3、find命令
find命令用于按照指定条件来查找文件,格式为“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 …… {}\; |
后面可跟用于进一步处理搜索结果的命令(下文会有演示)
|