文件管理 |
目录管理 |
ls、cd、mkdir、rmdir |
|
|
|
权限管理 |
|
|
|
|
文档管理 |
- 目录查看、切换、创建、删除:ls、cd、mkdir、rmdir
- 复制、删除、移动:cp、rm、mv
- 创建:ln、touch、>
- 显示文件内容:cat、tac、nl、more、less、head、tail
- 统计、查找:wc、find
- 搜索、排序、去重:grep、sort、uniq
- 比较:comm、diff、sdiff、vimdiff
- 解压缩:tar、gzip|gunzip、bzip2|bunzip2 、zip|unzip、xz
|
|
|
|
文件搜索 |
comm、diff、sdiff、vimdiff |
|
|
|
备份压缩 |
tar、gzip|gunzip、bzip2|bunzip2 、zip|unzip、xz |
|
|
|
文件传输 |
sz、rz |
|
|
用户管理 |
查看用户(组)及登录信息 |
whoami、who am i、who、w、users、id、last、lastb、lastlog、groups |
|
|
|
用户(组)增加、修改、删除 |
useradd、usermod、userdel、groupadd、groupmod、groupdel、 |
|
|
|
用户(组)密码 |
passwd、chpasswd、gpasswd、chage |
|
|
|
用户切换 |
su |
|
|
磁盘管理 |
|
|
|
|
系统管理 |
系统状态 |
|
|
|
|
设备管理 |
|
|
|
进程管理 |
|
ps、pstree、pgrep
kill、killall、pkill
top、nice、renice
nohup
strace、ltrace
runlevel
init
service
|
|
|
|
|
|
|
|
网络通讯 |
|
|
|
|
其它 |
|
|
|
|
基础命令
man 命令:
1、Linux目录及文件操作指令
- 目录查看、切换、创建、删除:ls、cd、mkdir、rmdir
- 复制、删除、移动:cp、rm、mv
- 创建:ln、touch、>
- 显示文件内容:cat、tac、nl、more、less、head、tail
- 统计、查找:wc、find
- 搜索、排序、去重:grep、sort、uniq
- 比较:comm、diff、sdiff、vimdiff
- 解压缩:tar、gzip|gunzip、bzip2|bunzip2 、zip|unzip、xz
- tar命令用于打包文件和目录,gzip、bzip2和xz命令用于对单个文件进行压缩,zip和7z命令用于对多个文件和目录进行压缩。tar命令将多个文件或者文件夹打包成一个.tar文件,然后再使用gzip、bzip2或xz进行压缩
单个命令详解:
- ls [option] [directory]: 列出目录信息
| -a :全部的文件,连同隐藏档( 开头为 . 的文件) 一起列出来(常用) |
| -d :仅列出目录本身,而不是列出目录内的文件数据(常用) |
| -l :长数据串列出,包含文件的属性与权限等等数据;(常用) |
| -S :根据文件大小排序 |
| -X :根据文件扩展名排序 |
| -t :以文件修改时间排序 |
| -h :以容易理解的格式列出文件大小 (例如 1K 234M 2G) |
| -R :同时列出所有子目录层 |
| ... |
| cd /home/user:切换到指定绝对路径目录 |
| cd Documents:切换到当前Documents子目录 |
| cd ..:切换到上一级目录 |
| cd ~:切换到当前用户的家目录 |
| cd -:切换到上一个工作目录 |
| cd /home/user/*/Documents:可以快速切换到符合条件的目录 |
| cd $MYDIR:命令切换到MYDIR环境变量所代表的目录 |
| pwd -L:默认,会把符号链接作为实际的路径来显示 |
| pwd -P:会忽视所有符号链接(symbolic link),显示实际的物理路径 |
| mkdir 命令的常用参数包括: |
| -m 或 --mode:设定权限模式(如755或644)。这允许在创建目录的同时设定其权限。 |
| -p 或 --parents:允许创建多级目录,即如果父目录不存在,mkdir 将会创建它。 |
| -v 或 --verbose:显示命令在执行过程中所创建的目录。 |
| |
| mkdir dir :创建单个目录 |
| mkdir dir1 dir2 dir3 :创建多个目录 |
| mkdir -p parent/child/subchild :创建多级目录 |
| mkdir -m 755 directory :设置目录权限 |
| mkdir -v newdir :创建目录后,打印出一条信息mkdir: created directory `newdir` |
| mkdir "dir 1 2" :创建带有空格等特殊字符的目录,使用引号 |
| rmdir命令常用参数包括: |
| -p 或 --parents:递归地删除目录,当子目录被删除后,如果父目录变为空,则也一并删除。 |
| -v 或 --verbose:显示详细的处理信息。 |
| --ignore-fail-on-non-empty:即使某些目录非空也不显示错误信息。 |
| |
| rmdir dir :删除单个空目录 |
| rmdir -p parent_directory/child_directory :递归删除多级空目录 |
| rmdir -v empty_directory :删除empty_directory,并显示关于删除操作的详细信息 |
| rmdir --ignore-fail-on-non-empty directory_name :尝试删除非空目录但不显示错误 |
- rm [-fir] [directory]: 移除文件或目录
| -f :强制删除文件或者目录 |
| -i :删除文件或目录前提示要用户确认 |
| -r或者-R :递归删除目录及其下属各级子目录和相应的文件,非常危险的选项! |
| -a :按原样进行复制。这个参数等同于-dpr,自动进行递归复制,保留所有属性,包括文件属性、目录属性和权限等。 |
| -d :若来源文件为连结文件的属性(link file),则复制连结文件属性而非档案本身,复制过去也是一个(link file); |
| -p :保留源文件或目录的属性。复制时保留原始文件或目录的所有特性,包括文件或目录的所有者、组、时间戳等。 |
| -r 或 -R:复制目录及其子目录的内容。如果源文件是一个目录,使用此参数复制整个目录树。 |
| -f :覆盖逻辑,force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖; |
| 默认是会提示的,alias cp会发现cp的别名为cp -i,那就是说cp本身就是自带覆盖提醒,就算我们加上-f 的选项,它还是会优先匹配 -i 的选项,可通过unalias cp去掉别名 |
| -i :覆盖逻辑,若目标文件 (destination) 已经存在时,就会询问是否覆盖! |
| -u :覆盖逻辑,若目标文件已经存在,且 source 比较新,就会询问是否覆盖! |
| -n :覆盖逻辑,不要覆盖已经存在的文件。当目标文件已经存在时,不进行复制。 |
| -b :覆盖逻辑,备份目标文件。当目标文件已经存在时,在复制之前先创建一个备份文件,备份文件名称为:source+~ |
| -l :创建硬链接而不是复制文件。复制时创建一个目标文件的硬链接,而不是完全复制文件。 |
| -s :创建符号链接而不是复制文件。复制时创建一个目标文件的符号链接,而不是完全复制文件。cp -s 命令只能在当前目录下对源文件建立符号链接 |
| -v :显示复制的详细信息。在复制过程中,显示每个文件的名称。 |
- mv [-ifnu] [source] [dist]: 移动文件或目录;更改文件或目录的名称
| -i : 覆盖文件前需要确认 |
| -f : 若目标文件或目录已存在,直接覆盖 |
| -n : 不覆盖已存在的文件 |
| -u : 移动或更改文件名时,若目标文件已存在,且文件日期比源文件新,则不覆盖目标文件 |
| -s : 软链接(符号链接),默认创建的是硬链接 |
| -d : 允许超级用户制作目录的硬链接,一般操作系统是不允许的,需要先获取权限 |
| -i : 交互模式,文件存在则提示用户是否覆盖 |
| --backup[=CONTROL] : 备份已存在的目标文件 |
硬链接(共享物理空间):
-
- 硬链接与目标文件共享相同的索引节点,实际上是同一底层文件的多个入口点。
- 硬链接不占用额外的磁盘空间,因为它们与目标文件共享相同的物理存储空间。
- 硬链接只能链接到文件,不能链接到目录或不存在的目标。
- 硬链接只能在同一个文件系统中创建,不能跨越文件系统边界。
- 删除硬链接时,只有当链接计数为零时,即所有的硬链接都被删除时,目标文件的存储空间才会被释放。
- 硬链接在文件系统备份时,会备份链接本身和共享的目标文件。
软链接(类似快捷方式或别名):
-
- 软链接是一个独立的文件,它包含的是指向目标文件或目录的路径。
- 创建软链接时,软链接文件的大小会占用一些磁盘空间,而不是直接使用目标文件的大小。
- 软链接可以链接到文件或目录,甚至可以链接到不存在的目标。
- 通过软链接可以创建链式链接,即一个链接指向另一个链接。
- 软链接可以跨越不同的文件系统和目录边界。
- 删除软链接不会影响目标文件或目录,而只会删除链接本身。
- 在文件系统备份时,软链接只会备份链接文件本身,而不会备份目标对象。
选择硬链接还是软连接的考虑因素:
-
- 硬链接只能指向同一文件系统中的现有文件,并且不能跨越分区或设备。而软连接没有这个限制。
- 软连接可以指向目录,而硬链接只能指向一个具体的文件。
- 如果需要在不同位置共享相同内容的多个副本,并且希望对所有副本进行更改时都反映出来,则应使用硬链接。
- touch [file or directory]: 更改文件或目录的时间戳,如果文件不存在则创建它,功能同“>”
| 可选参数包括: |
| -c:如果文件不存在,则不创建新文件 |
| -r:自定义时间戳应用于目标文件,而不是当前时间时间戳 |
| |
| cat file.txt 创建单个文件 |
| > file.txt 创建单个文件 |
| touch file1.txt file2.txt file3.txt 创建多个文件 |
| touch {file1,file2,file3}.txt 创建多个文件 |
- cat [option] [file]:读取文件,并从第一行开始打印内容
| 可选参数包括: |
| -s :静默模式,连续的空行只显示一次 |
| -b :列出行号,仅针对非空白行做行号显示,空白行则跳过不标行号! |
| -n :列出行号,连同空白行也会有行号,与 -b 的选项不同; |
| -E :将结尾的断行字节 $ 显示出来; |
| -T :将 [tab] 按键以 ^I 显示出来; |
| -v :列出一些看不出来的特殊字符 |
| -A :相当於 -vET 的整合选项,可列出一些特殊字符而不是空白而已; |
- tac [option] [file]:tac与cat命令刚好相反,文件内容从最后一行开始显示
– tac命令不会修改文件内容,只是将内容在输出时进行反向处理。
– 如果对内存的使用有限制时,tac命令可能会导致性能问题,可以考虑使用其他方式进行文件内容的反向处理。
| -s :-separator指定文件中每行的分隔符。若没有指定分隔符,TAC命令默认将每行末尾的换行符作为分隔符。 |
| -b :查来查去也没人说清楚到底咋回事 |
| -r :查来查去也没人说清楚到底咋回事 |
| |
| tac file1.txt file2.txt 反向输出多个文件的内容 |
| tac file.txt file2.txt > reversed_file.txt 命令将file.txt和file2.txt文件的内容逆序保存为reversed_file.txt文件 |
- nl [option] [file]:显示文件内容及行
| -b a :无论是否为空行都显示行号,等同于cat -n [file] |
| -b t :若为空行,则不显示行号,等同于cat -b [file],默认 |
| -n ln :行号这列左对齐 |
| -n rn :行号这列右对齐,默认 |
| -n rz :行号这列右对齐,前面补0 |
| -w :行号这列的占位数,默认长度为6 |
| |
| nl -b a -n rz -w 10 file.txt 自定义行号占位数且显示所有行 |
- more [option] [file]:该命令显示文本文件的内容,一次显示一屏,满屏后停下来,可按如下键继续:
1. Space键: 默认显示文本的下一屏内容
2. Enter键: 默认显示文本的下一行内容
3. d键或CTRL+D: 向下显示文本半屏,默认为11行
4. b键或CTRL+B: 默认显示文本的上一屏内容
5. q或INTERRUPT键: 退出more命令
| -num :指定一个整数,表示一屏显示多少行 |
| -d :在每屛底部显示信息,包括当前显示的百分比,按键提示等 |
| -c或-p :不滚屏,在显示下一屏之前清屏 |
| +num :从行号num开始显示 |
| +/pattern :定义一字符串,在文件中查找该字符串,从字符串后显示 |
| |
| more +/abc a.txt 在a.txt中查找字符串"abc"并从该字符串处显示 |
- less [option] [file]:与more命令相似,分屏显示文件内容,less命令允许用户通过鼠标或方向键向前或向后浏览文件,按q键退出。
| -i :搜索时忽略大小写,除非搜索串中包含大写字母 |
| -l :搜索时忽略大小写 |
| -m :显示读取文件的百分比 |
| -M :显示读取文件的百分比、行号及总行数 |
| -N :在每行前输出行号 |
| -p pattern :定义一字符串,在文件中查找该字符串,并高亮显示 |
| |
| less -p abc a.txt 在a.txt中查找字符串"abc"并高亮显示 |
- head/tail [option] [file]:显示文件的开头/结尾部分
| -c :显示文件最前/最后面的NUM个字节 |
| -n :显示文件最前/最后面的行,不指定此参数显示10行 |
| |
| head -c 5 a.txt|head -c5 a.txt 显示a.txt前面的5个字节内容 |
| head -n 5 a.txt|head -n5 a.txt|head -5 a.txt 显示a.txt前面的5行内容 |
| tail -c 5 a.txt|tail -c5 a.txt 显示a.txt后5个字节内容 |
| tail -n 5 a.txt|tail -n5 a.txt|tail -5 a.txt 显示a.txt后5行内容 |
- wc [option] [file]:统计给定文件中的字节数、字数、行数, 这个命令真他妈崩溃,一会算2个一会算3个
| -l或-lines :统计行数,实验下来,最后一个空行不计算在内,如果多个空行,也是最后一个空行不计算在内,其它空行计算在内 |
| -w或-words :统计字数,每行代表一个字,字是指以空格、tab、换行分隔的非零长度字符,空行也是不计算 |
| -c或-bytes :统计字节数,一个汉字算作3个字节,每行后跟一个回车+换行,算2个字节。 |
| -m或-chars :统计字符数,一个汉字算作一个字符,每行后跟一个回车+换行,算2个字符。 |
| -L , --max-line-length : 显示最长行的长度,一个汉字算作2个长度; |
| |
| 例如文件test.txt(^M$代表回车换行) |
| 1 123^M$ |
| 2 456^M$ |
| 3 博客园^M$ |
| 4 ^M$ |
| 5 def^M$ |
| 6 ^M$ |
| 7 ^M$-->不计算在内 |
| wc test.txt 输出:6 4 30 test.txt,分别对应-l,-w,-c |
| wc -m test.txt 输出:24 test.txt |
| wc -L test.txt 输出:6 test.txt,"博客园"一个汉字算作2个长度 |
- find [paths] [expression] [action]:按照文件名、大小、时间、权限、类型、所属者、所属组来搜索文件
| Expression: |
| -name pattern 搜索时使用 pattern 对文件名进行匹配,?可以表示任意一个单一的符号;* 可以表示任意数量(包括 0)的未知符号 |
| -iname pattern 同 -name,忽略大小写 |
| -path pattern 搜索时使用 pattern 对文件路径进行匹配 |
| -ipath pattern 同 -path,忽略大小写 |
| -type t 根据文件类型搜索,f:文件 d:目录 l:符号链接 |
| -empty 检索空文件或空目录 |
| ! 反义匹配 |
| -user uname 指定文件的属主 |
| -group gname 指定文件的属组 |
| -atime n[smhdw] 距离文件上次被访问时的时间间隔,n:该文件n天前被修改过;n<0:该文件n天以内被修改过;n>0:该文件距离上次修改已经超过n天时间; |
| -ctime n[smhdw] 距离文件创建时的时间间隔,n:该文件n天前被修改过;n<0:该文件n天以内被修改过;n>0:该文件距离上次修改已经超过n天时间; |
| -mtime n[smhdw] 距离文件上次发生变更时的时间间隔,n:该文件n天前被修改过;n<0:该文件n天以内被修改过;n>0:该文件距离上次修改已经超过n天时间; |
| -size n[ckMGTP] 根据文件大小搜索,c:字节, k:Kb, M:Mb, G:Gb,使用 + 或 - 符号表示大于或小于当前条件 |
| -perm mode 根据文件权限搜索,mode为u=rwx,g=rwx,o=rwx或a=rwx或数字(如755),rwx可选 |
| -maxdepth n 指定递归的最大层数为 n |
| -depth n 检索深度为 n 的文件,即位于指定目录以下 n 层的文件 |
| -fstype type 指定文件所在的文件系统的类型 |
| Action: |
| -ls 打印搜索到的文件的详细信息 |
| -delete 删除检索到的文件 |
| -exec 对搜索到的结果执行特定的命令 |
| |
| find /usr -name '*.txt' 查找 /usr 目录下所有文件名以 .txt 结尾的文件 |
| find /usr -name '????' 查找 /usr 目录下所有文件名刚好为 4 个字符的文件 |
| find /usr -path '*/src/*.txt' 查找 /usr 下所有文件名以 .txt 结尾的文件或目录,且该文件的父目录必须是 src |
| find /usr -type d -name 'python*' 检索 /usr 下所有文件名以 python 开头的目录 |
| find /usr -type d -empty 检索/usr 下目录下所有的空目录 |
| find /usr -type f ! -name '*.txt' 检索 /usr 下所有文件名不以 .txt 为后缀的文件 |
| find /usr -type f ! -empty 检索 /usr 下所有内容不为空的文件 |
| find / -type f -user www 检索根目录下所有属主为 www 的文件 |
| find /usr -type f -mtime 2 检索 /usr 下两天前被修改过的文件 |
| find /usr -type f -mtime +50 -mtime -100 检索 /usr 下 50 到 100 天之前修改过的文件 |
| find /usr -type f -mtime 2 -amin 5 检索 /usr 下两天前被修改过且 5 分钟前又读取过的文件 |
| find / -size +1G 检索文件大小高于 1 GB 的文件 |
| find /usr -perm u=rwx,g=rx,o=rx 检索 /usr 目录下权限为 rwxr-xr-x 的文件 |
| find /usr -perm a=rx 检索 /usr 目录下所有权限为 r-xr-xr-x(即系统中的所有用户都只有读写权限)的文件和目录 |
| find / -type f -perm /a=x 检索可以直接被任何用户执行的文件,即只关心文件的执行权限,而不用管其读写权限是什么, / 符号即用来表示只匹配权限的某个子集 |
| find /usr -perm 644 检索 /usr 目录下权限为 644(即 rwxr-xr-x)的文件 |
| find / -maxdepth 3 检索时向下递归的层数最大为 3 |
| |
| find / -type file -size +1G -ls 浏览所有 1G 以上大小的文件的详细信息 |
| find /usr -type d -empty -delete 删除 usr 目录下所有的空目录 |
| find /usr -type f -name '*.mp3' -exec cp {} /media/MyDrive ';' 将 usr 目录下所有的 MP3 音频文件复制到移动存储设备(假设路径是 /media/MyDrive),其中的大括号({})作为检索到的文件的 占位符 ,而分号( ;)作为命令结束的标志。 |
| find /usr -type f -exec grep -l hello {} ';' 在 usr 目录下的所有文件中检索字符串 hello |
| find /usr -type f -name '*.mp3' -exec tar -czvf music.tar.gz {} + 将 usr 目录下所有的 MP3 文件添加到压缩包 music.tar.gz 中 |
| 另外,find 命令支持 “and” 和 “or” 两种逻辑运算,对应的命令选项分别是 -a 和 -o,通过这两个选项可以对搜索条件进行更复杂的组合,还可以使用小括号对搜索条件进行分组。注意 find 命令中的小括号常需要用单引号包裹起来。 |
| find /usr -type d -name 'python*' 等同于 find /usr -type d -a -name 'python*' |
| 更复杂的组合形式如: find / '(' -mmin -5 -o -mtime +50 ')' -a -type f |
- grep [option] pattern [file1] [file2...]:查找文件里符合条件的字符串或正则表达式
| -i:忽略大小写进行匹配。 |
| -v:反向匹配,输出不包含匹配模式的行。 |
| -r:递归搜索目录和子目录中的文件。 |
| -l:仅显示包含匹配模式的文件名,而不是匹配的行。 |
| -n:显示匹配的行及其行号。 |
| -w:只匹配整个单词,而不是字符串的一部分。 |
| -A <num>:显示匹配行以及后续 <num> 行的内容。 |
| -B <num>:显示匹配行以及前面 <num> 行的内容。 |
| -C <num>:显示匹配行以及前后各 <num> 行的内容。 |
- sort [option] [file] :对文本文件进行排序,可以按行、字段或数字进行排序,并支持各种排序选项,以满足不同的排序需求
| -r:逆序排序(降序)。 |
| -n:按数值进行排序。 |
| -k 字段:按指定的字段进行排序。该参数可指定多个字段,使用逗号分隔。默认字段分隔符为制表符或空格。 |
| -t 分隔符:指定字段的分隔符。 |
| -u:去除重复行,仅保留第一次出现的行。 |
| -f:忽略大小写进行排序。 |
| -b:忽略行首的空白字符进行排序。 |
| -c:检查文件是否已经排好序,如果未排序则输出第一个不符合排序顺序的行。 |
| |
| sort -k 2 -t ' ' data.txt 以空格分隔,按第二个字段(年龄)进行排序 |
| sort -k 3r -k 2n data.txt 先-k 3r 指定按第三个字段降序排序(r 表示逆序),再使用 -k 2n 指定按第二个字段升序排序(n 表示按数值排序) |
| echo -e "3\n1\n2" | sort -n 从标准输入读取数据并进行排序 |
- uniq [option] [input[output]]:用于检查及删除文本文件中重复出现的行列。它通过对输入文本进行比较,找出相邻的重复行,并只输出其中的一行。如果文件没有排序,uniq 默认只会删除相邻的重复行,不会删除不相邻的重复行。因此,通常在使用 uniq 之前,会先使用 sort 命令对文件进行排序。
| -c:在每行前面显示该行重复出现的次数 |
| -d:只输出重复的行,每个组打印一行 |
| -D:打印所有重复的行 |
| -u:只显示唯一的一行 |
| -i:比较时忽略大小写 |
| -f, --skip-fields=N:比较时会跳过前面N个字段,-f 1代表跳过第一个字段,从第2个字段开好比较 |
| -s, --skip-chars=N:比较时会跳过前面N个字符 |
| -w, --check-chars=N:只比较每一行的前N个字符,之后的字符不再比较 |
| -z:行分隔符是NUL,而不是换行符 |
| |
| cat a |grep -iE "abcd|2374"|sort|uniq -c|sort -nr 有一个a文本,要求将所有包含abcd和2374的字符过滤出来,并统计这些字符重复出现的次数。 |
- comm [option] file1 file2:用于两个文件之间的比较,以便执行交集、求差、以及差集操作
- 交集:打印出两个文件所共有的行。
- 求差:打印出指定文件所包含的且不相同的行(也就是去掉交集)。
- 差集:打印出包含在一个文件中,但不包含在其他指定文件中的行。
| 如果不附带选项,程序会生成三列输出。第一列包含文件1 特有的行,第二列包含文件2 特有的行,而第三列包含两个文件共有的行。 |
| -1 不输出文件1 特有的行 |
| -2 不输出文件2 特有的行 |
| -3 不输出两个文件共有的行 |
| --check-order 检查输入是否被正确排序,即使所有输入行均成对 |
| --nocheck-order 不检查输入是否被正确排序 |
| --output-delimiter=STR 依照STR 分列 |
| |
| comm aaa.txt bbb.txt -1 -2 两个文件的交集,需要删除第一列和第二列 |
| comm aaa.txt bbb.txt -3 | sed 's/^\t//' 两个文件中不相同的行,需要删除第三列,sed 's/^\t//'是将制表符\t删除,以便把两列合并成一列。 |
| comm aaa.txt bbb.txt -2 -3 两个文件的差集,需要删除第二列和第三列 |
- diff [option] file1 file2:用于两个文件之间的比较
| -u 或 --unified:以上下文格式显示差异,并显示更多的上下文行。 |
| -c 或 --context:以上下文格式显示差异。 |
| -r 或 --recursive:递归比较目录下的文件。 |
| -i 或 --ignore-case:忽略大小写的差异。 |
| -q 或 --brief:只显示文件是否不同,不显示具体差异内容。 |
| |
| diff -q dir1 dir2 简洁地报告文件是否不同,而不显示具体差异 |
- sdiff [option] file1 file2:用于以并排的方式比较和显示两个文件的差异。它以逐行的方式对比文件,并以一种易于阅读的格式显示差异。
- 文件类型:主要用于文本文件的比较。如果要比较二进制文件,请使用
diff
命令;
- 文件大小:对于非常大的文件,
sdiff
可能会消耗较多的内存和CPU资源。在这种情况下,考虑使用diff
命令并将结果保存到文件中进行查看。
- 文件编码:确保两个文件的编码格式相同,以避免因编码不一致导致的比较错误。
| -w <宽度>:指定每行显示的最大宽度。 |
| -o <输出文件>:互动式操作,并将比较结果输出到指定的文件中。 |
| -s:仅显示差异行 |
| -i:忽略大小写的区别 |
| -E:忽略由制表符宽度造成的差异 |
| -b:忽略由空格数不同造成的差异 |
| -W:忽略所有空白字符 |
| -B:忽略任何因空行而造成的差异 |
| -a:所有文件都以文本方式处理 |
| -l:当有两行相同时只显示左栏的一行 |
| -t:将输出中的 tab 转换成空格 |
| |
| sdiff -s file1.txt file2.txt 仅显示差异行 |
| sdiff file1.txt file2.txt -o diff.txt 将比较结果保存到文件 |
- vimdiff file1 file2:用于在 Vim 编辑器中比较两个文件并可视化显示差异
| 在 vimdiff 模式下,可以使用一些命令来导航差异并查看文件内容。以下是一些常用的导航命令: |
| ]c:跳到下一个差异处 |
| [c:跳到上一个差异处 |
| Ctrl + W:在两个文件之间切换焦点 |
| Ctrl + W + L:将焦点切换到右侧文件 |
| Ctrl + W + H:将焦点切换到左侧文件 |
| vimdiff 不仅可以比较文件差异,还可以进行合并操作。以下是一些常用的合并命令: |
| dp:将当前差异的右侧内容复制到左侧文件中 |
| do:将当前差异的左侧内容复制到右侧文件中 |
| :diffget:将两个文件的差异部分合并到当前文件中 |
| :diffupdate:更新文件差异,用于在合并过程中同步差异的显示 |
| :diffthis:将当前文件标记为要进行合并的文件 |
| :diffg RE:将 RE(一个正则表达式)所匹配的差异部分合并到当前文件中 |
| :diffp RE:将 RE(一个正则表达式)所匹配的当前文件的差异部分复制到另一个文件中 |
| 完成文件差异的比较和合并后,可以执行以下命令保存并退出 vimdiff: |
| :wqa:保存所有文件并退出 vimdiff |
| :qa!:强制退出 vimdiff,不保存修改 |
- tar [option] [new.tar| new.tar.gz | new.tar.bz2] file1 file2:解压缩命令
| -z:使用gzip进行压缩和解压缩 |
| -j:使用bzip2进行压缩和解压缩 |
| -J:使用xz进行压缩和解压缩 |
| -v:详细报告tar处理的文件信息(verbose) |
| -f:使用档案文件或设备,这个选项通常是必选的(file) |
| -c:创建新的档案文件(create) |
| -C:解压到指定的目录,指定的目录必须是存在的 |
| -x:解压缩文件或目录(extract) |
| -t:显示压缩包的内容 |
| -r:往压缩包中增加文件 |
| -u:更新压缩包中的文件 |
| -d:删除压缩包中的文件 |
| |
| tar -czvf output.tar.gz ./file1.txt ./file2.txt 压缩指定路径下的多个文件 |
| tar -tzvf ./output.tar.gz 查看指定路径下压缩包中的文件 |
| tar -xzvf ./output.tar.gz 将整个压缩包解压到当前目录 |
| tar -xzvf ./output.tar.gz ./001/file1.txt ./001/file2.txt 将压缩包中的部分文件解压到当前目录 |
| tar -xzvf ./output.tar.gz -C ./temp 解压到指定的目录 |
| tar -rf all.tar *.gif 这条命令是将所有.gif的文件增加到all.tar的包里面去 |
| tar -uf all.tar logo.gif 这条命令是更新原来tar包all.tar中logo.gif文件 |
- gzip|gunzip [option] file1 file2:解压缩命令,压缩后的文件后缀名为
.gz
。只能用于压缩单个文件,不能压缩文件夹
| -k 保留源文件(默认情况下,源文件压缩后会被删除),不同的gzip版本可能没有-k选项 |
| -r 递归处理所有子文件(将文件夹中的所有子文件压缩为.gz,每一个文件单独压缩成一个.gz) |
| -v 显示执行过程中详细信息 |
| -l 显示压缩包内文件信息 |
| -d 解压文件,相当于gunzip(默认情况下,源文件解压后会被删除) |
| |
| gzip aaa.txt 将aaa.txt压缩为aaa.txt.gz,并将aaa.txt删除 |
| gzip -l aaa.txt.gz 显示压缩包内文件信息 |
| gzip -d aaa.txt.gz | gunzip aaa.txt.gz 解压aaa.txt.gz为aaa.txt,并将aaa.txt.gz删除 |
- bzip2|bunzip2 [option] file1 file2:解压缩命令,压缩后的文件后缀名为
.bz2
。采用新的压缩演算法,压缩效果比传统的LZ77/LZ78压缩演算法来得好。若没有加上任何参数,bzip2压缩完文件后会产生.bz2的压缩文件,并删除原始的文件。
| -c:将输出结果发送到标准输出,而不是解压为一个文件。 |
| -d:解压缩文件。 |
| -f:强制操作,覆盖已存在的输出文件。 |
| -k:保留原始文件,不删除压缩或解压缩的文件。 |
| -s:显示压缩比率,以及压缩前后的文件大小。 |
| -t:测试压缩文件是否完好无损。 |
| -z:压缩文件。这是bzip2命令的默认操作,可以省略。 |
| |
| bzip2 -dc file.bz2 解压并输出文件file的内容,不会产生新文件 |
| bzip2 -dc file.bz2 > ./newFile.txt 解压到新的文件,会产生新的文件 |
| tar -cjvf archive.tar.bz2 ./* 递归地压缩指定目录及其所有内容,并生成archive.tar.bz2 |
| tar -tjvf archive.tar.bz2 ./* 查看压缩包内容 |
| tar -xjvf archive.tar.bz2 -C ./Tmp 解压到指定目录 |
- zip|unzip newFile.zip file1 file2:解压缩命令,压缩后的文件后缀名为
.zip
。
| zip newFile.zip ./路径1/文件1 ./路径2/文件2 ...压缩指定的多个文件 |
| zip newFile.zip ./路径/2024-*.txt 压缩指定通配符的多个文件 |
| zipinfo newFile.zip 查看压缩包信息,包括文件列表、大小、压缩率等 |
| unzip -l newFile.zip 显示压缩包内文件列表 |
| unzip out.zip -d ./temp 解压压缩包中的文件到指定路径temp |
| unzip out.zip dir/file1.txt -d ./temp 只解压压缩包中的file1文件到指定路径temp |
| unzip -j out.zip -d ./temp 只解压缩文件,不解压目录 |
- xz [option] file1 file2:解压缩命令,压缩后的文件后缀名为
.xz
。
| -k:保留原始文件,不删除压缩或解压缩的文件。 |
| -d:解压缩文件。 |
| -t:测试压缩文件是否完好无损 |
| -l:列出压缩文件的内容 |
2、Linux目录及文件操作指令
权限管理命令(只有root才能执行)
| chmod -R 777 dir/file |
| chmod -R ugo+rwx dir/file |
| chmod -R ugo-rwx dir/file |
| |
| chown -R toUser dir/file |
| chown -R toUser:toGroup dir/file |
| |
| chgrp -R toGroup dir/file |
| chgrp --reference=toFile fromFile |
2、用户管理
whoami:显示当前终端会话的用户名,等同于id -un
命令
who am i:显示登录当前 Linux 系统的用户名、登录终端和登录时间,即第一次登录终端的用户,等同于 who -m
命令(通常会使用su命令切换用户)
who [-mqu]:显示当前所有登录系统的用户信息
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| root |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| root pts/0 2024-08-08 10:13 (116.227.119.161) |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| bash-4.1$ whoami |
| www |
| bash-4.1$ who am i |
| root pts/0 2024-08-08 10:13 (116.227.119.161) |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| root pts/0 2024-08-08 10:27 (116.227.119.161) |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| root root |
| |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| root pts/0 2024-08-08 10:27 . 30839 (116.227.119.161) |
| root pts/1 2024-08-08 10:27 00:01 30863 (116.227.119.161) |
w [-husfi] [userName]:显示当前已登录用户信息以及这些用户目前正在做什么,USER - 登陆用户、TIY - 登录用户使用的终端名、FROM - 登陆位置IP、login@ - 用户登录时长、IDLE - 自用户上一次与终端进行交互以来的空闲时间、JCPU - 附加到tty的所有进程使用的时间、PCPU - 用户当前进程所用的时间、WHAT - 用户当前的进程及选项/参数。
users: 仅显示当前已登录用户的用户名
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| 11:34:56 up 304 days, 16:46, 2 users, load average: 0.26, 0.26, 0.19 |
| |
| USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT |
| root pts/0 116.227.119.161 11:33 0.00s 0.01s 0.00s w |
| root pts/1 116.227.119.161 11:33 1:52 0.13s 0.13s top |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| root pts/0 116.227.119.161 11:33 3.00s 0.01s 0.00s w -h |
| root pts/1 116.227.119.161 11:33 1:55 0.13s 0.13s top |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| 11:35:06 up 304 days, 16:46, 2 users, load average: 0.22, 0.26, 0.18 |
| USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| 11:35:11 up 304 days, 16:46, 2 users, load average: 0.20, 0.25, 0.18 |
| USER TTY FROM IDLE WHAT |
| root pts/0 116.227.119.161 7.00s w -s |
| root pts/1 116.227.119.161 2:07 top |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| 11:35:14 up 304 days, 16:46, 2 users, load average: 0.19, 0.25, 0.18 |
| USER TTY LOGIN@ IDLE JCPU PCPU WHAT |
| root pts/0 11:33 2.00s 0.01s 0.00s w -f |
| root pts/1 11:33 2:10 0.15s 0.15s top |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| 11:35:17 up 304 days, 16:46, 2 users, load average: 0.19, 0.25, 0.18 |
| USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT |
| root pts/0 116.227.119.161 11:33 5.00s 0.02s 0.00s w -i |
| root pts/1 116.227.119.161 11:33 2:13 0.16s 0.16s top |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| root root |
id [-gGun] [userName]:显示用户与用户组信息,用户id范围: 0-65535,0: Linux超级用户ID,1-999:Liunx系统自用ID,1000-65535:用户级ID。ID设定规则都被记录在/etc/login.defs
文件中
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| uid=0(root) gid=0(root) groups=0(root) |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| uid=1001(www) gid=1001(www) groups=1001(www),10(wheel) |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| 1001 |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| 1001 |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| 1001 10 |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| www |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| www wheel |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| www |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| id: xxx: no such user |
last [-adR][-f filePath][-n rowNum] [userName]:显示用户历史登录情况。读取系统登录历史日志文件/var/log/wtmp
并按照用户名、登录终端、来源终端、时间等信息进行划分。
lastb [-adR][-f filePath][-n rowNum][userName]:读取/var/log/btmp
文件,并把该文件内容记录的登入失败的用户名单,全部显示出来。用于显示用户错误的登录列表,可以发现系统的登录异常。
lastlog [-btu]:格式化输出上次登录日志/var/log/lastlog
的内容。它根据UID排序显示登录名、端口号(tty)和上次登录时间。如果一个用户从未登录过,lastlog显示Never logged。
| [root@iZbp1hog1euguwis9nc1f5Z log] |
| root pts/1 116.227.119.161 Fri Aug 9 13:47 still logged in |
| root pts/0 116.227.119.161 Fri Aug 9 13:47 still logged in |
| |
| wtmp begins Wed Jul 27 12:10:43 2022 |
| [root@iZbp1hog1euguwis9nc1f5Z log] |
| root pts/1 Fri Aug 9 13:47 still logged in 116.227.119.161 |
| root pts/0 Fri Aug 9 13:47 still logged in 116.227.119.161 |
| |
| wtmp begins Wed Jul 27 12:10:43 2022 |
| [root@iZbp1hog1euguwis9nc1f5Z log] |
| root pts/1 116.227.119.161 Fri Aug 9 13:47 still logged in |
| root pts/0 116.227.119.161 Fri Aug 9 13:47 still logged in |
| |
| wtmp begins Wed Jul 27 12:10:43 2022 |
| [root@iZbp1hog1euguwis9nc1f5Z log] |
| root pts/1 Fri Aug 9 13:47 still logged in |
| root pts/0 Fri Aug 9 13:47 still logged in |
| |
| wtmp begins Wed Jul 27 12:10:43 2022 |
| [root@iZbp1hog1euguwis9nc1f5Z log] |
| ... |
| reboot system boot 3.10.0-1160.71.1 Fri Aug 26 02:33 - 18:11 (391+15:37) |
| shutdown system down 3.10.0-1160.71.1 Wed Jul 27 12:10 - 02:33 (29+14:23) |
| [root@iZbp1hog1euguwis9nc1f5Z log] |
| root pts/1 116.227.119.161 Fri Aug 9 13:47 still logged in |
| root pts/0 116.227.119.161 Fri Aug 9 13:47 still logged in |
| |
| wtmp begins Wed Jul 27 12:10:43 2022 |
| [root@iZbp1hog1euguwis9nc1f5Z log] |
| root pts/1 116.227.119.161 Fri Aug 9 13:47:32 2024 still logged in |
| root pts/0 116.227.119.161 Fri Aug 9 13:47:31 2024 still logged in |
| |
| wtmp begins Wed Jul 27 12:10:43 2022 |
| [root@iZbp1hog1euguwis9nc1f5Z log] |
| root pts/1 116.227.119.161 Wed Aug 7 19:20 - 19:47 (00:26) |
| root pts/0 116.227.119.161 Wed Aug 7 19:20 - 19:47 (00:26) |
| |
| [root@iZbp1hog1euguwis9nc1f5Z log] |
| ftp ssh:notty 47.110.180.34 Fri Aug 9 01:27 - 01:27 (00:00) |
| ftp ssh:notty 47.110.180.32 Fri Aug 9 01:27 - 01:27 (00:00) |
| |
| btmp begins Sat Oct 1 11:22:48 2022 |
| [root@iZbp1hog1euguwis9nc1f5Z log] |
| ftp ssh:notty Fri Aug 9 01:27 - 01:27 (00:00) 47.110.180.34 |
| ftp ssh:notty Fri Aug 9 01:27 - 01:27 (00:00) 47.110.180.32 |
| |
| btmp begins Sat Oct 1 11:22:48 2022 |
| [root@iZbp1hog1euguwis9nc1f5Z log] |
| ftp ssh:notty 47.110.180.34 Fri Aug 9 01:27 - 01:27 (00:00) |
| ftp ssh:notty 47.110.180.32 Fri Aug 9 01:27 - 01:27 (00:00) |
| |
| btmp begins Sat Oct 1 11:22:48 2022 |
| [root@iZbp1hog1euguwis9nc1f5Z log] |
| ftp ssh:notty Fri Aug 9 01:27 - 01:27 (00:00) |
| ftp ssh:notty Fri Aug 9 01:27 - 01:27 (00:00) |
| |
| btmp begins Sat Oct 1 11:22:48 2022 |
| [root@iZbp1hog1euguwis9nc1f5Z log] |
| ftp ssh:notty 47.110.180.32 Fri Aug 9 01:27 - 01:27 (00:00) |
| ftp ssh:notty 47.110.180.34 Fri Aug 9 01:27 - 01:27 (00:00) |
| |
| btmp begins Sat Oct 1 11:22:48 2022 |
| |
| [root@iZbp1hog1euguwis9nc1f5Z log] |
| Username Port From Latest |
| bin **Never logged in** |
| zzq pts/1 180.158.174.147 Thu Jul 25 15:18:34 +0800 2024 |
| [root@iZbp1hog1euguwis9nc1f5Z log] |
| Username Port From Latest |
| root pts/1 116.227.119.161 Fri Aug 9 13:47:32 +0800 2024 |
| www pts/0 Fri Aug 9 11:26:10 +0800 2024 |
| [root@iZbp1hog1euguwis9nc1f5Z log] |
| Username Port From Latest |
| zzq pts/1 180.158.174.147 Thu Jul 25 15:18:34 +0800 2024 |
useradd -D [-b][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-s <shell>]:增加用户。
创建一个新用户之后,会在下面文件中自动生成内容: /etc/passwd:生成用户信息 /etc/shadow:生成密码信息 /etc/group:生成用户组信息 /etc/gshadow:生成用户组密码信息 /home/tom:创建家目录 /var/spool/mail/tom:创建用户邮箱目录
|
useradd默认用户配置/etc/default/useradd : GROUP=100 #用户默认组,对应组名users HOME=/home #用户家目录 INACTIVE=-1 #是否启用帐号过期停权,-1表示不启用 EXPIRE= #帐号终止日期,不设置表示不启用 SHELL=/bin/bash #默认shell SKEL=/etc/skel #默认模板目录,创建后会copy至家目录 CREATE_MAIL_SPOOL=yes #是否建立邮箱
|
useradd默认密码配置/etc/login.defs : PASS_MAX_DAYS 90 #密码有效期 PASS_MIN_DAYS 7 #密码修改间隔,0代表任何时候都可以更改 PASS_MIN_LEN 8 #密码最小位位数 PASS_WARN_AGE 7 #密码到期警告的天数 UID_MIN 1000 #最小UID范围 UID_MAX 60000 #最大UID范围 ENCRYPT_METHOD SHA512 #加密模式
|
| [root@iZbp1hog1euguwis9nc1f5Z mail] |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| uid=1002(test1) gid=1002(test1) groups=1002(test1) |
| [root@iZbp1hog1euguwis9nc1f5Z mail] |
| test1:x:1002:1002::/home/test1:/bin/bash |
| |
| [root@iZbp1hog1euguwis9nc1f5Z mail] |
| test1:!!:19944:7:90:7::: |
| |
| [root@iZbp1hog1euguwis9nc1f5Z mail] |
| test1:x:1002: |
| [root@iZbp1hog1euguwis9nc1f5Z mail] |
| test1:!:: |
| [root@iZbp1hog1euguwis9nc1f5Z mail] |
| [root@iZbp1hog1euguwis9nc1f5Z mail] |
| /var/spool/mail/test1 |
| |
| [root@iZbp1hog1euguwis9nc1f5Z home] |
| [root@iZbp1hog1euguwis9nc1f5Z home] |
| uid=5678(test2) gid=1001(www) groups=1001(www),0(root) |
| [root@iZbp1hog1euguwis9nc1f5Z home] |
| test2:x:5678:1001:test2 user:/home/testHome:/bin/bash |
| [root@iZbp1hog1euguwis9nc1f5Z home] |
| test2:12345678:19944:7:90:7:3:20088: |
| [root@iZbp1hog1euguwis9nc1f5Z home] |
| root:x:0:test2 |
| www:x:1001:test2 |
| [root@iZbp1hog1euguwis9nc1f5Z home] |
| root:::test2 |
| www:!::test2 |
| [root@iZbp1hog1euguwis9nc1f5Z home] |
| /var/spool/mail/test2 |
| |
| -c: 用户的注释信息 |
| -d: 指定用户的家目录,-m 选项可以自动创建主目录。 |
| -m: 如果用户的家目录不存在,则创建 |
| -e: 账户的到期时间,格式为 YYYY-MM-DD |
| -f:指定用户账号多久不活动后自动失效,单位为天 |
| -u: 指定该用户的默认UID,默认是不允许重复的 |
| -o: 允许使用一个重复的UID |
| -g: 指定一个初始的用户基本组(必须已存在的),gid或名称都可以 |
| -G: 指定一个或多个扩展组 |
| -p: 指定该用户的密码 |
| -k: 当adduser添加用户时,用户家目录下的文件,都是从这个目录中复制过去的,默认/etc/shel |
| -s: 指定该用户的默认Shell解释器,默认/bin/bash |
| -r: 创建系统用户 |
| -M: 不创建用户家目录 |
| -N: 不创建与用户同名的基本用户组 |
| -U:默认选项,创建一个跟用户名一样的组 |
- usermod [option] userName:修改用户的基本信息
| -c: 修改用户的注释信息 |
| -d: 修改用户的家目录 |
| -e: 修改帐号的有效期限; |
| -f: 修改在密码过期后多少天即关闭该帐号; |
| -g: 修改用户所属的群组; |
| -G: 修改用户所属的附加群组; |
| -aG: 增加用户所属的附加群组; |
| -l: 修改用户帐号名称; |
| -s: 修改用户登入后所使用的shell; |
| -u: 修改用户ID; |
| -L:锁定用户密码,使密码无效; |
| -U:解除密码锁定 |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| id: test2: no such user |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| uid=6678(test22) gid=1001(www) groups=1001(www),0(root) |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| test22:!12345678:19944:7:90:7:3:20088: |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| test22:12345678:19944:7:90:7:3:20088: |
- userdel [-rf] userName:删除用户
| userdel -r test |
| userdel -f test |
| 会自动删除下面的文件: |
| ①、删除 /etc/passwd 文件的用户信息 |
| ②、删除 /etc/shadow 文件的用户密码信息 |
| ③、删除/etc/group 文件的用户组信息 |
| ④、删除 /etc/gshadow 文件的用户组密码信息 |
| ⑤、删除用户的邮件信息 rm -rf /var/spool/mail/用户名 |
| ⑥、删除用户的家目录 rm -rf /home/用户名 |
- groupadd [-fgor] groupName:增加用户组
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| grouptest:x:344: |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| grouptest:x:344: |
| grouptest2:x:344: |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| grouptest:x:344: |
| grouptest2:x:344: |
| grouptest3:x:343: |
| grouptest4:x:1002: |
- groupmod [-gno] groupName:修改用户组
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| grouptest2:x:344: |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| grouptest2:x:345: |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| grouptest22:x:345: |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| grouptest3:x:343: |
| grouptest22:x:343: |
- groupdel groupName:删除用户组,本命令要修改的系统文件包括
/ect/group
和/ect/gshadow
。若该群组中仍包括某些用户,则必须先删除这些用户后,方能删除群组。
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| grouptest:!:: |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| grouptest:x:344: |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
- passwd:更改用户密码,root用户能修改任何用户的密码,普通用户只能修改自己的密码,语法为 passwd,后面不能加普通用户名,而且密码要符合密码规则,不然修改不了
| -S:列出密码的相关信息,仅有系统管理者才能使用; |
| -d:删除密码,仅有系统管理者才能使用; |
| -l:暂时锁定用户,该选项会在 /etc/shadow 文件中指定用户的加密密码串前添加 "!!",使密码失效,与usermod -L区别是加2个"!!" |
| -u:解开已上锁的帐号 |
| -n 天数:设置该用户修改密码后,多长时间不能再次修改密码,也就是修改 /etc/shadow 文件中各行密码的第 4 个字段; |
| -x 天数:设置该用户的密码有效期,对应 /etc/shadow 文件中各行密码的第 5 个字段; |
| -w 天数:设置用户密码过期前的警告天数,对于 /etc/shadow 文件中各行密码的第 6 个字段; |
| -i 日期:设置用户密码失效日期,密码失效后几天停止账号,对应 /etc/shadow 文件中各行密码的第 7 个字段。 |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| test PS 2024-08-09 7 90 7 3 (Alternate authentication scheme in use.)密码修改间隔, |
| |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| Removing password for user test. |
| passwd: Success |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| test NP 2024-08-12 7 90 7 3 (Empty password.) |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| Changing password for user test. |
| New password: |
| BAD PASSWORD: it is too simplistic/systematic |
| BAD PASSWORD: is too simple |
| Retype new password: |
| passwd: all authentication tokens updated successfully. |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| Locking password for user test. |
| passwd: Success |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| test LK 2024-08-12 7 90 7 3 (Password locked.) |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| Unlocking password for user test22. |
| passwd: Success |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| test PS 2024-08-12 7 90 7 3 (Password set, SHA512 crypt.) |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| Adjusting aging data for user test22. |
| passwd: Success |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| test22 PS 2024-08-12 10 90 7 3 (Password set, SHA512 crypt.) |
- chpasswd [-em]:批量更新用户口令的工具
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| test:$6$ocEGm/8CjD1/56$jyXPHqInY2IP2Lm.eR7DepCWNLMgoN/OYakqFWmNfCOa1q74eqGlQxDh7Prqvyn5p3WRef8KL46HY2ja9vnsZ/:19947:9:90:7:3:20088: |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| test:12345678 |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| test:$6$g0Kqf/rdOS7/Er4$lUQq7nuKWggxRVB8kNBnsnQpsIAmh1bmQN5MnLWKqCE2/9fihC3wz6W/JEIQX6GX4cIkML9gO6Rxe2LJ3YaWY.:19947:9:90:7:3:20088: |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| test:$1$1lP9KfKx$uj1QJqB4EjMXTGN9YOk3G1 |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| -c, --crypt-method 方法 加密方法(NONE DES MD5 SHA256 SHA512 中的一个) |
| -e, --encrypted 提供的密码已经加密 |
| -m, --md5 使用 MD5 算法加密明文密码 |
- gpasswd [-adAMrR]:工作组文件
/etc/group
和/etc/gshadow
管理工具
| -a:添加用户到组; |
| -d:从组删除用户; |
| -A:指定管理员; |
| -M:指定组成员和-A的用途差不多; |
| -r:删除密码; |
| -R:限制用户登入组,只有组中的成员才可以用newgrp加入该组。 |
- chage [-lMmWIE] userName:修改帐号和密码的有效期限,注:账户过期与密码过期的区别
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| Last password change : Aug 12, 2024 |
| Password expires : May 08, 2027 |
| Password inactive : May 17, 2027 |
| Account expires : never |
| Minimum number of days between password change : 0 |
| Maximum number of days between password change : 999 |
| Number of days of warning before password expires : 10 |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| Last password change : Aug 12, 2024 |
| Password expires : Aug 22, 2024 |
| Password inactive : Aug 25, 2024 |
| Account expires : Dec 31, 2024 |
| Minimum number of days between password change : 2 |
| Maximum number of days between password change : 10 |
| Number of days of warning before password expires : 18 |
- su [-clms] userName:用户切换,选项 - 千万不能省略,必须要连带用户的环境变量一起切换。从普通用户切换到 root 用户是需要输入密码的,而从root用户切换到普通用户是不需要输入密码的。
| su -c "ls" root |
| su root 或 su -root 或 su -l root |
| su -m root或su -p root |
3、磁盘管理
进程管理
- ps [option]:查看当前系统的进程状态
-
- pstree:以树状图的方式展现进程之间的派生关系,显示效果比较直观
-
- pgrep [option] pName: 以名称为依据从运行进程队列中查找进程,并显示查找到的进程id
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| 5 |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| 727,837,1056,1177,1179 |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| 727,837,1056,1177,1179 |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| 727,837,1056,1177,1179 |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| 727 |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| 1179 |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| 541,548,553,727,837,1038,1056,1177,1179,15958,19504 |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| 19503 nginx |
| 19504 nginx |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| 19503 nginx |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| 1179 inet_gethost |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| 6354 bash |
| 6447 top |
- kill [option] [pid]:用来删除执行中的程序或工作。kill可将指定的信息送至程序。预设的信息为SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用SIGKILL(9)信息尝试强制删除程序。
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP |
| 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 |
| 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM |
| 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP |
| 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ |
| 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR |
| 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 |
| 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 |
| 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 |
| 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 |
| 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 |
| 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 |
| 63) SIGRTMAX-1 64) SIGRTMAX |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| KILL |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| TERM |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
- killall [option]:此指令可以杀死一组同名进程,我们可以使用kill命令杀死指定进程PID的进程,如果要找到我们需要杀死的进程,我们还需要在之前使用ps等命令再配合grep来查找进程,而killall把这两个过程合二为一,是一个很好用的命令。
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM |
| STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS |
| UNUSED |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| root 798 1 0 2023 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx |
| nobody 802 798 0 2023 ? 00:05:22 nginx: worker process |
| root 24644 6754 0 16:51 pts/0 00:00:00 grep --color=auto nginx |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| root 25827 6754 0 16:52 pts/0 00:00:00 grep --color=auto nginx |
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| Signal nginx(pgid 16832) ? (y/N) y |
| -I:忽略大小写的不同; |
| -i:交互式杀死进程,杀死进程前需要进行确认; |
| -s:用指定的进程号代替默认信号“SIGTERM”; |
| -u:杀死指定用户的进程。 |
| -p:杀死进程所属的进程组; |
| -q:如果没有进程被杀死。则不输出任何信息;否则会输出:xxx: no process found |
| -e:对长名称进行精确匹配;大于15个字符的名称 |
| -w: 等待进程结束后再返回,否则一直等待 |
| -r:使用正规表达式匹配要杀死的进程名称; |
- pkill [option]:可以按照进程名杀死进程。pkill和killall应用方法差不多,也是直接杀死运行中的程序;如果您想杀掉单个进程,请用kill来杀掉。
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| 2 |
| -f, --full:匹配进程名及其参数,可用于定位带有特定参数的进程。示例:pkill -f <进程参数>。 |
| -u, --euid:根据进程的有效用户ID(EUID)来定位和终止进程。示例:pkill -u <用户ID>。 |
| -g, --pgroup:根据进程组ID来定位和终止进程。示例:pkill -g <进程组ID>。 |
| -t, --terminal:根据终端ID来定位和终止进程。示例:pkill -t <终端ID>。 |
| -c, --count:显示匹配到的进程数量,而不执行终止操作。示例:pkill -c <进程名>。 |
| -P, --parent <ppid>,:匹配父进程为指定进程 ID 的进程。 |
- top [option]: 可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。通过top命令所提供的互动式界面,用热键可以管理。
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| top - 11:13:56 up 310 days, 16:25, 2 users, load average: 0.24, 0.26, 0.31 |
| Tasks: 101 total, 2 running, 99 sleeping, 0 stopped, 0 zombie |
| %Cpu(s): 3.0 us, 4.2 sy, 0.0 ni, 92.6 id, 0.2 wa, 0.0 hi, 0.0 si, 0.0 st |
| |
| KiB Mem : 8008680 total, 370600 free, 1814020 used, 5824060 buff/cache |
| KiB Swap: 0 total, 0 free, 0 used. 5888324 avail Mem |
| |
| PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND |
| 21345 root 10 -10 185348 53032 10296 S 3.3 0.7 613:22.48 AliYunDunMonito |
| 9 root 20 0 0 0 0 S 0.3 0.0 132:36.33 rcu_sched |
| 262 root 0 -20 0 0 0 S 0.3 0.0 3:02.52 kworker/0:1H |
| 727 rabbitmq 20 0 2272668 76808 5100 S 0.3 1.0 718:16.45 beam.smp |
| 2559 root 20 0 6923036 1.0g 16504 S 0.3 13.1 347:12.68 java |
| 4901 root 20 0 116256 5624 4140 S 0.3 0.1 0:03.96 sshd |
| PID 进程ID |
| USER 进程所有者的用户名 |
| PR 优先级 |
| NI nice值,负值表示高优先级,正值表示低优先级 |
| VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES |
| SWAP 进程使用的虚拟内存中,被换出的大小,单位kb |
| RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA |
| S 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程 |
| %CPU 上次更新到现在的CPU时间占用百分比 |
| %MEM 进程使用的物理内存百分比 |
| TIME+ 进程使用的CPU时间总计,单位1/100秒 |
| COMMAND 命令行 |
| |
| -d:number代表秒数,表示top命令显示的页面更新一次的间隔。默认是5秒。 |
| -b:以批次的方式执行top。 |
| -n:与-b配合使用,表示需要进行几次top命令的输出结果。 |
| -p:指定特定的pid进程号进行观察。 |
| -u:指定用户名; |
| -n:指定进程的优先级(整数),优先级值范围从-20到19,其中值越小,优先级越高。 |
| nice -19 tar zcf pack.tar.gz documents |
| nice --19 tar zcf pack.tar.gz documents |
- renice [优先级] [pid][-gpu]:修改正在运行的进程的调度优先级
| renice 1 987 -u daemon root -g www -p 32 |
- nohup: 可以将程序以忽略挂起信号的方式运行起来,被运行的程序的输出信息将不会显示到终端。
| nohup command > myout.file 2>&1 & |
| |
| |
| |
| nohup ping -c 10 baidu.com |
| nohup ping -c 10 baidu.com > /home/test/nohup.out |
| ./startup.sh 2>&1 | tee startup.log |
- strace:是一个集诊断、调试、统计与一体的工具,我们可以使用strace对应用的系统调用和信号传递的跟踪结果来对应用进行分析,以达到解决问题或者是了解应用工作过程的目的。当然strace与专业的调试工具比如说gdb之类的是没法相比的,因为它不是一个专业的调试器。
- ltrace:类似于strace,但是ltrace主要用于跟踪进程执行期间的库函数调用。
- runlevel:用于打印当前Linux系统的运行等级,进入每个runlevel都需要启动或关闭相应的一系列服务(services),这些服务以初始化脚本的方式放置于目录
/etc/rc.d/rc?.d/
或者/etc/rc?.d
下面(?代表runlevel的对应序号)
| [root@iZbp1hog1euguwis9nc1f5Z ~] |
| N 3 |
| [root@iZbp1hog1euguwis9nc1f5Z etc] |
| |
| lrwxrwxrwx 1 root root 10 Jul 27 2022 rc0.d -> rc.d/rc0.d |
| lrwxrwxrwx 1 root root 10 Jul 27 2022 rc1.d -> rc.d/rc1.d |
| lrwxrwxrwx 1 root root 10 Jul 27 2022 rc2.d -> rc.d/rc2.d |
| lrwxrwxrwx 1 root root 10 Jul 27 2022 rc3.d -> rc.d/rc3.d |
| lrwxrwxrwx 1 root root 10 Jul 27 2022 rc4.d -> rc.d/rc4.d |
| lrwxrwxrwx 1 root root 10 Jul 27 2022 rc5.d -> rc.d/rc5.d |
| lrwxrwxrwx 1 root root 10 Jul 27 2022 rc6.d -> rc.d/rc6.d |
- init: 是Linux下的进程初始化工具,init进程是所有Linux进程的父进程,它的进程号为1是Linux内核引导运行的,是系统中的第一个进程。
| -b:不执行相关脚本而直接进入单用户模式; |
| -s:切换到单用户模式。 |
| init 1 |
| init 6 |
- service:用来控制系统服务的实用工具,它以启动、停止、重新启动和关闭系统服务,还可以显示所有系统服务的当前状态
| service --status-all:显示所服务的状态,服务名:即/etc/init.d目录下的脚本文件名; |
| [root@iZbp1hog1euguwis9nc1f5Z init.d] |
| . .. functions netconsole network README sshd tomcat |
| [root@iZbp1hog1euguwis9nc1f5Z init.d] |
| Configured devices: |
| lo eth0 |
| Currently active devices: |
| lo eth0 docker0 |
| |
| |
| |
| |
| |
- uptime [-ps]:查看系统负载信息,输出内容与
w命令
输出的第一行一样
[root@iZbp1hog1euguwis9nc1f5Z ~]
11:34:56 up 304 days, 16:46, 2 users, load average: 0.26, 0.26, 0.19
[root@iZbp1hog1euguwis9nc1f5Z ~]
up 43 weeks, 3 days, 17 hours, 10 minutes
[root@iZbp1hog1euguwis9nc1f5Z ~]
2023-10-09 18:48:39
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理