Bootstrap

Linux学习笔记(二)- 基本命令

介绍

        这篇主要讲Linux日常使用的基本命令。

        学习并掌握基本的Linux命令行操作,包括文件操作(如ls, cd, pwd, cp, mv, rm等)、进程管理(如ps, kill等)、包管理(根据所使用的发行版而定,如apt, yum, dnf等)、网络操作(如ping, ifconfig/ip, ssh等)等部分。
        有些命令需要后续自行安装,如果提示没有命令可以先看包管理部分。

        这里提一下,登陆ssh除了按照上篇笔记的操作来之外,还有一个代码,可以在一个会话中不断切换不同虚拟机上的不同用户。

ssh 用户名(比如root)@IP地址(比如192.168.68.176)

man(帮助手册)

        对于所有命令,Linux有一套自己的帮助使用手册“man”,用下面的代码可以让你查到陌生命令的介绍和使用方法。

man 命令名(如mkdir)

        示例操作结果下图所示。

        同理,你想详细了解man命令的使用,也可以用man。

man man

        效果图如下。

        图中数字1-9后所表示的意思如下。

数字代表内容
1使用者在shell环境中可以操作的指令或可=可执行文件
2系统核心可调用的函数与工具等
3一些常用的函数(function)与函数库(library),大部分为C的函数库(libc)
4设备文件的说明,通常在/dev下的文件
5配置文件或者是某些文件的格式
6游戏(games)
7惯例与协定等,例如Linux文件系统、网络协定、ASCII code等等的说明
8系统管理员可用的管理指令
9跟kernel有关的文件

        使用命令help也有类似效果。

命令名 --help

快捷键命令

        这里先列举一些常用的快捷键。

按键名作用
Tab补全命令、目录等
Ctrl+c结束当前进程
Ctrl+d键盘输入结束或退出终端
Ctrl+a将光标移动到输入首部
Ctrl+e将光标移动刀输入尾部
Ctrl+s暂停当前程序,暂停后按下任意键恢复运行
Ctrl+k删除从光标所在位置到行末

        温馨提示,这些快捷键都是在命令行中使用的,不是在具体文件内容中,而且还有一个经常会用到的按键,就是键盘上的“↑”键,可以帮你恢复你之前输入过的历史命令。

        如果想在一个命令行上一次性输入和执行多条命令,可以用分号分割命令。

通配符

        通配符是一种特殊语句,主要有星号(*)和问号(?),用来对字符串进行模糊匹配(比如文件名、参数名)。当查找文件夹时,可以使用通配符来代替一个或多个真正字符。

字符含义
*匹配0或多个字符
匹配任意单个字符
[list]匹配list中的任意单一字符
[^list]匹配除list中任意单一字符以外的字符
[!list]同[^list]
[c1-c2]匹配c1-c2中的任意单一字符
{c1..c2}匹配c1-c2中的全部字符
{string1,string2,...}匹配string1或string2(或更多)其一字符串

        下面是部分代码实操举例。

        这里可以用"*"匹配到所有a开头的txt文件。

        这里"?"相较上个有了限制,只能匹配到后面是单个字符的文件,像上面的a10.txt就匹配不到,因为10是两个字符。

        这里可以看到只能匹配到"[]"里的单个字符,a10b.txt就不可以。

        因为"[]"里没有9,所以只能匹配到a9.txt文件。

        这里的"[]"里必须按照数字或者字母顺序,下面的第二张图中可以看出不按顺序就无法访问。

        这里"{}"里只能是数字,不能是字母。

        这里"{}"里的string1代表的就是多个字符。

       

        最后在介绍基础命令前还需要介绍下重要的开关机知识和防火墙规则。

开关机命令

        温馨提示,在关机前最好做好数据备份和数据同步。

        介绍一个用于数据同步的命令,需要在系统重启或者关机之前执行。

sync

        这里是几种重启的代码。

reboot #重启
shutdown -r now #系统马上重启
shutdown -r +分钟数 #系统在设定好的分钟数后重启

        这里是关机代码的几种设置方式。

shutdown -h now #立马关机
shutdown -h +分钟数 #系统在设定好的分钟数后关机
shutdown -h 时间(比如08:30) #系统会在下一个早上八点三十关机

        不推荐下面这两种,因为这两种在关机时不会完整地关闭和保存系统。

halt #关闭系统
poweroff #同上

        还有一种修改init级别的命令,也可以关机和重启,但是不安全,也不建议使用。

init 0 #关机,就是调用系统的0级别
init 6 #重启,就是调用系统的6级别

        还有一个取消正在执行的关机命令的命令。

shutdown -c #取消关机命令

修改防火墙规则命令

systemctl status firewalld  #查看防火墙状态
systemctl start firewalld  #启动防火墙
systemctl stop firewalld  #关闭防火墙
systemctl disable firewalld  #禁用防火墙
systemctl enable firewalld  #开机启动防火墙

文件和目录管理

关键概念        

        在介绍命令前先说明两个很常见的概念“相对路径”和“绝对路径”。

        简单来说,

  • 相对路径是从当前目录开始定位,只需要写当前目录之后的路径。
  • 而绝对路径则是从根目录开始定位,必须从头到尾写完整的路径。

        举个例子,假设同样是需要进入完整路径为"/root/text/start"的目录。

        当你直接在根目录下面试图通过部分路径进入时会得到以下结果。

        这时就需要使用绝对路径,因为绝对路径的好处就是不管你在哪个目录下,只要通过目标目录的绝对路径就能准确顺利地进入你的目标目录。

        注意,因为根目录的名称为"/",不需要特别标注,所以绝对路径的开头目录就是根目录下的目录之一。

        而如果你已经处在这条路径的某个目录中,你就只需要输入后面剩下的路径就可以达到同样目标目录,效果图如下。这两个概念可以理解为一个是给初学者的详细指导手册,另一个是给经验者的大纲手册,详细程度不同,适用情况也不同。

ls(列出目录内容)

ls [option]

        后面什么都不需要跟,直接回车就可以,下面是在根目录下的效果图。

        这里也列举了几个常用的参数。

