本文在原来作者的基础上做一些符合自己的修改。原文参考:
《Linux就该这么学》培训笔记_ch02_一些必须掌握的Linux命令。
本章的内容虽然多,基本都是书本原话,但是笔记能精简的我都精简了,无奈内容实在太多,我怕太精简,回过头来自己也看不懂。。。
文章主要内容:
认识Shell
人与硬件并不能直接交互。Shell(也称为终端或壳)是一个命令行工具,它充当人与内核(硬件)的翻译官。
许多主流Linux系统默认使用的终端是Bash(Bourne-Again SHell)解释器。Bash解释器作为命令行终端主要有以下优势:
- 通过上下方向键来调取过往执行过的Linux命令(↑↓);
- 命令或参数仅需输入前几位就可以用Tab键补全(并非任何时候任何参数都能自动补全);
- 具有强大的批处理脚本(ch04);
- 具有实用的环境变量功能(ch03 PATH)。
必须掌握的Linux命令
常见命令执行格式:命令名称 [命令参数] [命令对象]
命令名称、命令参数、命令对象之间要用空格键分隔。
命令对象:一般是指要处理的文件、目录、用户等资源;
命令参数:
- 长格式(完整的选项名称),例子:man --help
- 短格式(单个字母的缩写),例子:man -h
- 如果一条命令中要使用多个参数,则短格式之间可以合并,且只需留一个“-”。例子:ls -al
- 长格式参数不可与长格式或短格式参数合并,但可以同时使用,例子:ls --all -l = ls -al
执行查看帮助命令(1)
man命令用于查看命令的帮助信息。
man ls #查看ls命令的帮助信息
执行后可以看到下图信息:
在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 | 维护历史与联系方式 |
常用系统工作命令(10)
1.echo命令:用于在终端输出字符串或变量提取后的值。(变量一般字母全大写,前面有$符号)
echo fuck you #输出 fuck you
echo $SHELL #输出变量SHELL的值
echo -e "hello
world" #-e 参数,换行输出
echo 'hello world!' #RHEL7中使用单引号,可以输出!
2.date命令:用于显示及设置系统时间或日期。格式:date [选项] [+指定格式]
选项:
-d<字符串>:显示字符串所指的日期与时间。字符串前后必须加上双引号; -s<字符串>:根据字符串来设置日期与时间。字符串前后必须加上双引号; -u:显示GMT; --help:在线帮助; --version:显示版本信息。
格式:
%H 小时(以00-23来表示)。 %I 小时(以01-12来表示)。 %K 小时(以0-23来表示)。 %l 小时(以0-12来表示)。 %M 分钟(以00-59来表示)。 %P AM或PM。 %r 时间(含时分秒,小时以12小时AM/PM来表示)。 %s 总秒数。起算时间为1970-01-01 00:00:00 UTC。 %S 秒(以本地的惯用法来表示)。 %T 时间(含时分秒,小时以24小时制来表示)。 %X 时间(以本地的惯用法来表示)。 %Z 市区。 %a 星期的缩写。 %A 星期的完整名称。 %b 月份英文名的缩写。 %B 月份的完整英文名称。 %c 日期与时间。只输入date指令也会显示同样的结果。 %d 日期(以01-31来表示)。 %D 日期(含年月日)。 %j 该年中的第几天。 %m 月份(以01-12来表示)。 %U 该年中的周数。 %w 该周的天数,0代表周日,1代表周一,异词类推。 %x 日期(以本地的惯用法来表示)。 %y 年份(以00-99来表示)。 %Y 年份(以四位数来表示)。 %n 在显示时,插入新的一行。 %t 在显示时,插入tab。 MM 月份(必要) DD 日期(必要) hh 小时(必要) mm 分钟(必要) ss 秒(选择性)
例程:
date "+%Y-%m-%d %H:%M:%S" #按照“年-月-日 小时:分钟:秒”的格式查看当前系统时间(%H是24小时制,%I是12小时制)
date -s "20170901 8:30:00" #将当前时间设置为2017年9月1日8点30分
date "+%j" #查看当前时间是当年中的第几天
date -d "1970-01-01 1234567890 seconds" +"%Y-%m-%d %H:%m:%S" #将19700101后的1234567890秒转化为年月日时分秒。时间戳
date +%Y%m%d #显示前天年月日
date -d "+1 day" +%Y%m%d #显示前一天的日期
date -d "-1 day" +%Y%m%d #显示后一天的日期
date -d "-1 month" +%Y%m%d #显示上一月的日期
date -d "+1 month" +%Y%m%d #显示下一月的日期
date -d "-1 year" +%Y%m%d #显示前一年的日期
date -d "+1 year" +%Y%m%d #显示下一年的日期
3.reboot命令:重启系统(重启)。重启操作涉及硬件资源的管理权限,默认只有root管理员才能执行。
4.poweroff命令:关闭系统(关机)。关机操作涉及硬件资源的管理权限,默认只有root管理员才能执行。
5.wget命令:用于在终端下载网络文件。格式:wget [参数] 下载地址
wget https://www.linuxprobe.com/docs/LinuxProbe.pdf #下载指定位置的pdf文件
wget -r -p https://www.linuxprobe.com #递归下载www.linuxprobe.com网站内所有页面数据以及文件
6.ps命令:用于查看系统中的进程状态。格式:ps [参数]。ps命令使用参数时可以不加“-”号。
ps -aux #-a显示所有进程(包括其他用户的进程);-u显示用户以及其他详细信息;-x显示没有控制终端的进程
执行ps aux后,相关标题的含义如下:
USER | PID | %CPU | %MEM | VSZ | RSS | TTY | STAT | START | TIME | COMMAND |
进程的所有者 | 进程ID号 | 运算器占用率 | 内存占用率 | 虚拟内存使用量(单位是KB) | 占用的固定内存量(单位是KB) | 所在终端 | 进程状态 | 被启动的时间 | 实际使用CPU的时间 | 命令名称与参数 |
在Linux系统中,有5种常见的进程状态,分别为运行、中断、不可中断、僵死与停止,具体含义如下:
- R(运行):进程正在运行或在运行队列中等待。
- S(中断):进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该状态。
- D(不可中断):进程不响应系统异步信号,即便用kill命令也不能将其中断。
- Z(僵死):进程已经终止,但进程描述符依然存在, 直到父进程调用wait4()系统函数后将进程释放。
- T(停止):进程收到停止信号后停止运行。
7.top命令:用于动态地监视进程活动与系统负载等信息。执行top后界面如下,q退出。
top命令执行结果的前5行为系统整体的统计信息。具体含义如下:
- 第1行:系统时间、运行时间、登录终端数、系统负载(三个数值分别为1分钟、5分钟、15分钟内的平均值,从右往左看数值越小意味着系统负载情况越来越低)。
- 第2行:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程数。
- 第3行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源百分比、空闲的资源百分比等。其中数据均为CPU数据并以百分比格式显示,例如“98.4 id”意味着有98.4%的CPU处理器资源处于空闲。
- 第4行:物理内存总量、内存使用量、内存空闲量、作为内核缓存的内存量。
- 第5行:虚拟内存总量、虚拟内存使用量、虚拟内存空闲量、已被提前加载的内存量。
8.pidof命令:用于查询某个指定服务进程的进程ID号(PID)。格式:pidof [参数] [服务名称]
pidof sshd #查看sshd服务的PID
9.kill命令:用于终止某个指定PID的服务进程。格式:kill [参数] [进程PID]
kill 1707 #终止PID为1707的进程
10.killall命令:用于终止某个指定名称的服务所对应的全部进程。格式:killall [参数] [服务名称]
一些服务程序会有多个进程协同为用户提供服务,如果用kill命令一个一个终止进程会比较麻烦,killall可以批量结束某个服务的所有进程。
killall httpd #结束httpd服务的所有进程
系统状态监测命令(8)
1.ifconfig命令:用于获取网卡配置与网络状态等信息。格式:ifconfig [网卡名] [参数]。
ifconfig执行结果,主要查看网卡名称(enoXXXXXXXX),IP地址,MAC地址,以及RX(接收数据包)与TX(发送数据包)的个数和累计流量。
ifconfig #查看网络的配置信息
ifconfig eno16777736 192.168.1.10/24 #配置网卡的网络和掩码
2.uname命令:用于查看系统内核与系统版本等信息。格式:uname [参数]。
在使用uname命令时,一般会固定搭配上-a参数来完整地查看当前系统的内核名称、主机名、内核发行版本、节点名、系统时间、硬件名称、硬件平台、处理器类型以及操作系统名称等信息。
uname -a #完整地查看系统内核与系统版本等信息
3.uptime命令:用于查看系统的负载信息。
uptime命令显示的其实就是top命令的第一行。系统负载值越低越好,尽量不要长期超过1,在生产环境中不要超过5。
uptime
4.free命令:用于显示当前系统中内存的使用量信息。格式:free [参数]。
free -h #以更人性化的方式输出当前内存的实时使用量信息(数值适当地以MB或GB显示)
free -h输出信息标题意义:
内存总量 | 已用量 | 可用量 | 进程共享的内存量 | 磁盘缓存的内存量 | 缓存的内存量 |
total | used | free | shared | buffers | cached |
5.who命令:用于查看当前登入主机的用户终端信息。格式:who [参数]。
who执行结果会显示出所有正在登录本机的用户的名称以及他们正在开启的终端信息。
[root@RHEL7 Desktop]# who
root :0 2019-10-24 21:43 (:0)
root pts/0 2019-10-24 22:02 (:0)
[root@RHEL7 Desktop]# who am i
root pts/0 2019-10-24 22:02 (:0)
[root@RHEL7 Desktop]# whoami
root
6.last命令:用于查看所有系统的登录记录。格式:last [参数]。
注意!使用last命令查出来的登录记录信息都是以日志文件的形式保存在系统中。因此不能以last命令的输出信息而判断系统有无被恶意入侵!因为黑客可以很容易地对内容进行篡改。
7.history命令:用于显示历史执行过的命令。格式:history [-c]。
history能显示出当前用户在本地计算机中执行过的最近1000条命令记录。历史命令会被保存到用户家目录的.bash_history文件中。可以自定义/etc/profile文件中HISTSIZE变量值来修改能显示历史记录的条数。
history #显示最近显示历史执行过的命令
!2 #使用"!编码数字"的方式重复执行某一次命令
history -c #清空所有命令历史记录
历史命令保存在 .bash_history 文件中。
8.sosreport命令:用于收集系统配置及架构信息并输出诊断文档。
该命令用途是当系统出现问题,需要联系技术支持人员时,先通过该命令生成一份简单的诊断文档发送给技术支持人员,如果是小问题,他们就可以远程解决而不必大费周章亲自到现场。
sosreport命令执行过程中需要敲3次回车键。
在打印的最后,有下面的提示:
工作目录切换命令(3)
工作目录指的就是用户当前在系统中所处的位置。
1.pwd命令:用于显示当前用户所处的工作目录。格式:pwd [选项]。
2.cd命令:用于切换工作路径。格式:cd [路径]。
cd /etc #切换到/etc目录
cd /bin #切换到/bin目录
cd - #返回到上一次的目录(即/etc)
cd .. #返回到上一级的目录(即/etc的上一级,即/)
cd ~linuxprobe #切换到用户linuxprobe的家目录
cd ~ #切换到当前用户的家目录(其实直接cd就行)
3.ls命令:用于显示当前目录中的文件信息。格式:ls [选项] [文件]。
-a :查看全部文件,包括隐藏文件。
-l :查看文件的属性,大小等详细信息。
-d :查看目录的属性信息。
-h : 显示文件的大小,以M或K为单位。
ls -al #查看当前目录的所有文件(包括隐藏文件)的详细信息
ls -ld /etc #查看/etc目录的详细信息
ls -Zd anaconda-ks.cfg #查看文件或目录的详细信息以及SELinux安全上下文值
ls -lh /etc #查看etc文件内的所有的文件的信息
文本文件编辑命令(9)
1.cat命令:用于查看内容较少的纯文本文件。格式;cat [选项] [文件]。
-n则可以显示行号。
cat -n anaconda-ks.cfg #查看文件anaconda-ks.cfg的内容,并显示行号。
2.more命令:用于查看内容较多的纯文本文件。more 会在最下面用百分数显示已经阅读了多少。可以用空格或者回车键向下翻页,按q键退出。
3.head命令:用于查看纯文本文件的前N行。格式:head [选项] [文件]。
-n 用于指定多上行,后面跟具体数字。
head -n 10 anaconda-ks.cfg #查看文件anaconda-ks.cfg前10行的内容
4.tail命令:用于查看纯文本文件的后N行或持续刷新内容。格式:tail [选项] [文件]。
可以用tail命令的持续刷新文件内容的功能来实时查看日志文件最新信息。
-n 用于指定多上行,后面跟具体数字。
tail -n 10 -f /var/log/messages #实时查看系统日志文件/var/log/messages的最新内容且仅显示后10行
5.tr命令:用于替换文本文件中的字符。格式:tr [原始字符] [目标字符]。
cat anaconda-ks.cfg | tr [a-z] [A-Z] #通过管道符把cat读取的文本内容传递给tr命令,把文件内容的英文全部替换成大写
这种形式的替换只是在输出结果的替换,原文件的内容不会变化。
6.wc命令:用于通机指定文本的行数、字数、字节数。格式:wc [参数] 文本。
wc -lwc /etc/passwd #统计/etc/passwd文件的行数,单词数和字节数。wc命令不带参数时默认同时带有行数、字数、字节数。
7.stat命令:用于查看文件的具体存储信息和时间(atime、mtime、ctime)等信息。格式:stat 文件名。
stat anaconda-ks.cfg #显示文件anaconda-ks.cfg的存储信息和时间信息
关于时间atime、mtime、ctime:
- Access:最后一次访问文件内容的时间,也叫atime
- Modify:最后一次修改文件内容的时间,也叫mtime
- Change:最后一次修改文件属性和权限的时间,也叫ctime
8.cut命令:用于按“列”提取文本字符,格式:cut [参数] 文本。
cut -d: -f1 /etc/passwd #以冒号为间隔符号,提取文件的第一列内容
9.diff命令:用于比较两个文本文件的差异。格式:diff [参数] 文件。
常用参数:
- --brief:确认两个文件是否不同,如果不同则会输出“differ”。短格式为-q。
- -c:详细比较出两个文件的差异之处
diff -q a.txt b.txt #比较文件a与文件b是否不同
diff -c a.txt b.txt #比较文件a与文件b并输出具体的不同之处
文件目录管理命令(7)
1.touch命令:用于创建空白文件或设置文件的时间。格式:touch [选项] 文件。
常用参数:
- -a参数:仅修改“读取时间”(atime);
- -m参数:仅修改“修改时间”(mtime);
- -d参数:同时修改atime和mtime;
1 touch test #创建一个名为test的空白文件
2 touch -d "2019-05-04 15:44" test #同时修改test文件的读取时间和修改时间为2019年5月4日15点44分
2.mkdir命令:用于创建空白的目录。格式;mkdir [选项] 目录。
1 mkdir test #创建一个空白目录test
2 mkdir -p a/b/c/d/e #递归创建出具有嵌套叠层关系的文件目录
3.cp命令:用于复制文件或目录。格式:cp [选项] 源文件 目标文件。
复制操作具体分三种情况:
- 如果目标文件是目录,则会把源文件复制到该目录中;
- 如果目标文件也是普通文件,则会询问是否要覆盖它;
- 如果目标文件不存在,则执行正常的复制操作。
常用参数:
- -p:保留原始文件的属性(属主属组不变)
- -d:若对象为“链接文件”,则保留该“链接文件”的属性
- -r:递归持续复制(用于目录)
- -i:若目标文件存在则询问是否覆盖
- -a:相当于-pdr(p、d、r为上述参数)
1 cp -a test.txt /etc/abc.txt #复制文件test.txt到/etc中并重命名为abc.txt,且保留原始文件的所有者、所属组、权限属性等信息
4.mv命令:用于剪切文件或将文件重命名。格式:mv [选项] 源文件 [目标路径|目标文件名]。
1 mv test.txt /etc/abc.txt #把文件test.txt剪切到/etc中,并重命名为abc.txt
2 mv test.txt abc.txt #把文件test.txt重命名为abc.txt
5.rm命令:用于删除文件或目录。格式:rm [选项] 文件。
常用参数:
- -f:不弹出确认信息,强制删除
- -r:删除目录
1 rm test.txt #删除文件test.txt,会弹出是否确认删除的提示。
2 rm -rf /root/testdir #强制删除root用户的家目录下的testdir目录
3 rm -rf /* #强制删除系统根目录下的所有文件,这操作将直接导致数据丢失,系统崩盘,人称“牢底坐穿命令”,万万用不得!
6.dd命令:用于按照指定大小和个数的数据块来复制文件或转换文件。格式:dd [参数]。
常用参数:
- if:输入的文件名称
- of:输出的文件名称
- bs:设置每个“块”的大小
- count:设置要复制“块”的个数
输出文件的大小 = bs x count,bs和count其实就是盛饭,乘一碗饭,盛饭的勺子越大,一勺就能盛满;勺子越少,则需要好几勺子才能盛满。bs就是勺子大小,count就是要盛多少次。
1 dd if=/dev/zero of=test_file count=2 bs=250M #从/dev/zero设备文件中取出一个大小为500M(2x250)的数据块,保存名为test_file的文件
2 dd if=/dev/cdrom of=test.iso #把光驱设备中的光盘制作成iso格式的镜像文件
7.file命令:用于查看文件(文本、目录、设备等所有一切在Linux中都统称为文件)的类型。格式:file 文件名。
打包压缩与搜索命令(3)
1.tar命令:用于对文件进行打包压缩或解压。格式:tar [选项] [文件]。
常用参数:
- -c:创建压缩文件
- -x:解开压缩文件
- -t:查看压缩包内有哪些文件
- -z:用Gzip压缩或解压(压缩包后缀.tar.gz)
- -j:用bzip2压缩或解压(压缩包后缀.tar.bz2)
- -v:显示压缩或解压的过程
- -f:目标文件名
- -p:保留原始的权限与属性
- -P:使用绝对路径来压缩
- -C:指定解压到的目录
1 tar -czvf etc.tar.gz /etc #把/etc目录的所有内容用Gzip打包压缩并命名为etc.tar.gz
2 tar -xzvf etc.tar.gz -C /root/Desktop #把压缩包etc.tar.gz用Gzip解压到/root/etc目录中
2.grep命令:用于在文本中执行关键词搜索,并显示匹配的结果,格式:grep [选项] [文件]。
常用参数:
- -b:将可执行文件(binary)当作文本文件(text)来搜索
- -c:仅显示找到的行数
- -i:忽略大小写
- -n:显示行号
- -v:反向选择——仅列出没有“关键词”的行。
1 grep -nv /sbin/nologin /etc/passwd #从/etc/passwd文件中查找出不含/sbin/nologin的行,并显示行号
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 …… {};:把find命令搜索到的结果交由紧随其后的命令作进一步处理(RHCSA考题!)
1 find /etc -name "host*" #搜索/etc目录下所有以host开头的文件,*为通配符
2 find / -perm -4000 #搜索根目录下所有包括SUID权限的所有文件
3 find / -user linuxprobe -exec cp -a {} /root/findresults/ ; #在整个文件系统中找出所有归属于用户linuxprobe的文件并把其复制到/root/findresults目录下,{}代表find命令搜索出的所有文件,命令结尾必须是“;”。