Bootstrap

01-Linux命令总结-手册

Linux系统常用命令

系统中的特殊符号

符号含义示例
.当前目录cd .
上一级目录cd …
{}生成序列批量创建文件
>重定向符号echo
>>追加重定向符号echo
|管道符(将前一命令执行结果传递给下一命令)

Linux命令总结

声明

  • 本文中,[参数]表示文件、目录或路径; [name]表示文件名;

    ​ [number]表示任意整数;[letter]表示任意字母;[word]表示任意内容;


man 查看帮助手册

语法形式

man	[linux命令]

示例

[root@Dezyan ~]# man mkdir

–help 查看帮助信息

语法形式

[Linux命令] --help

示例

[root@Dezyan ~]# mkdir --help

shutdown 关机重启命令

语法形式

shutdown
shutdown [选项]

选项

-c 				# 取消关机
-h now/[number] # now:立刻关机;[number]:n分钟后关机
				# <=>halt;init 0;
-r [number] 	# [number]:n分钟后重启系统;不加[number]:默认一分钟后重启
				# <=>reboot;init 6;

pwd 查看当前所在的路径

语法形式

pwd

示例

[root@Dezyan ~]# pwd
/root

cd 切换用户当前工作目录

语法形式

cd [选项] [参数]

选项(可为空)

~	# 切换到家目录 <=> 直接输入cd
-	# 返回上一次所在的目录
.	# 进入当前目录
..	# 进入上一级目录
	# ../../	进入上两级目录
/	# 进入到根目录

示例

#进入到/opt目录下
[root@Dezyan ~]# cd /opt
[root@Dezyan opt]#

ls 显示目录内容列表

语法形式

ls [选项] [参数]

选项(可为空)

-l	#显示文件的详细信息	<=>	ll
-a	#显示目录下所有文件信息(包括隐藏文件)
-i	#显示文件inode号
-s	#显示文件大小信息
-h	#显示文件大小信息(以人类可读方式查看)
-t  # 按时间信息排序。
#常用 -lhi 来展示文件全部信息;

示例

[root@Dezyan ~]# ls -l /opt/
总用量 0
dr-xr-xr-x 5 root root 79  324  2023 kylin-sm-package
drwxr-xr-x 4 root root 58 1025 00:43 patch_workspace
[root@Dezyan ln]# ls -lih /etc/sysconfig/network-scripts/ifcfg-ens33 
1324991 -rw-r--r-- 1 root root 357 1024 16:45 /etc/sysconfig/network-scripts/ifcfg-ens33

ls -lhi输出内容详解

[root@Dezyan ~]# ls -lhi /etc/hosts
67162862 -rw-r--r-- 1 root root 158  6月 23  2020 /etc/hosts
第1列		文件inode号信息: 从磁盘调取查看数据的索引(指示板)
第2列		文件数据类型:    文本文件 目录文件 设备文件 链接文件...
第3列		文件权限信息:    文件如何进行管理操作,登录系统用户可以不可以管理操作指定文件
第4列		数据文件硬连接数:查看文件数据多个方式
第5列		文件数据属主信息:文件创建者 文件管理者
第6列		文件数据属组信息:除了文件创建者和管理者,还有哪些其他的系统用户可以管理文件“}
第7列		文件数据大小信息:占用磁盘空间情况(默认大小单位 字节)
第8列		文件数据修改时间:文件信息被修改编辑的时间记录信息

stat 用于显示文件的状态信息(时间)

stat输出的文件信息相较于ls更全面

语法格式

stat [参数]

输出内容详解(ubt系统)

root@Dezyan01:~# stat /etc/hosts
  File: /etc/hosts
  Size: 204       	Blocks: 8          IO Block: 4096   regular file
Device: fc03h/64515d	Inode: 654183      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    4/     adm)
Access: 2024-11-04 20:17:58.347748698 +0800
Modify: 2024-09-26 16:56:53.159484223 +0800
Change: 2024-09-26 16:56:53.159484223 +0800
 Birth: 2024-09-26 16:56:53.159484223 +0800

对应中文可将字符集改为中文查看,或在国产Linux系统kylin中查看:

[root@Dezyan ~]# stat /etc/hosts
  文件:“/etc/hosts”
  大小:158       	块:8          IO 块:4096   普通文件
设备:fd00h/64768d	Inode:67162862    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
最近访问:2024-11-04 08:14:07.897695822 +0800
最近更改:2020-06-23 14:11:43.000000000 +0800
最近改动:2024-10-25 00:42:08.647004736 +0800
创建时间:-
  • Access 访问时间 atime 看一次文件,时间就会改变。
  • Modify 修改时间 显示文件上一次修改时间
  • Change 属性改变时间 ctime 上一次修改文件属性的时间
  • Birth 创建时间 btime 文件的创建时间