参数作用参数作用
-a显示所有文件及目录 ( "." 开头的隐藏文件也会列出)-l以长格式显示文件和目录信息,包括权限、所有者、大小、创建时间等
-c按照文件修改时间排序-d只列出目录(不递归列出目录内的文件)

cd(切换目录)

cd 目标目录路径  #进入指定目录
cd ..  #返回上一级目录
cd ~   #进入用户主目录
cd /   #进入用户根目录

        效果图如下。

pwd(显示当前目录路径)

pwd

        效果图如下。

cat(连接并显示文件内容)

cat   完整文件名
Cat-b 完整文件名 #对输出内容中的非空行标注行号
Cat-n 完整文件名 #对输出内容中的所有行标注行号

        这里是这三种命令的效果图。

more(分屏显示文件内容)

more 完整文件名      #以一页一页的形式显示文件内容
more +数字 完整文件名 #指定从文件的第几行开始显示文件文本
more -数字 完整文件名 #指定一次显示文件内容的几行
more [option] 完整文件名

        下面是对应的效果图。

        这里可以用回车键(Enter)以行为单位下移,空格键(Space)以页为单位下移,按q退出more命令。

        这里列举几个参数。

参数作用参数作用
-f计算行数时,以实际上的行数,而非自动换行过后的行数(有些单行字数太长的会被扩展为两行或两行以上)-p不以卷动的方式显示每一页,而是先清除屏幕后再显示内容
-s当遇到有连续两行以上的空白行,就代换为一行的空白行-u不显示下引号 (根据环境变数 TERM 指定的 terminal 而有所不同)

less(进阶显示文件内容)

less [option](可选择参数) 完整文件名 #查看文件内容,不可编辑

        上面的可选择参数有很多,这里列举几个可能常用的。

参数作用参数作用
-e当文件显示结束后自动离开-i忽略文件名的大小写
-N显示文件内容中每行的行号-s显示连续空行为一行

        在用less命令打开文件查看时,还有几个命令方便操作,是直接输入,不用像vim编辑时一样用":"做前缀。

命令作用命令作用
/ 字符串(如/bash)在文本中搜索对应字符串,并以高亮标注(从上往下搜索)

? 字符串(如 ?bash)

在文本中搜索对应字符串,并以高亮标注(从下往上搜索)
n重复前一个搜索(与 / 或 ? 有关)N反向重复前一个搜索(与 / 或 ? 有关)
b向上翻一页d向后翻半页
h显示帮助界面q退出less 命令

        这里只列举了部分命令,详细的在其他文章里应该有所介绍,这里就不再多介绍了。

        下面是几张效果图。

        使用less命令查看文件时发现上面多了很多空行不要慌,这是正常现象,不用管。

        这是使用"/i"命令后的文本效果。

        这是使用"less -N 文件名"后的效果。

head(显示文件的开头部分)

head -n 数字 文件名 #显示文件的开头 X(数字)行
head -c 数字 文件名 #显示文件的开头 X(数字)字符

        效果图如下。

        这里面有一行空行。

        这里面有空字符。

tail(显示文件的结尾部分)

tail -n 数字 文件名 #显示文件的末尾 X(数字)行
tail -c 数字 文件名 #显示文件的末尾 X(数字)字符
tail -n +数字 文件名 #从第 X(数字)行开始显示文件内容

        逻辑和head一样,下面是效果图。

mkdir(创建目录)

mkdir 目录名 #创建目录
mkdir -p 目录名 #同时创建该目录和该目录的父目录

        这和相对路径,绝对路径的概念有点类似。

        这是直接在当前目录下创建一个子目录。

        但当你想直接创建一个全新的二级目录时,却发现创建失败,那是因为这个父目录根本就不存在,所以没办法创建下面的子目录。

        这时就需要参数"-p",它可以让帮你直接在根目录下创建你想要的所有目录,父目录不存在就一起创建。

rm(删除目录或者文件)

rm 文件或目录名  #删除文件
rm -r 目录名  #递归删除目录及其内容
rm -i 文件或目录名  #删除前逐一询问确认
rm -f 文件或目录名  #强制删除文件,不会询问

rmdir(删除空目录)

rmdir 空目录名 

        注意,这个命令只能删除空目录,非空目录无法删除,下面是效果图。

cp(复制文件或目录)

cp [option] 源文件/目录路径 目标文件/目录路径 

        下面是常用的几个参数。

参数作用参数作用
-a此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容-d复制时保留链接(这里所说的链接相当于 Windows 系统中的快捷方式)
-r用于复制目录及其所有的子目录和文件,如果要复制目录,需要使用该选项-i在复制前提示确认,如果目标文件已存在,则会询问是否覆盖,回答 y 时目标文件将被覆盖
-u仅复制源文件中更新时间较新的文件-p保留源文件的权限、所有者和时间戳信息
-f强制复制,即使目标文件已存在也会覆盖,而且不给出提示-v显示详细的复制过程

        部分效果图如下。

mv(移动或重命名文件或者目录)

mv 原文件/目录路径 新名  #重命名文件或目录
mv 原文件/目录路径 新路径  #移动文件
mv [option](可选择参数) 原文件/目录名 新路径

        下面列举了几个常用的参数。

参数作用参数作用
-i在移动前提示确认,如果目标文件已经存在,则会询问是否覆盖,答"y"时目标文件将被覆盖,"n"表示取消操作-f强制移动,及时目标文件已经存在也会覆盖,不会提前询问
-v显示详细的复制过程-n不要覆盖任何已存在的文件或目录

        部分效果图如下。

touch(建立文件或更新文件日期)

touch 文件名 
#创建新文件,如果文件已存在就将其时间属性更新为当前时间
touch -t 时间(格式类似:202407132215) 文件名
#修改文件时间属性(举例意思为修改成2024年7月13日22点15分),如果文件不存在就只创建一个新的空白文件
touch -c 文件名
#修改文件时间属性为当前时间,如果文件不存在也不新建
touch a{1..3}b.txt
#在当前路径下创建a1b、a2b、a3b这三个文件

        部分效果图如下。

        上图中因为aa.txt已存在,所以用touch后没有新建,而是更新了文件的时间属性。

        上图时直接输入时间数值来修改文件时间属性。

        上图中因为aa.txt已存在,所以时间属性更改为当前时间。

        上图是创建新文件。

