0x01 强大好用的shell
计算机硬件是由运算器、控制器、存储器、输入/输出设备等共同组成的,而让各种硬件设备各司其职且又能协同运行的东西就是系统内核。Linux系统的内核负责完成对硬件资源的分配、调度等管理任务。
Bash解释器的四大优势:
1.通过上下方向键来调取过往执行过的Linux命令;
2.命令或参数仅需输入前几位就可以用Tab键来补全;
3.具有强大的批处理脚本;
4.具有实用的环境变量功能。
0x02 执行查看帮助命令
在Linux中,不清楚某个命令的具体用法,man一下即可。当然也可以用man man来查看man命令的使用方法。
0x03 常用系统工作命令
1.echo命令
简单的输出命令,例如echo hello world或者echo $SHELL
2.date命令
date命令用于显示及设置系统的时间或日期,格式为“date [选项] [+指定的格式]”。
date “+%Y-%m-%d %H:%M:%S”
输出为
2020-01-23 14:50:48
又或者可以使用
date -s "20200123 8:30:00"
来设置自己想要的时间。而date “+%j”则可以知道今天是这一年的第几天。
3.reboot命令
用于重启系统,其格式为reboot。
该命令的执行默认需要管理员权限才能执行,因为重启计算机会涉及硬件资源的管理权限。
4.poweroff命令
用于关闭系统,其格式为poweroff。
该命令同样需要管理员权限,原因和reboot一样。
5.wget命令
用于在终端中下载网络文件,格式为“wget [参数] 下载地址”。
参数如下:
-b:后台下载模式
-P:下载到指定目录
-t:最大尝试次数
-c:断点续传
-p:下载页面内所有资源,包括图片、视频等。
-r:递归下载。
6.ps命令
用于查看系统中的进程状态,格式为“ps [参数]”
参数如下:
-a:显示所有进程
-u:用户以及其他详细信息
-x:显示没有控制终端
在Linux系统中,进程有5种状态,分别为运行、中断、不可中断、僵死与停止。
运行(R):进程正在运行或在运行队列中等待。
中断(S):进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该状态。
不可中断(D):进程不响应系统异步信号,即便用kill命令也不能将其中断。
僵死(Z):进程已经终止,但进程描述符依然存在,直到父进程调用wait4()系统函数后将进程释放。
停止(T):进程收到停止信号后停止运行。
7.top命令
用于动态地监视进程活动与系统负载等信息,其格式为top。
8.pidof命令
用于查询某个指定服务进程的PID值,格式为“pidof [参数] [服务名称]”。
每个进程的PID值是唯一的,所以可以通过PID值来区分不同的进程。
9.kill命令
用于终止某个指定PID的服务进程,格式为“kill [参数] [进程PID]”。
10.killall命令
用于终止某个指定名称的服务所对应的全部进程,格式为“killall [参数] [进程名称]”。
注:在实际环境中,某些命令会不断地往终端屏幕上输出信息,从而影响后续命令的输入。可以在执行命令时,在末尾 加上一个&符号,命令就会进入系统后台运行。
0x04 系统状态检测命令
1.ifconfig命令
用于获取网卡配置与网络状态等信息,格式为“ifconfig [网络设备] [参数]”
2.uname命令
用于查看系统内核与系统版本等信息,格式为“uname [-a]”
注:使用uname命令一般会搭配上-a参数来完整地查看当前系统的内核名称、主机名、内核发行版本、节点名、系统时间、硬件名称、硬件平台、处理器类型以及操作系统名称等信息。另外就是,如果需要查看当前系统版本的详细信息,则可以通过查看redhat-release文件。
cat /etc/redhat-release
3.uptime命令
用于查看系统的负载信息,格式为uptime。
4.free命令
用于显示当前系统中内存的使用量信息,格式为“free [-h]”
5.who命令
用于查看当前登入主机的用户终端信息,格式为“who [参数]”
6.last命令
用于查看所有系统的登录记录,格式为“last [参数]”
这些登录记录是以日志文件的形式保存在系统中的,因此黑客可以很轻易就对内容进行修改。
7.history命令
用于显示历史执行过的命令,格式“history [-c]”
注:history默认显示当前用户在本地计算机中执行过的1000条命令,如果觉得1000条不够,可以去修改/etc/profile文件中的HISTSIZE变量值。而history -c则会清空当前用户在本地计算机执行的Linux命令历史记录信息。而Linux命令的历史记录保存在home目录中的.bash_history文件中,带.点的文件都是隐藏文件,所有可以通过cat命令来查看。
8.sosreport命令
用于收集系统配置及架构信息并输出诊断文档,格式为“sosreport”
0x05 工作目录切换命令
工作目录指的是用户当前在系统中所处的位置。
1.pwd命令
用于显示用户当前所处的工作目录,格式为“pwd [选项]”
2.cd命令
用于切换工作路径,格式为“cd [目录名称]”
注:“cd -”返回到上一次所处的目录。“cd..”进入上级目录。“cd ~”切换到当前用户的home目录。“cd ~username”切换到其他用户的home目录。
3.ls命令
用于显示目录中的文件信息,格式为“ls [选项] [文件]”,一般使用ls或者ls -al就可以了。
参数:
-a:查看全部文件(包括隐藏文件)
-l:查看文件的属性、大小等详细信息
-d:查看目录属性信息
例:查看/etc目录的权限和属性信息
ls -ld /etc
0x06 文本文件编辑命令
1.cat命令
用于查看纯文本文件(内容较少的文件),格式为“cat [选项] [文件]”。如果想要在查看文件的时候顺便显示行号,可以使用-n参数。
2.more命令
用于查看纯文本文件(内容较多的文件),格式为“more [选项] 文件”。如果使用了more命令,可以使用空格或回车键进行向下翻页。
3.head命令
用于查看纯文本文档的前N行,格式为“head [选项] [文件]”
例:查看文件内容的前20行
head -n 20 文件名
4.tail命令
用于查看纯文本文档的后N行或持续刷新内容,格式为“tail [选项] [文件]”。使用方法和head基本一样,只是tail命令是查看后N行的。
注:tail命令最强悍的功能是可以持续刷新一个文件的内容,当想要实时查看最新日志文件时,使用“tail -f 文件名”。
5.tr命令
用于替换文本文件中的字符,格式为“tr [原始字符] [目标字符]”
例:将某个文本内容中的英文全部替换为大写
cat 文件名 | tr [a-z] [A-Z]
6.wc命令
用于统计指定文本的行数、字数、字节数,格式为“wc [参数] 文本”
参数:
-l:只显示行数
-w:只显示单词数
-c:只显示字节数
例:统计passwd文件中有多少个用户
wc -l /etc/passwd
7.stat命令
用于查看文件的具体存储信息和时间等信息,格式为“stat 文件名称”
8.cut命令
用于按“列”提取文本字符,格式为“cut [参数] 文本”
例:提取passwd文件按以冒号(:)为间隔符号的第一列内容
cut -d: -f1 /etc/passwd
9.diff命令
用于比较多个文本文件的差异,格式为“diff [参数] 文件”
参数:
--brief:显示比较后的结果,判断文件是否相同
-c:显示文件内容的具体不同
0x07 文件目录管理命令
1.touch命令
用于创建空白文件或设置文件的时间,格式为“touch [选项] [文件]”
简单的touch linux,便可以创建一个名为linux的空白文件。
参数:
-a:仅修改“读取时间”(atime)
-m:仅修改“修改时间”(mtime)
-d:同时修改atime与mtime
2.mkdir命令
用于创建空白的目录,格式为“mkdir [选项] 目录”
mkdir linux便可以创建一个名为linux的目录。
使用参数-p还能创建出具有嵌套叠层关系的文件目录
例如mkdir -p a/b/c/d/e
3.cp命令
用于复制文件或目录,格式为“cp [选项] 源文件 目标文件”
复制操作有三种情况:
a.如果目标文件是目录,则会把源文件复制到该目录
b.如果目标文件也是普通文件,则会询问是否要覆盖它
c.如果目标文件不存在,则会执行正常的复制操作
参数:
-p:保留原始文件的属性
-d:若对象为“链接文件”,则保留该“链接文件”的属性
-r:递归持续复制(用于目录)
-i:若目标文件存在则询问是否覆盖
-a:相当于-pdr
4.mv命令
用于剪切文件或将文件重命名,格式为“mv [选项] 源文件 [目标路径|目标文件名]”
mv命令默认会将源文件进行删除。
5.rm命令
用于删除文件或目录,格式为“rm [选项] 文件”
我一般使用的是rm -rf 文件名。真的美滋滋。
6.dd命令
用于按照指定大小和个数的数据块来复制文件或转换文件,格式为“dd [参数]”
参数:
if:输入的文件名称
of:输出的文件名称
bs:设置每个“块”的大小
count:设置要复制“块”的个数
7.file命令
用于查看文件的类型,格式为“file 文件名”
0x08 打包压缩与搜索命令
1.tar命令
用于对文件进行打包压缩或解压,格式为“tar [选项] [文件]”
参数:
-c:创建压缩文件
-x:解开压缩文件
-t:查看压缩包内有哪些文件
-z:用Gzip压缩或解压
-j:用bzip2压缩或解压
-v:显示压缩或解压的过程
-f:目标文件名
-p:保留原始的权限与属性
-P:使用绝对路径来压缩
-C:指定解压到的目录
2.grep命令
用于在文本中执行关键词搜索,并显示匹配的结果,格式为“grep [选项] [文件]”
参数:
-b:将可执行文件(binary)当作文本文件(text)来搜索
-c:仅显示找到的行数
-i:忽略大小写
-n:显示行号
-v:反向选择--仅列出没有“关键词”的行
注:其他的参数在以后如果使用到,可以使用man grep来进行查询。
3.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 ......{} ;:后面可跟用于进一步处理搜索结果的命令
注:如果需要搜索权限中包括SUID权限的所有文件,只需要在-perm后面跟一个-4000即可。
需要了解的问题:
1.在RHEL7系统及众多的Linux系统中,最常使用的Shell终端是什么?
答:Bash(Bourne-Again SHell)解释器。
2.执行Linux系统命令时,添加参数的目的是什么?
答:为了让Linux系统命令能够更贴合用户的实际需求进行工作。
3.Linux系统命令、命令参数及命令对象之间,普遍应该使用什么来间隔?
答:应该使用一个或多个空格进行间隔。
4.请写出用echo命令把SHELL变量值输出到屏幕终端的命令。
答:echo $SHELL。
5.简述Linux系统中5种进程的名称及含义?
答:在Linux系统中,进程有5种状态,分别为运行、中断、不可中断、僵死与停止。
运行(R):进程正在运行或在运行队列中等待。
中断(S):进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该状态。
不可中断(D):进程不响应系统异步信号,即便用kill命令也不能将其中断。
僵死(Z):进程已经终止,但进程描述符依然存在,直到父进程调用wait4()系统函数后将进程释放。
停止(T):进程收到停止信号后停止运行。
6.请尝试使用Linux系统命令关闭PID为5529的服务进程。
答:执行kill 5529即可;若知道服务的名称,使用killall命令即可关闭。
7.使用ifconfig命令查看网络状态信息时,需要重点查看的4项信息分别是什么?
答:这4项重要信息分别是网卡名称、IP地址、网卡物理地址以及RX/TX的收发流量数据大小。
8.使用uptime命令查看系统负载时,对应的负载数值如果是0.91、0.56、0.32,那么最近15分钟内负载压力最大的是哪个时间端?
答:通过负载数值可以看出,最近1分钟内的负载压力是最大的。
9.使用history命令查看历史命令的执行记录时,命令前面的数字除了排序外还有什么用处?
答:还可以用“!数字”的命令格式重复执行某一次的命令记录,从而避免了重复输入较长命令的麻烦。
10.若想查看的文件具有较长的内容,那么使用cat、more、head、tail中的哪个命令最合适?
答:文件内容较长,使用more命令;反之使用cat命令。
11.在使用mkdir命令创建有嵌套关系的目录时,应该加上什么参数呢?
答:-p递归迭代参数
12.在使用rm命令删除文件或目录时,可使用哪个参数来避免二次确认呢?
答:-f参数。
13.若有一个名为backup.tar.gz的压缩包文件,那么解压的命令应该是什么?
答:tar -xzvf backup.tar.gz
14.使用grep命令对某个文件进行关键词搜索时,若想要进行文件内容反选,应使用什么参数?
答:-v参数。