inode和block

inode(索引节点)

每个文件、目录和软链接在文件系统中都有一个与之对应的inode。

注意:inode号是inode的唯一标识符,它是一个数字,用于在文件系统中快速定位inode。

  • 存储文件的属性信息inode存储文件的元信息,包括文件的字节数、文件拥有者的User ID(UID)、文件的Group ID(GID)、文件的读、写、执行权限、文件的时间戳(atime、ctime、mtime)等。
  • 作为文件的索引:inode不仅存储文件的属性信息,还指向文件的实际数据块(指向数据块的指针)。通过inode,系统可以快速定位和访问文件内容。
  • 硬连接:具有相同inode的文件互为硬连接文件,这意味着它们共享同一个inode,但可以有不同的文件名。

block(数据块)

文件存取的最小单位,用来存储文件的具体内容。

注意:一个文件至少占用一个block,如果文件大小超过一个block的容量,则会占用多个block。

​ 如果未满一个block,仍会占用一个block,不会将剩余的空间分给其他文件存储使用。

inode和block的关系

  • 在Linux文件系统中,每个文件必须占用一个inode和一个或多个block。

  • inode用于存储文件的元信息和作为文件的索引,而block用于存储文件的具体内容。

  • 通过inode中指向数据块的指针,系统可以快速定位和访问文件的数据(block)。

file 查看文件类型

语法格式

file [选项] [参数]

选项

-b		#列出辨识结果时,不显示文件名称;

示例

#查看/etc/hosts的文件类型,且输出时不显示文件名称
[root@Dezyan ~]# file -b /etc/hosts
ASCII text

常见的文件类型

-		#普通文件;
d		#目录;
l		#软连接;
c		#字符设备;/dev/null,不断吸收(黑洞);/dev/urandom ,/dev/zero不断输出(白洞);
b		#块设备;
s		#socket文件、套接字文件;

which 查找并显示给定命令的绝对路径

语法形式

which [参数]

示例

#查找pwd、vim命令的绝对路径
[root@Dezyan ~]# which pwd
/usr/bin/pwd
[root@Dezyan ~]# which vim
/usr/bin/vim

du 显示每个文件和目录的磁盘使用空间

语法形式

du [选项] [参数]

选项

-s       #仅显示总计,只列出最后加总的值。
-h       #以K,M,G为单位,提高信息的可读性。
#上述两个参数通常一起使用,表示查看目录或者文件的大小

示例

#将/var/log中的所有文件和目录按大小排序
[root@Dezyan ~]# du -sh /var/log/* | sort -rhk1

touch 创建新的空文件

语法形式

touch [参数] [参数] ....

参数选项

{[number]/[letter]..[number]/[letter]}	#批量创建文件

示例

#创建单个文件
[root@Dezyan ~]# touch 1.txt
#同一目录下创建多个文件
[root@Dezyan ~]# touch 1.txt 2.txt 3.txt
#不同目录下创建多个文件
[root@Dezyan ~]# touch 1.txt /opt/2.txt
#批量创建Dezyan01.txt....Dezyan10.txt文件
[root@Dezyan Dezyan01]# touch Dezyan{01..10}.txt
[root@Dezyan Dezyan01]# ls
Dezyan01.txt  Dezyan03.txt  Dezyan05.txt  Dezyan07.txt  Dezyan09.txt
Dezyan02.txt  Dezyan04.txt  Dezyan06.txt  Dezyan08.txt  Dezyan10.txt

注意

#如果创建的文件存在,只会修改文件时间,不会修改内容;
#使用绝对路径创建时,必须保证目录存在;

cat 查看文件的内容

语法形式

cat [选项] [参数]

选项

-n	#显示文件行数
-E	#每行行尾显示'$'符

示例

[root@Dezyan ~]# cat -n /etc/hosts
     1	127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
     2	::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

mkdir 创建目录

语法形式

mkdir [选项] [参数]

选项

-p	#递归创建目录

参数选项

{[number]/[letter]..[number]/[letter]}	#批量创建目录

示例

#同一目录下创建多个目录
[root@Dezyan dzt]# mkdir a b c
[root@Dezyan dzt]# ls
a  b  c
#在不同目录下创建多个目录
[root@Dezyan dzt]# mkdir f /opt/e
#递归创建多级目录
[root@Dezyan dzt]# mkdir -p /aa/bb/cc/dd
#批量创建Dezyan01....Dezyan10目录
[root@Dezyan bb]# mkdir Dezyan{01..10}
[root@Dezyan bb]# ls
cc        Dezyan02  Dezyan04  Dezyan06  Dezyan08  Dezyan10
Dezyan01  Dezyan03  Dezyan05  Dezyan07  Dezyan09