diff(比较两个文件内容的差异)

diff [option](可选择参数) 文件1名 文件2名

        diff命令会逐行比较并在被比较的两个文件中寻找差异,如果文件相同,就不会有任何输出,下面是列举的一些常用参数。

参数作用参数作用
-i忽略大小写差异-w忽略所有空格
-y并排比较-B忽略空白行

        下面是部分效果图。

        上面的"5c2"和"7c7"表示a1.txt和a2.txt文件在第2到5行和第7行的内容有所不同,中间内容就是展示两个文件中不同的部分,"---"上面是a1.txt的内容,下面是a2.txt的内容。

        这是并排展示的效果,"|"表示这里两个文件内容不同。如果出现">"或"<"则表示后面文件比前面文件少或多1行。

ln(建立两个文件之间的链接关系)

ln [option] 源文件/目录路径 目标文件/目录路径

        这是"ln"命令的一些常用参数。

参数作用参数作用
-b如果目标文件/目录里已有同名的文件,则在覆盖前进行备份-v详细显示操作的各个步骤
-f如果目标文件/目录里已有同名的文件,不会询问,直接覆盖-i如果目标文件/目录里已有同名的文件,提前询问是否覆盖
-n将软链接视作一般目录-s创建软链接

        这里在放效果图前可能需要讲解一下软链接和硬链接的概念。(其实上一篇有简单介绍,不过这里为了理解"ln"命令还是再介绍下)

        软链接(也称符号链接),是包含了源文件位置信息的特殊文件。

        软链接文件有类似于 Windows 的快捷方式,它实际上是一个特殊的文件。在符号链接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。比如,A 是 B 的软链接(这里A 和 B 都是文件名),A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号不相同,A 和 B 指向的是两个不同的 inode,继而指向两块不同的数据块。但是 A 的数据块中存放的只是 B 的路径名(可以根据这个找到 B 的目录项)。A 和 B 之间是“主从”关系,如果 B 被删除了,A 仍然存在(因为两个是不同的文件),但指向的是一个无效的链接。

        硬链接就是指向源文件索引节点的连接。删除源文件,不影响硬链接的访问。

        在 Linux 的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在 Linux 中,多个文件名指向同一索引节点是存在的。比如,A 是 B 的硬链接(A 和 B 都是文件名),则 A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号相同,即一个 inode 节点对应两个不同的文件名。两个文件名指向同一个文件,A 和 B 对文件系统来说是完全平等的,删除其中任何一个都不会影响另外一个的访问。

        硬链接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立多个硬链接到重要文件,用来防止“误删”。因为对应该目录的索引节点有一个以上的链接,所以只删除一个链接并不影响索引节点本身和其它的连接,只有当最后一个链接被删除后,文件的数据块及目录的连接才会被释放。故文件真正删除的条件是与之相关的所有硬链接文件均被删除。

存在形式是否可以跨文件系统是否可以对目录进行创建
软链接路径
硬链接文件副本

        这里是创建对应链接代码。

touch a1 #创建原文件a1
ln a1 a2 #创建a1的一个硬链接文件a2
ln -s a1 a3 #创建a1的一个符号链接文件a3

        这里的a1、a2的inode节点数相同,a3的不同。

  • a1、a2是平等关系,删除任一个,另一个都不会受到影响;但在任一个里添加修改,另外一个也会自动产生同样修改。
  • a1、a3是上下级关系,删除a1,a3会无效,删除a3对a1没有影响;同理,修改a1,a3会有同样效果,但反之没有影响。
  • a2、a3没有关系,inode节点数不同,删除任一个,另一个也不会有影响;添加修改的效果a2和a3同a1和a3。

        而删除文件的方法就是删除原文件a1和它的硬链接文件a2。

        回到正题,下面是"ln"的部分效果图。

        上图中,硬链接和软链接不能在同个目录下,因为重名。

        上图中,当删除源文件后,硬链接没有变化,但软链接的名字颜色变红,表示指向一个无效地址。

        上图中,当删除的是硬链接,软链接没有受到任何影响。

echo(在终端输出文本)

echo [option] 字符串
#参数比较少,所以直接在下面介绍了
-n  不输出行尾的换行符,这意味着输出后不会换到下一行
-e  启用反斜杠转义的解释,允许使用特殊字符
-E  禁用反斜杠转义的解释(默认选项)

        下面是部分效果图。

        上图用到了变量,这个之后在shell部分会讲解,echo和重定向在shell部分都有涉及,可能会再讲解。

输入/输出重定向

#用echo举例
echo "字符串内容" > 文件名

        这个部分现在简单带过,之后在shell部分可能会再次讲解。

        举例效果图如下。

文本处理

        这里的命令同样包括上面提到的cat、less、more、head、tail、diff,因为讲过所以这里就跳过了。还有一些比如grep,在后面的部分。

nano、vi、vim(文本编辑器)

nano 文件名  #使用 nano 编辑文件
vim 文件名  #使用 vim 编辑文件
vi 文件名  #使用 vi 编辑文件

        进入编辑界面后按"i"开始编辑,退出时先按"Esc"键,再按":",最后输入"wq"(写入修改内容并离开)就可退出。

sort(文本排序)

sort [option] 文件名 #针对文本内容,以行为单位进行排序

        一些常用的参数列举如下。

参数作用参数作用
-b忽略每行前面开始出的空格字符-c检查文件是否已经按照顺序排序
-d排序时,处理英文字母、数字及空格字符外,忽略其他的字符-f排序时,将小写字母视为大写字母
-i排序时,除了040至176之间的ASCII字符外,忽略其他的字符-m将几个排序好的文件进行合并
-n依照数值的大小排序-u意味着是唯一的(输出的结果已经完重)

        下面是一些效果图。

        上图中,因为以行为单位,有几个空行重复,所以去重时被去掉了。

wc(文本统计)

wc 文件名 #统计文本的详细信息
wc -c 文件名 #统计文本的字节数
wc -l 文件名 #统计文本的行数
wc -w 文件名 #统计文本的字数

        效果图如下。

awk(处理文本文件)

awk [options] 'pattern {action}' 文件名
#pattern:是用于匹配输入数据的模式(如果省略,则awk将对所有行进行操作)
#action:是在匹配到模式的行上执行的动作(如果省略,则默认动作是打印整行)
#参数较少,所以就在这里列举了。
#-F  指定输入字段的分隔符,默认是空格(使用这个选项可以指定不同于默认分隔符的字段分隔符)
#-v  设置awk内部的变量值。可以使用该选项将外部值传递给awk脚本中的变量
#-f  指定一个包含awk脚本的文件(这样可以在文件中编写较大的awk脚本,然后通过"-f"选项将其加载)

        这个命令和"sed"命令主要用在shell中,所以这里就先略过了,之后介绍shell的时候会再提。

cut(文本切割)

cut [option]  文件名

        下面是几个主要参数,主要用到的还是"-b"。

参数作用参数作用
-b以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志-d自定义分隔符,默认为制表符
-f与-d一起使用,指定显示哪个区域-n

取消分割多字节字符,仅和 -b 标志一起使用。(如果字符的最后一个字节落在由 -b 标志的 List 参数指示的范围之内,该字符将被写出,否则该字符将被排除)

        效果图如下。

        注意上图,参数"-d"和"-f"一定要一起用,选择分隔符后再选择要切割的区域。

        下图中因为一个中文字占多个字节,所以用参数"-b"不能得到正常结果。

权限和所有权

关键概念 

        在这部分需要讲一下权限的概念,如下图。

        其中,每个字符的含义如下:

        第一个字符"d" - 表示文件类型。常见的文件类型包括 " - "(普通文件)和 " d "(目录)。

        后面剩下的三组字符分别表示的用户权限(即文件所有者对文件的权限)、组权限(即文件所属组的用户对文件的权限)和其他权限(即其他用户对文件的权限)。

        每个权限字符可以是以下四个字符之一:

字符内容字符内容
r允许读取文件内容、查看目录内容w允许修改文件内容、在该目录中创建、删除文件
x 对于文件,允许执行文件;对于目录,允许进入该目录-表示没有相应的权限

        使用八进制数来指定权限的对应表如下。

对应数字权限rwx二进制
7读 + 写 + 执行rwx111
6读 + 写rw-110
5读 + 执行r-x101
4只读r--100
3写 + 执行-wx011
2只写-w-010
1只执行--x001
0---000

chmod(改变文件权限)

chmod 数字(比如754) 文件名  #设置文件权限

        效果图如下。

        也可以换另一种写法。

chown(改变文件所有者)

chown 新拥有该文件的用户名:新拥有该文件的组名 文件名  # 设置文件所有者和组

系统管理

dmesg(显示开机信息)

dmesg [option]

        这个命令本人不常用,所以参数也只列举一小部分。

参数作用参数作用
-C消除内核缓冲区-c读取并清除所有信息
-T显示异读的时间戳-h显示帮助信息并退出

        下面是部分效果图。

df(查看磁盘上各个分区的使用情况)

df [option] 

        一般情况下这个命令大多都是直接使用,接的参数也比较少,所以这里也只列举几个参数。

参数作用参数作用
-a显示所有文件系统,包括虚拟文件系统-h以人类可读的格式显示输出结果
-i显示 inode 使用情况而不是块使用情况-l仅显示本地文件系统
-t仅显示指定类型的文件系统-T显示文件系统的类型
-n不执行文件系统同步操作--total在输出的最后一行显示总计

        下面是部分效果图。

du(显示指定的目录或文件所占用的磁盘空间)

du [option] 文件/目录名

        这里常用到的参数其实也不多,也只列举几个。

参数作用参数作用
-a显示目录中个别文件的大小-c显示个别目录或文件的大小时也显示所有目录或文件的总和
-D显示指定符号连接的源文件大小-k以1024 bytes为单位显示
-s仅显示指定目录或文件的总大小,而不显示其子目录的大小-m以1MB为单位显示
--version显示版本信息--help显示帮助信息

        下面是部分效果图。

free(显示内存使用情况)

free [option]

        这个命令常用到的参数也不多,比上面的两个还少。

参数作用参数作用
-s持续观察内存使用状况-m以MB为单位显示内存使用情况
-h以合适的单位显示内存使用情况,最大为三位数,自动计算对应的单位值-t显示内存总和列

        下面是部分效果图。

        下图就是每隔10秒更新内存使用情况,可以一直持续观察,退出就用"ctrl+c"结束进程。

date(查看和设定系统当前的日期)

date [option-1] "[option-2]"

        这个命令简单使用的话不用加任何参数直接回车就可以得到如下效果。

        但修改具体格式,复杂使用的话参数还是很多的,上面的代码示例中有两种参数,第二种需要加上英文的引号,这里两种都列举几个。

        参数一如下。

参数作用参数作用
-d通过字符串显示时间格式,字符串不能是'now'-R 按照 RFC 5322 格式输出时间和日期(比如Mon, 14 Aug 2006 02:34:56 -0600)
-r显示文件的上次修改时间-s显示文件的上次修改时间

        参数二如下。

参数作用参数作用
%a星期几的缩写%b缩写的月份
%c本地的日期和时间%C世纪,和%Y类似,但只有后面两位
%d%F完整的日期
%H小时%W一年中的第几周

        下面是部分效果图。

        这里的月份是中文或者英文都很正常,和你虚拟机设置的语言有关。

ps(查看系统进程的情况)

ps [option] 

        ps命令和上面的几个类似,参数很多,但常用的参数不多,下面是常用的两条ps命令。

ps aux #显示全部进程
ps aux | grep 命令名 #显示跟指定的命令有关的进程

        这里列举部分参数。