tree 树状图列出目录的内容

语法形式

tree [选项] [参数]

选项

-L [number]	#显示一级目录下所有文件

示例

#显示目录下所有文件
[root@Dezyan ~]# tree dzy
dzy
├── a
│   └── b
│       └── c
│           └── d
│               └── e
#显示目录下一级目录的所有文件
[root@Dezyan ~]# tree -L 1 dzt
dzt
├── a

cp 文件的复制操作

语法形式

cp [选项] [源文件地址参数] [目标地址参数]

选项

-r	#递归处理,将指定目录下的所有文件与子目录一并处理;
-i	#覆盖既有文件之前先询问用户;
-p	#保留源文件或目录的属性;
-d	#当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录;
-a	#此参数的效果和同时指定"-dpR"参数相同;

示例

#将某一文件复制到某一目录之中
[root@Dezyan ding]# cp 1.txt /zhi/
[root@Dezyan ding]# ll /zhi
-rw-r--r-- 1 root root 11 1025 23:09 1.txt
#将某一目录及目录中的所有文件复制到另一个目录之中
[root@Dezyan ding]# ll aa/bb/cc/dd/2.txt
-rw-r--r-- 1 root root 0 1025 23:11 aa/bb/cc/dd/2.txt
[root@Dezyan ding]# cp -r /ding /zhi
[root@Dezyan ding]# tree /zhi
/zhi
├── 1.txt
└── ding
    ├── 1.txt
    └── aa
        └── bb
            └── cc
                └── dd
                    └── 2.txt                    

mv 移动文件或对文件重命名

语法形式

mv [选项] [源文件地址参数] [目标地址参数]

选项

-i	#移动既有文件之前先询问用户;
-t	#可更改语法顺序为	mv [选项] [目标地址] [源文件地址] 

示例

#对当前目录的文件进行重命名(移动同理)
[root@Dezyan ding]# ll
-rw-r--r-- 1 root root 11 1025 23:09 1.txt
drwxr-xr-x 3 root root 16 1025 23:20 aa
[root@Dezyan ding]# mv ./1.txt ./aa.txt
[root@Dezyan ding]# ls
aa  aa.txt

rm 删除给定的文件和目录

语法形式

rm [选项] [参数] [参数] [参数] ...

选项

-i	#删除文件之前先询问用户;
-r	#递归处理,将指定目录下的所有文件与子目录一并处理;
-f	#强制删除文件或目录;

示例

#强制删除一个(多个)文件
[root@Dezyan ding]# touch 1 2 3 4 
[root@Dezyan ding]# ls
1  2  3  4  aa  aa.txt
[root@Dezyan ding]# rm -f 1 2 3 4
[root@Dezyan ding]# ls
aa  aa.txt
#强制删除一个目录及目录下的所有文件
[root@Dezyan ding]# tree aa
aa
└── bb
    └── cc
        └── dd
            └── 2.txt
3 directories, 1 file
[root@Dezyan ding]# rm -rf aa
[root@Dezyan ding]# tree aa
aa [error opening dir]
0 directories, 0 files

vi编辑器

三种模式及相关命令

  • 命令行模式(在其他两种模式下,按Esc即可进入) (使用vi编辑器是此模式为进入时的默认模式)

    相关命令

<#>#移动:
G		#移动光标到文件<最后一行>;
gg		#移动光标到文件内容的的<第一行>;
Ngg		#移动光标到文件内容的<第N行>;
^		#移动光标到当前行<行首>;
$		#移动光标到当前行<行尾>;
##删除:
x或X		#删除一个字符,x删除光标<后>的,而X删除光标<前>的;
D		#删除从当前光标到光标所在行尾的<全部字符>;
dd		#删除光标行<整行>的内容;
ndd		#删除当前行及其后<n-1行>;
##复制粘贴:
nyy		#将当前行及其下n行的内容复制;
p		#粘贴文本操作,将复制的内容粘贴到当前光标所在位置的<下方>;
P(大写)  #粘贴文本操作,将复制的内容粘贴到当前光标所在位置的<上方>;
##查找:
/[字符串]	#从<当前光标所在位置>开始向文件<尾部>查找指定字符串的内容;[字符串]	#从<当前光标所在位置>开始向文件<头部>查找指定字符串的内容;
				# n	向下继续查找;
				# N 向上继续查找;
##撤销:
u		#撤销上一次的操作;
  • 插入模式(在命令行模式下,按i即可进入)

    相关命令