参数作用参数作用
-a显示终端上的所有进程,包括其他用户的进程-u显示进程的详细状态
-x显示没有控制终端的进程-e显示所有进程

        下面是部分效果图。

kill(终止进程)

kill  PID #杀死PID对应进程
kill -9 PID #杀死PID对应进程组
kill -l # 列出所有可用信号
kill -s 信号名 PID #向PID对应进程发送对应信号

        下面是一张效果图,仅作参考。

killall(终止指定命令的所有进程)

killall [option] 命令名

        主要参数如下,大部分时候其实用参数较少,大多直接使用。

参数作用参数作用
-e进程需要和名字完全相符-l列出所有相关的信号名称
-g结束进程组-i结束之前询问
-s发送指定信号-u结束指定用户的进程
-v显示详细执行过程-w等待所有的进程结束

        下面是部分效果图。

top(实时监控进程状况)

top [option]

        下面列举了几个常用的参数。

参数作用参数作用
-d指定 top 命令的刷新时间间隔,单位为秒-n指定 top 命令运行的次数后自动退出
-p仅显示指定进程ID的信息-u仅显示指定用户名的进程信息
-H在进程信息中显示线程详细信息-i不显示闲置(idle)或无用的进程
-c显示完整的命令行而不截断-S累计显示进程的 CPU 使用时间

        一般效果图如下。

htop(进阶监控进程)

htop #安装命令在后面

        相当于top的升级版,需要自行安装,显示效果较top会好一些,界面整齐还有颜色区分。

clear(清屏)

clear

        不管你使用前屏幕上有多少代码,有什么代码,使用效果如下。

uname(显示操作系统信息)

uname [option]

        下面是一些常用参数。

参数作用参数作用
-a

显示全部的信息,包括内核名称、主机名、操作

系统版本、处理器类型和硬件架构等

-m显示处理器类型
-n显示主机名-r显示内核版本号
-s显示操作系统名称-v显示操作系统的版本
-p显示处理器类型(与 -m 选项相同)--help显示帮助

        类似效果图如下。

hostname(查看修改主机信息)

hostname #查看当前会话的主机名
hostname 新主机名 #临时修改主机名,重启后恢复原主机名
hostnamectl status #查看静态主机名
hostnamectl set-hostname 新主机名 #永久修改主机名,重启后生效

        部分效果图如下。

whoami(查看当前用户)

whoami

        直接使用,效果图如下。

id(查看用户信息)

id [option]

        几个常使用的参数如下。

参数作用参数作用
-g显示用户所属群组的ID-n显示用户,所属群组或附加群组的名称
-G显示用户所属附加群组的ID-u显示用户ID

        部分效果图如下。

vmstat(检测虚拟内存)

vmstat 数字(采样的时间间隔秒数) 数字(采样的次数) [options]

        一些常用的参数如下。

参数作用参数作用
-a显示活跃和非活跃内存-f显示从系统启动至今的fork数量
-s显示内存相关统计信息及多种系统活动数量-d显示磁盘相关的统计信息
-S使用指定单位显示(参数有 k 、K 、m 、M ,分别代表1000、1024、1000000、1048576字节(Byte),默认单位为K(1024 Bytes))count刷新次数,如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷

        部分效果图如下。

网络管理

关键概念

        后面的下载软件需要理解两个概念"环境变量"和"路径变量",这里也先简单介绍一下。

        环境变量是操作系统中用来指定操作系统运行环境的一种动态值的字符串,它们可以被操作系统中运行的进程访问,通常用于指定系统路径(如库文件、可执行文件的位置)、临时文件目录、用户的主目录、系统架构等。

       

env

        使用命令env就可以查看当前的所有环境变量,效果图如下。

        比较常用的环境变量有PATH(决定系统在哪些目录中查找可执行文件,也就是下面的路径变量)、USER(当前用户的用户名)、HOME(指定当前用户的主目录路径)等,查看和编辑方法如下。(编辑的变量用路径变量举例,因为比较常用)

env/printenv  #查看当前用户所有的环境变量
echo $变量名  #查看指定环境变量
vim /etc/profile #编辑环境变量文件
PATH=待添加路径:$PATH #添加环境变量 (在文件中添加)
source /etc/profile  #无需重启,立即更新环境变量

        注意,添加的那行代码是在/etc/profile文件中编辑,添加完毕退出后再执行最后的更新代码。还有,修改环境变量除了编辑/etc/profile文件还可以编辑/etc/bashrc、/etc/environment等文件,方法类似,有些的生效期限和范围会略有不同。

        路径变量是环境变量的一种特殊形式,它用于指定系统搜索可执行文件的目录。

        在Linux中,最常用的路径变量是PATH。当用户在命令行中输入一个命令时,系统会按照PATH环境变量中定义的目录顺序来搜索这个命令的可执行文件。

        上面在环境变量那里举例说了永久修改路径变量的方法,这里再说下临时添加环境变量的方法。临时修改就是一旦当前shell(会话)关闭,这个变量也会失效。

export PATH=路径:$PATH

netstat(查看网络连接)

netstat [option]

        主要参数如下。(这个命令的参数很多,但篇幅有限就只列举部分)

参数作用参数作用
-a显示所有连线中的Socket-A列出该网络类型连线中的相关地址
-c持续列出网络状态-e显示网络其他相关信息
-F 显示路由缓存-i显示网络界面信息表单
-n 直接使用IP地址,而不通过域名服务器-t显示TCP传输协议的连线状况

        部分效果图如下。

ifconfig(显示或设置网络设备)

ifconfig

        这个命令参数也很多,但用的不多,所以也只列举几个。

ifconfig add <地址> #设置网络设备IPv6的IP地址
ifconfig down #关闭指定的网络设备
ifconfig media <网络媒介类型> #设置网络设备的媒介类型
ifconfig netmask <子网掩码> #设置网络设备的子网掩码
ifconfig tunnel <地址> #建立IPv4与IPv6之间的隧道通信地址
ifconfig io_addr <I/O地址> #设置网络设备的I/O地址
......

ip(网络配置)

ip [option] OBJECT 命令名

        这里的OBJECT部分范围如下。

OBJECT={ link | address | addrlabel | route | rule | neighbour | ntable | tunnel | maddr | mroute | mrule | monitor | xfrm | tuntap | l2tp }

        解释如下。

对象释义对象释义对象释义
link网络设备address设备的协议地址(IP或IPv6)addelabel用于协议地址选择的标签配置
route路由表项rule路由策略数据库中的规则neighbour管理ARP或NDISC缓存项
ntable管理邻居cache的操作tunnelIP隧道maddr多播地址
mroute组播路由缓存项mrule组播路由策略数据库中的规则monitor监控netlink消息
xfrm管理IPSec策略tuntap管理TUN/TAP设备l2tp隧道以太网over IP (L2TPv3)

        部分参数如下。

参数作用参数作用
-V显示命令的版本信息-s输出更详细的信息
-f强制使用指定的协议族-4指定使用的网络层协议是IPv4协议
-6指定使用的网络层协议是IPv6协议-0

输出信息每条记录输出一行

(内容较多也不换行显示)

        部分效果图如下。

ping(测试网络连接)

ping IP地址

        一般情况下,这个命令用得也比较简单,所以参数也只列举几个。

ping -c <完成次数> IP地址 #设置完成要求回应的次数
ping -f IP地址 #极限检测
ping -i <间隔秒数> IP地址 #指定收发信息的间隔时间
ping -n IP地址 #只输出数值
ping -q IP地址 #不显示指令执行过程,开头和结尾的相关信息除外
ping -s <数据包大小> IP地址 #设置数据包的大小
...... 

        部分效果图如下。

nslookup(域名查询)

nslookup [option] 主机名/域名 服务器 

        使用这个命令需要安装"bind-utils"包。

#这里的[option]稍微特殊点,主要是以下两大类。
#-querytype("-qt")=类型、-timeout=数字

        而类型主要有以下几种。(这里列举部分)

参数作用参数作用
A地址记录(直接查询默认类型)

CNAME

别名记录
HINFO硬件配置记录(包括CPU、操作系统信息)ISDN域名对应的ISDN号码
MB存放指定邮箱的服务器NS名字服务器记录
RP负责人记录SRVTCP服务器信息记录

        部分效果图如下。

dig(查询域名信息)

dig [option] 主机名

       这里的参数和上面的"nslookup"命令类似,类型也大致一样。

        这个命令主要用于查询单个主机信息,效果图如下。

scp(加密远程复制文件和目录)

scp [option] 源文件/目录名 目标文件/目录名

        主要参数有以下几种。

参数作用参数作用
-1强制scp命令使用协议ssh1-4强制scp命令只使用IPv4寻址
-B使用批处理模式-6强制scp命令只使用IPv6寻址
-p保留原文件的修改时间,访问时间和访问权限-C允许压缩(将"-C"标志传递给ssh,从而打开压缩功能)
-q不显示传输进度条-r递归复制整个目录

        这个命令和" cp "的区别在于" cp "只能在本机上进行复制,而" scp "可以在几台主机间进行复制,部分效果图如下。

        目标主机效果图如下。

sftp(远程传输)

sftp 用户名@IP地址

        这个命令的主要作用就是在不同主机传输文件,效果图如下。

rsync(远程数据同步)

rsync [option] 源文件/目录路径 目标文件/目录路径
#这里的源路径和目标路径哪个在别的主机上,格式就要改为"用户名@IP地址:文件/目录路径"

       这个命令需要自行安装,注意源文件和目标路径所在的主机上都要安装,只安装一个会出错。

        部分参数如下。

参数作用参数作用
-z压缩(即在文件传输前和传输后进行压缩)-v显示详细信息
-p在备份时保留文件原有属性-t在备份时保留文件原有时间
-o在备份时保留文件属主-l在备份时备份所有的软链接

        效果图如下。

yum(包管理器)

yum [option] 操作名 包名

        这里的参数和操作都比较常用,而且不多,所以就一起列举出来。

#[option] 
#-h(帮助) -y(过程中所有提示都选择yes) -q(不显示安装详细过程)
#操作 
#check-update  列出所有可更新的软件清单 yum check-update
#update 更新软件 yum update 软件包名
#install 安装指定的软件 yum install 软件包名
#list 列出所有可安裝的软件清单 yum list
#remove 删除软件包 yum remove 软件包名
#search  查找软件包 yum search 软件包名
#clean 清除缓存命令 yum clean 软件包名

        下面是部分效果图。

        温馨提示,有时候yum可能下载失败,这是因为它原本的源在国外,而且现在可能已经停止一些服务,所以这时我们需要换成国内的源。

        这里就推荐阿里云的yum镜像仓库,已经是国内最好的yum源之一了,下面是安装步骤。

        首先下载阿里云的centos-7.repo文件。

cd /etc/yum.repos.d
curl -O http://mirrors.aliyun.com/repo/Centos-7.repo

        然后备份官方的repo文件。

#新建存放centos官方提供的repo文件,因为官方不提供服务了
mkdir 目录名
mv CentOS-* 目录名

        之后"reboot"重启就可以了,这里可以再额外下一个扩展源,能帮助找到更多的软件。

yum  install  epel-release

wget(下载文件)

wget [option] (指定文件夹路径/下载文件的重命名) 下载地址

        下面列举常用几个参数。(这个命令也需要自行安装才能使用)

参数作用参数作用
-O将下载的文件保存为指定的文件名-P将下载的文件保存到指定的目录
-c继续下载中断的文件,支持断点续传-r递归下载,下载指定 URL 中的所有链接
-b后台下载,将下载任务放到后台执行-y在执行操作时自动回答 " yes "

        下面是部分效果图。

curl(传输数据)

curl [option] URL

        因为" curl "命令强大,故它的参数也十分丰富,这里就只列举几个代表,详细的可以用" man curl "命令去了解。