A	#进入插入模式,并在<行末>添加文本;
a	#进入插入模式,并在当前字符<后>添加文本;
i	#进入插入模式,并在当前字符<前>插入文本;
I	#进入插入模式,并在<行首>插入文本;
o	#进入插入模式,并在当前行<后面>插入一空行;
O	#进入插入模式,并在当前行<前面>插入一空行;
  • 底行模式(在命令行模式下,按:即可进入)

    相关命令

set nu		#编辑时显示行号;
set nonu	#编辑时不显示行号;
w			#在执行存盘操作;w!表示强制保存;
q			#执行退出vi操作;q!表示强制退出;
wq			#执行存盘退出操作;
$			#光标跳转到最后一行的行首;

示例:批量添加注释

1.	使用vim打开文件;
2.	ctrl+v选择需要添加注释的行;
3.	输入大写I,并输入#;
4.	Esc退出,回车,完成批量注释;

echo 输出指定的字符串或者变量

语法形式

echo [word] [重定向符号] [参数]

重定向符号

>		#覆盖输入;
>>		#追加输入;

示例

#将手机号覆盖输入到phone.txt文件中
[root@Dezyan Dezyan01]# echo 110 > phone.txt
[root@Dezyan Dezyan01]# cat phone.txt 
110
#将手机号追加输入到phone.txt文件中
[root@Dezyan Dezyan01]# echo 120 >> phone.txt
[root@Dezyan Dezyan01]# echo 119 >> phone.txt
[root@Dezyan Dezyan01]# cat phone.txt 
110
120
119

tail 在屏幕上显示指定文件的末尾若干行

语法形式

tail [选项] [参数]

选项

-[number]/-n[number]	#输出文件的尾部number行内容;
-f						#显示文件最新追加的内容;

示例

#查看/var/log/secure日志文件中的后10行
[root@Dezyan ~]# tail -n10 /var/log/secure

head 显示文件的开头部分

语法形式

head [选项] [参数]

选项

				#默认显示前10行内容;
-[number]		#输出头部number行的内容;

示例

#查看/var/log/secure日志文件中前5行的内容
[root@Dezyan ~]# head -5 /var/log/secure 
Oct 24 16:46:29 Dezyan polkitd[758]: Loading rules from directory /etc/polkit-1/rules.d
Oct 24 16:46:29 Dezyan polkitd[758]: Loading rules from directory /usr/share/polkit-1/rules.d
Oct 24 16:46:29 Dezyan polkitd[758]: Finished loading, compiling and executing 5 rules
Oct 24 16:46:29 Dezyan polkitd[758]: Acquired the name org.freedesktop.PolicyKit1 on the system bus
Oct 24 16:46:30 Dezyan sshd[948]: Server listening on 0.0.0.0 port 22.

less 上下翻页浏览文件内容

语法形式

less [参数]

快捷键

ctrl + f		#下一页;
ctrl + b		#上一页;
g				#第一行;
G				#最后一行;
[number]		#第N行;
/				#搜索;
q				#退出;

more 显示文件内容,每次显示一屏

语法形式

more [参数]

⭐️⭐️⭐️四剑客⭐️⭐️⭐️

find 在指定目录下查找文件

语法形式

find [参数1] [选项] [参数2]
find [参数1] [选项] [参数2] [or/and] [选项] [参数2]

参数1

#具体的文件或者目录;

参数2

可为文件名		#当为文件名时,必须要用“”引住文件名;
文件类型		 #- 普通文件类型 ;d 目录文件类型;l 链接文件类型;
文件inum号
文件大小		#<等于>、<大于>、<小于>分别用<空格><+><->;

or/and

#使用find命令可以多条件查找;
and			#需要同时满足两个、多个条件时(and可以省略);
or			#只需满足其中之一条件时;

选项

-type				#按照文件类型查找;
-name				#按照文件名字查找;
-iname				#按照文件名字查找(忽略大小写);
-inum				#按照文件iNode号查找;
-maxdepth [number]	#按照深度等级查找(向下遍历);
-mindepth [number]	#按照深度等级查找(向上遍历);
-size				#按照文件大小查找;

示例

#查找/目录下文件大小大于500M的文件
[root@Dezyan ~]# find / -size +500M
/proc/kcore
#查找/目录下文件大小大于500M且文件类型为目录
[root@Dezyan ~]# find / -size +50M -type d
xargs 给其他命令传递参数的一个过滤器

注意:在xargs后别名失效

语法形式

find …………	| xargs [文件操作,命令]
#可以理解为将|前执行的结果甩到末尾,再执行|后的命令

相关使用方法

ls -l/cat			# 查看找到的文件;
rm [选项]				#将查找的文件删除;
-i cp/mv {} [参数]	#将查找到的文件复制/移动到[参数位置];
cp/mv -t [参数]		#将查找到的文件复制/移动到[参数位置];