参数组参数作用参数作用
请求头-H "name: value"(HTTP)添加一个http header(http请求头)-H "name:"(HTTP)移除一个http header(http请求头)
响应头-I(HTTP)只输出HTTP-header,不获取内容(HTTP/FTP/FILE)-i/--include(HTTP)输出HTTP头和返回内容
cookie-b name=data/--cookie name=data(HTTP)发送cookie数据到HTTP服务器(数据格式为:"NAME1=VALUE1;NAME2=VALUE2")
如果行中没有“=”,将把参数值当作cookie文件名(这个cookie数据可以是由服务器的http响应头"Set-Cookie:"行发送过来的)
-j/--junk-session-cookies(HTTP)告诉curl放弃所有的"session cookies"(相当于重启浏览器)
代理-p/--proxytunnel将“-x”参数的代理,作为通道的方式去代理非HTTP协议(如ftp)--socks4 <host[:port]>使用SOCKS4代理
数据传输-G/--get如果使用了此参数,像“-d/”、“--data”、“--data-binary”参数设置的数据,将附加在url上,以GET的方式请求--form-string <key=value>(HTTP)类似于“--form”,但是“@”、“<”无特殊含义
断点续传-C <offset>断点续转,从文件头的指定位置开始继续下载/上传--continue-at <offset>offset续传开始的位置,如果offset值为"-",curl会自动从文件中识别起始位置开始传输
认证--basic(HTTP)告诉curl使用HTTP Basic authentication(HTTP协议)--anyauth(HTTP)告诉curl自动选择合适的身份认证方法,并选用最安全的方式
SSL--ciphers <list of ciphers>(SSL)指定SSL要使用的加密方式--random-file(SSL)指定包含随机数据的文件路径名

        这里就放张最常见的效果图。

压缩与解压

gzip(压缩文件,后缀".gz")

gzip [options] 文件/目录名 

        下面是一些常用到的参数,但不是全部,只列举部分。

参数作用参数作用
-r递归处理,指定目录下的所有文件及子目录一起处理-c把压缩后的文件输出到标准输出设备,不改动原始文件
-d解压缩文件-f强行压缩文件(不理会文件名或硬链接是否存在及文件是否为软链接)
-l列出压缩文件的相关信息-v显示命令的执行过程

zip(压缩文件,后缀".zip")

zip [option]  压缩后包名 压缩文件所在目录路径 # 压缩文件

        下面列举了几个常用参数。

参数作用参数作用
-A调整可执行的自动解压缩文件-c替每个被压缩的文件加上注释
-d从压缩文件内删除指定的文件-f更新现有的文件
-F尝试修复已损坏的压缩文件-j只保存文件名称及其内容,而不存放任何目录名称
-J删除压缩文件前面不必要的数据-m 包含系统和隐藏文件

bzip2(压缩文件,后缀是".bz2")

bzip2 [options] 需压缩文件名

        下面列举了几个常用参数。

参数作用参数作用
-c将压缩与解压缩的结果送到标准输出-d执行解压缩
-fbzip2在压缩或解压缩时,若输出文件与现有文件同名,预设不会覆盖现有文件。若要覆盖,请使用此参数-kbzip2在压缩或解压缩后,会删除原始的文件。若要保留原始文件,请使用此参数
-s降低程序执行时内存的使用量-t测试".bz2"压缩文件的完整性
-z强制执行压缩-h显示帮助

gunzip(解压缩文件,针对".gz"文件)

gunzip [option] 压缩文件名

        gunzip 是个使用广泛的解压缩程序,它用于解开被 gzip 压缩过的文件,这些压缩文件预设最后的扩展名为".gz"。

        事实上 gunzip 就是 gzip 的硬连接,因此不论是压缩或解压缩,都可通过 gzip 指令单独完成,下面是几个常用参数。

参数作用参数作用
-f强制解压缩,即使已存在同名的解压缩文件-k保留原始的压缩文件。解压缩后的文件会保留在同一目录下,而不会删除原始文件
-n不覆盖已存在的解压缩文件。如果已存在同名文件,则不会进行解压缩操作-q静默模式,不显示解压缩进度和错误信息
-t测试压缩文件的完整性,而不进行实际的解压缩操作-r递归地解压缩指定目录下的所有文件

bunzip2(解压缩文件,针对".bz2"文件)

bunzip2 [option] 压缩文件名
#这里参数很少,所以直接列举。
#-f 解压缩时,若输出的文件与现有文件同名时,预设不会覆盖现有的文件。若要覆盖,请使用此参数
#-k 在解压缩后,预设会删除原来的压缩文件。若要保留压缩文件,请使用此参数
#-s 降低程序执行时,内存的使用量
#-v 解压缩文件时,显示详细的信息

unzip(解压缩文件,针对".zip"文件)

unzip [option] 压缩文件名

         下面列举了几个常用参数。

参数作用参数作用
-f更新现有的文件-l显示压缩文件内所包含的文件
-z仅显示压缩文件的备注文字-a 对文本文件进行必要的字符转换
-C压缩文件中的文件名称区分大小写-n解压缩时不要覆盖原有的文件
-q执行时不显示任何信息-s将文件名中的空白字符转换为底线字符

zcat(查看压缩文件内容)

zcat [option] 压缩文件名
#参数较少,故直接列举
#-A 显示所有文件
#-c 将输出写到标准输出
#-f 强制读取非压缩文件
#-l 列出压缩文件信息
#-h 显示帮助信息

bzcat(查看压缩文件内容,针对".bz2"文件)

bzcat [option] 压缩文件名
#这里的参数比较少,加上和上面大同小异,就不列举了

unzip -l(查看压缩文件内容,针对".zip"文件)

unzip -l 压缩文件名

tar(打包和解包文件)

tar [option] (压缩包名/解压文件夹名)
#举例
tar -cvf archive.tar directory  # 创建 tar 包
tar -xvf archive.tar  # 解包 tar 包
tar -czvf archive.tar.gz directory  # 创建 gzip 压缩的 tar 包
tar -xzvf archive.tar.gz  # 解压 gzip 压缩的 tar 包

        一些主要参数如下。