示例

#将/etc/下大于9M的文件复制到~目录下
[root@Dezyan ~]# find /etc/ -size +9M | xargs cp -t ~
[root@Dezyan ~]# ls ~ | grep 'hwd'
hwdb.bin
exec 调用并执行指定的命令

语法形式

find …………	-exec [命令] {} [参数] \;

注意:其中==;==为shell中命令的分隔符,可将多个命令同时执行:mkdir test;touch 1.txt。

相关使用方法

rm [选项] {} \;		#将查找的文件删除;
cp/mv {} [参数] \;	#将查找到的文件复制/移动到[参数位置];

示例

#将/etc/下大于9M的文件复制到~目录下
[root@Dezyan ~]# find /etc/ -size +9M -exec  cp {} ~ \;
[root@Dezyan ~]# ls ~ | grep 'hwd'
hwdb.bin
``和$()

语法形式

[命令+选项] `find ……………` 
[命令+选项] `find ……………` [参数]

$()效果与``相同

注意:如果一段命令被添加上了``,那么在整体命令中,需要先执行``中的命令,类似于运算法则中的加减乘除先算()。

相关使用方法

cp/mv `find ……` [参数]
ls/rm……

示例

#将/etc/下大于9M的文件复制到~目录下
[root@Dezyan ~]# cp -a `find /etc/ -size +9M` ~

grep 强大的文本搜索工具

语法形式

grep [选项] '[word]' [参数]

选项

--color			#对筛选出的WORD加颜色显示;
-i				#搜索时不区分大小写;
-n				#搜索出的结果显示行号;
-v				#反转查找;
-o				#只输出文件中搜索到的部分;
-E				#识别扩展正则进行过滤;
-r				#当指定要查找的是<目录>而非文件时,必须使用这项参数;

示例

#在/etc/passwd文件中过滤出root的行
[root@Dezyan ~]# grep --color 'root' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
#不区分大小写过滤出 /etc/ssh/sshd_config 文件中包含`port 22`的行并输出行号
[root@Dezyan ~]# grep  --color  -i -n  'port 22'   /etc/ssh/sshd_config 
17:#Port 22
#排除(取反)/etc/ssh/sshd_config文件中的#(井号)
[root@Dezyan ~]# grep -v '#'  /etc/ssh/sshd_config
#过滤掉某文件中的空行,只显示有内容的行
[root@Dezyan ~]#grep -v '^$' file.txt 

sed 功能强大的流式文本编辑器

语法形式

sed [选项] '[模式][动作]' [参数]

选项

-n			#取消内存空间默认输出;不添加时sed命令会默认输出文件所有内容,添加后只会输出过滤出的内容
-r			#使模式中的正则表达式支持扩展正则

模式

number								#按行查找,查找第n行
number/正则符号,number/正则符号		  #		查找n到m行
/字符串或正则表达式/					  #	    模糊查询,查询包含此字符串的行
/开头字符串/,/结尾字符串/				 #	 匹配区间:查询两个字符串之间的内容(也可用正则)

动作

p						#输出打印过滤出的内容
d						#删除过滤出的内容
[number]c	字符串		  #将第n行替换为xxx
[number]i	字符串		  #在第n行插入xxx
[number]a	字符串		  #在第n行追加xxx 
s###g					#1.其中,g代表全局替换
						#2.s///g与s@@@g与s###g效果相同
						

示例

1.a.txt文件
[root@Dezyan ~]# cat -n a.txt 
     1	The first snow came. 
     2	How beautiful it was, falling so silently all day long,
     3	all night long.
     4	on the mountains, on the meadows, 
     5	on the roofs of the living, on the graves of the dead! A
     
2.查看a.txt文件第三行的内容
[root@Dezyan ~]# sed -n '3p' a.txt 
all night long.

3.查看a.txt文件中第三行到结尾的内容
[root@Dezyan ~]#  sed -n '3,$p' a.txt 
all night long.
on the mountains, on the meadows, 
on the roofs of the living, on the graves of the dead! A

4.查看a.txt中以o开头或以T开头的行
[root@Dezyan ~]# sed -rn '/^o|^T/p' a.txt 
The first snow came. 
on the mountains, on the meadows, 
on the roofs of the living, on the graves of the dead! A

5.查看a.txt文件中包含so与meadows行之间的内容
[root@Dezyan ~]# sed -n '/so/,/meadows/p' a.txt 
How beautiful it was, falling so silently all day long,
all night long.
on the mountains, on the meadows,

6.在a.txt文件1到3行后都添加一行Dezyan
[root@Dezyan ~]# sed '1,3i Dezyan' a.txt 
Dezyan
The first snow came. 
Dezyan
How beautiful it was, falling so silently all day long,
Dezyan
all night long.
on the mountains, on the meadows, 
on the roofs of the living, on the graves of the dead! A