参数作用参数作用
-c建立新的备份文件-v显示命令的执行过程
-f指定备份文件名-z以gzip格式处理文件
-x从备份中还原文件-w执行时遇到问题先询问当前用户
-U(注意大写)解开压缩文件还原文件前,先解除文件的链接-s还原文件的顺序和备份文件内的存放顺序相同

用户和组

useradd、userdel(添加或删除用户)

useradd [option] 用户名 (组名/家目录路径/ID数...)
userdel -r 用户名 #删除用户登入目录以及目录中所有文件

        下面列举了几个常用参数。

参数作用参数作用
-d指定用户登入时的起始目录-e指定帐号的有效期限
-f指定在密码过期后多少天即关闭该帐号-g指定用户所属的群组
-G指定用户所属的附加群组-n取消建立以用户名称为名的群组
-r建立系统帐号-u指定用户ID

        部分效果图如下。

groupadd、groupdel(添加或删除组)

groupadd [option] 组名
groupdel 组名

        几个主要的参数如下。

参数作用参数作用
-g指定新建工作组的 id-r创建系统工作组,系统工作组的组 ID 小于 500
-o允许添加组 ID 号不唯一的工作组-K覆盖配置文件 /etc/login.defs

        部分效果图如下。注意,当删除的组为某个用户主组时无法直接删除,需要先删除该用户才可以。

passwd(更改用户密码)

passwd [option]  用户名

        下面列举了主要的参数。

参数作用参数作用
-d删除密码-f强迫用户下次登录时必须修改口令
-w口令要到期提前警告的天数-k更新只能发送在过期之后
-l停止账号使用-S显示密码信息
-u启用已被停止的账户-x指定口令最长存活期
-g 修改群组密码-i口令过期后多少天停用账户

        效果图如下。

su(切换用户)

su 用户名

        效果图如下。

搜索和定位

whereis(查找文件)

whereis [opyions] 命令名

        注意,该命令只能用于查找二进制文件、源代码文件和man手册页,一般文件定位用locate命令,下面是一些常用参数。

参数作用参数作用
-b只查找二进制文件-f不显示文件名签的路径名称
-m只查找说明文件-s只查找原始代码文件
-u查找除指定类型之外的文件-S只在设置的目录下查找原始代码文件

        部分效果图如下。

        上图中命令行为查找命令"bash"的位置,输出结果从左到右可理解为“查询的命令名:命令路径 命令的man手册页路径”。

        如果需要单独查询,可分别用参数"-b"和"-m"。

whatis(获取命令简介)

whatis [options] 命令名

        因为这个命令并不常用,所以只列举几个参数,本人学习的时候基本没用过。

参数作用参数作用
-d输出调试信息-v输出详细的警告信息
-r把每个关键词都当做正则表达式解读-L定义本次搜索所使用的区域设置

        下面是部分效果图。

        上图属于精确匹配的结果,在你确定自己知道完整命令名的情况下使用。

        上图命令行的意思为“查找严格匹配cp的命令的介绍”,其实和精确匹配一样作用,只是用了正则表达式里的通配符。(关于正则表达式会在后面的笔记中讲解)

         上图命令行的意思为“查找以cp开头的命令的介绍”。

        上图命令行的意思为“查找以cp结尾的命令的介绍”。

find(查找文件)

find 路径名 [options] [具体指令]

        主要参数列举如下。

参数具体指令作用
-name文件名(支持通配符*和?)按文件名进行查找
-type文件类型(比如f(普通文件)、d(目录)等)按文件类型查找
-size文件大小(前面加"+"或"-"表示大于或小于指定大小,单位可以是c(字节)、w(字数)、b(块数)、k(KB)、M(MB)等)按文件大小查找
-mtime天数(前面加"+"或"-"表示在指定天数前后,需要为整数)按修改时间查找
-user文件所有者名按文件所有者名查找
-group文件所属组名按文件所属组名查找
-atime数字(整数,可为正、负或0)查找在(数字)*24小时内被访问过的文件
-cmin数字(整数,可为正、负或0)查找在(数字)分钟内状态(比如权限)发生变化的文件
-mmin数字(整数,可为正、负或0)查找在(数字)分钟内被修改过的文件

        下面是部分效果图。

        下图是查找该目录下的所有普通文件。

        下图是查找该目录下的所有目录。

        下图是查找该目录下大小大于5M的文件。

        下图是查找该目录下7天前被修改过的文件。

        下图是查找该目录下1分钟前权限发生变化的文件。

        下图是查找该目录下1分钟前被访问过的文件。

locate(查找符合条件的文件)

locate [option] 文件名

        一些主要参数如下。(这个命令也需先安装" mlocate "包,然后更新数据库" updatedb "后才能使用)

参数作用参数作用
-b仅匹配路径名的基本名称-c只输出找到的数量
-e仅打印当前现有文件的条目-S不搜索条目,打印有关每个数据库的统计信息
-n至多显示 n个输出-r 使用基本正则表达式
-i忽略大小写-q安静模式,不会显示任何错误讯息

        部分效果图如下。

grep(查找文件中含指定字符串的行)

grep [options] 字符串 文件名

        这里参数很多,就不一一列举,只列举几个常用的。

参数作用参数作用
-i匹配时忽略大小写-v反向查找,只打印不匹配的行
-n显示匹配行的行号-r递归查找子目录中的文件
-l只打印匹配的文件名-c只打印匹配的行数
-A显示符合范本样式的那一列时也一并显示该行之后的内容-o只显示匹配字符串的部分
-s 不显示错误信息-w只显示全字符合的列

        下面是部分效果图。

        上图中可以看出,不加参数"-i"的话,输入A是无法找到a的相关匹配结果的,因为大小写不一样。

        上图是一并输出匹配行的行号。

        上图是输出一共有多少行匹配。

        上图是输出文件内容含指定字符串的文件名称。

        上图是输出没有a的所有行,包括空白行。

        上图是输出匹配的每行内容,但只输出字符串的部分。

        上图中,因为没有哪一行只有a,所以找不到全字符合的行,无输出。

        这些是本人对Linux基本命令的一些总结,有些可能没有那么完善,如果有错误请指出,谢谢。

;