7.将a.txt文件中所有的(第一个)on替换为under
[root@Dezyan ~]# sed 's#on#under#g' a.txt (只替换第一个只需将g去掉即可)
The first snow came. 
How beautiful it was, falling so silently all day lunderg,
all night lunderg.
under the mountains, under the meadows, 
under the roofs of the living, under the graves of the dead! A

8.查找roofs所在行,并将其替换为floor,并且只显示替换行
[root@Dezyan ~]# sed -n '/roofs/s#roofs#floor#gp' a.txt
on the floor of the living, on the graves of the dead! A

注意:

  • 动作中有p,选项中必有n

  • 在使用匹配区间( /开头字符串/,/结尾字符串/ )时,尽量使用文件内容中唯一的、不重复的字符串

    • 若只有一个开头,有两个甚至多个结尾时:输出的内容只会是开头到第一个结尾字符串之间的内容
    • 若只有开头,结尾字符串没有:输出的内容为开头字符串到文件末尾

awk 文本和数据进行处理的编程语言

语法形式

awk '{print $[number]}' [参数]

选项

[number]		#取出文件的第N行;
#				 NF代表最后一行;
#				 (NF-[number])代表倒数第n-1行;

示例

[root@Dezyan ~]# awk  '{print $NF}'   awk.txt

wc 统计文件的字节数、字数、行数

语法形式

wc [选项]  [参数]

选项

			# 查看文件的字节数、字数、行数;
-l			# 统计行数;

示例

#查看文件的字节数、字数、行数
[root@Dezyan ~]#wc test.txt
## 输出结果
  7     8     70     test.txt
##行数 单词数 字节数    文件名

#统计文件行数
[root@Dezyan ~]#wc -l /etc/services 
11473 /etc/services

sort 对文本文件中所有行进行排序

语法形式

sort [选项]  [参数]

选项

		#<=> cat 文件 | sort  默认第一列内容进行排序(从小到大)
-r		#第一列内容进行排序(从大到小);
-n		#按照数字正序排序;
-rn		#逆序排序;
-nk2	#按照第二列的大小正序排序;
-h      #根据存储容量排序(注意使用大写字母,例如:2K 1G)。

示例

#将文件按照第二列的大小逆序排序
[root@Dezyan ~]# sort -rnk2  num.txt
#将/var/log中的所有文件和目录按大小排序
[root@Dezyan ~]# du -sh /var/log/* | sort -rhk1

uniq 显示或忽略重复的行。

语法形式

uniq [选项]  [参数]

选项

		#邻行去重;
-i      #忽略大小写的差异;
-d      #所有邻近的重复行只被打印一次。

示例

日志分析实战(四剑客、sort、uniq、head的实际应用)

1)查看用户登录失败的ip地址
  • 1️⃣过滤出failed password,失败登录。 取行
  • 2️⃣ 提取出这行中的ip的列。 取列
  • 3️⃣ 对ip进行排序。 相同的ip在一起。
  • 4️⃣ 去掉重复,统计次数。 去重并统计次数。uniq -c
  • 5️⃣ 对次数排序并取出前20
#本命令在ubt系统中使用
root@Dezyan02:~# grep -i 'failed password'   /var/log/auth.log |awk '{print $(NF-3)}' |sort |uniq -c |sort -rn |head -20 
2)若IP以列规律显示,亦可使用awk命令
awk '{print $1}'  access.log  |sort  |uniq -c |sort -rn |head -20 

lrzsz 上传、下载文件的插件

安装

yum install -y  lrzsz

命令说明

rz 		#上传  rz回车即可或直接拖拽
sz 		#下载  sz /etc/hostname  下载指定的文件。

⭐️压缩与解压缩

tar

语法形式

tar [选项1] [压缩文件] 
tar [选项1] [压缩包存放路径] [待压缩文件]
tar [选项1] [压缩包存放路径] [待压缩文件] [选项2]

选项1

z		#采用zip方式进行压缩数据;
c		#创建一个压缩包文件;
v		#显示压缩数据过程;
f		#指定压缩路径信息 创建压缩包文件名称;
t		#显示压缩包内容;
x		#解压文件;

选项2

-C		#解压到指定目录;

选项应用

zcvf	简写zcf		#压缩文件;
ztvf	简写tf		#显示压缩包内容;
zxvf	简写xf		#解压文件

示例

#压缩a.txt文件到/tmp/目录中并命名为a.tar.gz
[root@Dezyan ~]# tar zcvf /tmp/a.tar.gz a.txt
#查看此压缩文件
[root@Dezyan ~]# tar ztvf /tmp/a.tar.gz 
-rw-r--r-- root/root       379 2024-10-26 17:14 a.txt
#解压此文件到/目录
[root@Dezyan ~]# tar zxvf /tmp/a.tar.gz -C /

注意:当使用zcf压缩文件时,会有如下提示信息:

[root@Dezyan ~]# tar zcf ./awk.tar.gz /etc/ 
tar: 从成员名中删除开头的“/”

该提示是tar命令安全机制,把绝对路径转换为相对路径。解压的时候当前目录。避免解压也是绝对路径,覆盖对应的文件目录。

gzip(不常用)

语法形式

gzip [参数]

区别

#使用此命令压缩文件会将原文件删除,只留下压缩文件;

zip\unzip

zip 解压缩文件

语法形式

zip -rq [压缩包存放路径] [待压缩文件]
unzip 用于解压缩由zip命令压缩的压缩包

语法结构

unzip [参数]		#解压到当前目录

hostnamectl 查看与修改主机名

相关命令

hostnamectl							#查看主机名版本等信息
hostname							#查看主机名
cat /etc/hostname					#查看主机名
hostnamectl set-hostname [NAME]		#永久更改主机名
hostnamectl [NAME]					#临时更改主机名

查看版本信息

[root@Dezyan ~]# cat /etc/os-release

uname 打印系统信息(内核版本)

语法形式

uname [选项]

选项

-a		#按顺序打印全部信息
-r		#打印内核release

lscpu 显示有关CPU架构的信息

free 显示内存的使用情况

常用选项

#通常使用
free -h 		#查看内存使用情况;

df 显示磁盘的相关信息

常用选项

df -h			#查看硬盘空间的使用情况;

ln 软硬链接的创建

  • 在实际生产环境中,我们更经常使用软连接;

  • 硬链接的作用一般只有备份文件,然而由于所有硬链接都指向同一个inode,共享相同的数据块;

  • 所以硬链接只能预防rm命令的删除,不能预防内容修改,依旧容易造成数据的丢失,所以一般都使用 cp 命令进行备份;

语法格式

ln [选项] [源文件] [目标文件地址]

选项

-s		#为源文件创建软连接

示例

#为网卡配置文件创建一个软链接和一个硬链接在/ln目录下
#软连接
[root@Dezyan ~]# ln -s /etc/sysconfig/network-scripts/ifcfg-ens33 /ln/ens33.soft
#硬链接
[root@Dezyan ~]# ln  /etc/sysconfig/network-scripts/ifcfg-ens33 /ln/ens33.hard
[root@Dezyan ~]# ll /ln/
总用量 4
-rw-r--r-- 2 root root 357 10月 24 16:45 ens33.hard
lrwxrwxrwx 1 root root  42 11月  5 04:37 ens33.soft -> /etc/sysconfig/network-scripts/ifcfg-ens33

软硬链接的区别

软连接硬链接
创建对象文件、目录文件
iNode号与源文件不同与源文件相同
文件属性依赖性:如果目标文件被移动或删除,软链接将变为“死链接”。独立性:硬链接可以有多个不同的文件名,但它们指向的是同一个文件数据。
权限软链接有自己的权限和所有权,因为它们是独立的文件,只是内容指向另一个文件。所有硬链接共享相同的权限和所有权,因为它们实际上是同一个文件的不同引用。
链接指向文件名文件的inode(所有硬链接都指向同一个inode,共享相同的数据块)
文件系统可以跨越不同的文件系统不能跨越不同的文件系统
空间占用占用少量空间,因为它们需要存储目标文件的路径。不占用额外空间,因为它们共享相同的数据块。
删除行为由于它们只是指向目标文件的路径,所以删除不会影响目标文件。只要至少有一个硬链接存在,文件数据就不会被删除。只有当所有硬链接都被删除后,文件数据才会被释放。

为什么一个空文件夹的硬链接数是2?

  • 我们知道,在Linux系统中,文件和目录的硬链接数代表了有多少个目录项直接指向该文件或目录的inode。
  • 对于一个空文件夹来说,它的硬链接数通常是2,这是因为:
    • 当我们使用ls -a 查看一个空文件夹时,Linux系统输出的内容如下:
[root@Dezyan ~]# ls -a 11
.  ..
  • 其中:

    • ..代表父目录中的目录项每个目录至少有一个硬链接,即其父目录中的目录项。这是目录的第一个硬链接。
    • .代表目录自身每个目录都有一个指向自身的目录项.,这是目录的第二个硬链接。
  • 注意:如果目录不为空,那么它还会有额外的硬链接,因为目录中的每个文件或子目录都会在该目录的inode中增加一个硬链接。

用户相关命令

用户的分类

  • 用户分类的本质其实是看用户的uid和命令解释器
用户分类uid命令解释器说明
root0/bin/bash系统中权限最高的用户;家目录为/root
普通用户uid>=1000/bin/bash权限低,只能管理自己的/home/xxx家目录
虚拟(傀儡)用户1<=uid<1000/sbin/nologin无法登录,只是让服务或程序正常运行,无家目录

用户信息与密码文件

  • /etc/passwd用户信息文件
[root@Dezyan ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
  • 以“:”为分隔符,每列的意义为:
第1列第2列第3-4列第5列第6列第7列
用户名x 密码标记UID:GID说明信息(可以为空)用户家目录(root,普通用户即可)命令解释器
/bin/bash 可以登录系统
/sbin/nologin 虚拟用户
  • /etc/shadow密码信息文件
  • 常用的命令解释器:
    • /bin/bash
    • /bin/sh
    • /bin/dash #ubt,debian命令解释器
    • /sbin/nologin 虚拟用户
    • … /bin/csh /bin/tcsh /bin/xxxx

⭐️useradd 添加用户

语法形式

useradd [选项] [用户名]

选项

-c		#添加备注文字,可以是任何文本字符串;
-m		#创建用户家目录(如果用户家目录不存在可使用此参数);
-M		#创建用户时,不创建用户家目录;
-s		#指定该用户的命令解释器;
-u		#指定该用户的uid;

注意

  • 在红帽系列系统中,创建用户时,不加任何选项时,会默认创建家目录并且指定命令解释器为/bin/bash

  • 在ubt系列系统中,创建用户时,不加任何选项时,不会创建家目录,并且命令解释器会指定为/bin/dash(sh)

示例

#创建一个uid为10011,用户名为vmware的虚拟用户,并添加“虚拟机”注释
[root@Dezyan ~]# useradd -s /sbin/nologin -M -u 10011 -c "虚拟机" vmware
[root@Dezyan ~]# tail -1 /etc/passwd
vmware:x:10011:10011:虚拟机:/home/vmware:/sbin/nologin
#在ubt系统中创建一个普通用户并创建家目录指定命令解释器为/bin/bash
root@Dezyan01:~# useradd -s /bin/bash  -m  dezyan
root@Dezyan01:~# tail -1 /etc/passwd
dezyan:x:12347:12347::/home/dezyan:/bin/bash
root@Dezyan01:~# ll /home/
total 12
drwxr-xr-x  3 root   root   4096 Nov  6 15:26 ./
drwxr-xr-x 19 root   root   4096 Nov  1 20:15 ../
drwxr-x---  2 dezyan dezyan 4096 Nov  6 15:26 dezyan/

su 切换用户

语法形式

su - [用户名]

注意

su命令切换用户,一些环境变量没有更新
su - 的时候环境变量就更新。

passwd/chpasswd 设置用户密码

  • 交互式设置密码
passwd	[用户名]
  • 非交互式设置密码
#红帽类系统
echo '[密码]' | passwd --stdin [用户名]
#ubt类系统(也可以在红帽类系统使用)
方法1:创建普通文件passwd.txt,内容格式为:
		[用户名]:[用户密码]
	  可根据文件内容批量修改:
		cat passwd.txt | chpasswd
方法2:更改单个用户密码:
		echo '[用户名]:[密码]' | chpasswd

示例

#在kylin系统中更改dezyan用户密码为dingzhiyan1016
echo 'dingzhiyan1016' | passwd --stdin dezyan
echo 'dezyan:dingzhiyan1016' | chpasswd

查看用户信息

whoami			#查看系统当前用户;
id [用户名]	  #查看用户uid,gid;是否存在;属于哪些组;
w				#查看用户登录后的当前操作;负载信息;
last			#查看当前用户历史的登录情况;
lastlog			#查看所有用户的登录情况;

userdel 删除用户

语法形式

userdel [选项] [用户名] 

选项

-r		#删除用户的同时删除家目录;
-f		#强制删除该用户,即使该用户已登录;

注意

1.userdel [用户名]	删除用户时不会删除用户家目录;
2.userdel操作在实际环境中很危险,通常会修改/etc/passwd文件,在需要删除的用户签添加注释('#'),确认无风险后再进行删除;

usermod 修改用户的基本信息

语法形式

usermod [选项] [用户名] 

选项

-c		#修改用户帐号的备注文字;
-g		#修改用户所属的群组;
-G		#修改用户所属的附加群组;
-s		#修改用户的命令解释器(可将普通用户改为虚拟用户);
-u		#修改用户uid;
-l		#修改用户帐号名称;

示例

#将普通用户dzy修改为虚拟用户
usermod -s /sbin/nologin dzy 
;