Linux常用命令整理

本文将分享一些常用的Linux命令。根据功能的不同,大概分为以下几个方面,一是文件相关命令,二是进程相关命令,三是网络相关命令,四是磁盘相关命令,五是用户管理相关命令,六是系统命令。

1. 文件相关命令

**ls:**用于列出当前目录下文件和目录。

bash 复制代码
ls [选项] [文件/目录]
选项: 可用于控制 ls 命令的显示方式。
文件/目录: 指定要列出的文件或目录。

常见选项:
-l: 长列表模式,显示详细的文件信息,包括权限、大小、修改时间、所有者等。
-a: 显示所有文件,包括隐藏文件(以 . 开头的)。
-h: 以人类可读的大小单位显示文件大小(如 KB、MB、GB)。
-r: 反转文件顺序。
-t: 按修改时间排序。

比如列出当前目录下所有文件,包括隐藏文件:
ls -a

**cd:**用于改变当前工作目录。

bash 复制代码
cd ..: 切换到上级目录
cd /: 切换到根目录
切换到当前用户的 home 目录:cd ~
更改多个目录:cd Documents/Projects

**mkdir:**用于创建新目录。

bash 复制代码
创建单个目录:
mkdir 新目录
 
创建多个目录:
mkdir 目录1 目录2 

使用绝对路径创建目录:
mkdir /home/user/Documents/新文件夹

-p: 创建目录的父级目录。
mkdir -p /home/user/Documents/新文件夹/子文件夹
这会创建 /home/user/Documents/新文件夹/子文件夹 所有必要父级目录。

**rmdir:**用于删除空目录.。

bash 复制代码
删除单个空目录:
rmdir 空目录

-p:递归删除目录及所有子目录。使用 -p 选项时,需要确保要删除的目录是空目录,否则会产生错误。
递归删除 "project" 目录及其所有子目录
rmdir -p project

**rm:**用于删除文件和目录。

bash 复制代码
删除单个文件:
rm 文件名

删除多个文件:
rm 文件1 文件2 文件3

删除目录 (该目录为空):
rm 目录名

选项:
-f: 强制删除文件,不询问确认。
-r: 递归删除目录和子文件/目录。使用 -r 选项会永久删除指定目录及其所有内容。
-i: 删除前询问确认。

删除名为 "myfile.txt" 的文件:
rm myfile.txt

递归删除 "project" 目录及其所有内容:
rm -r project

**tourch:**用于创建新文件,或更新已有文件的最后修改时间。

bash 复制代码
touch [选项] 文件名
选项:
-a 或 --atime: 仅更新文件的访问时间。
-m 或 --mtime: 只更新文件的修改时间。
-c 或 --no-create: 如果目标文件已存在,则不创建新文件,直接退出。
-t 时间戳: 设置文件的最后修改时间为指定的时间戳。时间戳的格式通常为 YYYYMMDDHHMMSS。

创建名为 "newfile.txt" 的新空文件:
touch newfile.txt

更新名为 "file.pdf" 的文件的访问时间和修改时间:
touch -a -m file.pdf

touch 命令无法创建目录。
若指定的文件已存在,则执行 touch 命令不会改变文件内容,只会更新其最后修改时间。
如果使用 touch -t 设置文件的最后修改时间为未来时间,则系统会显示错误。

cp:

bash 复制代码
cp [选项] 源文件/目录 目标文件/目录
选项:
-i 或 --: 复制文件之前询问确认。
-f 或 --force: 如果目标文件已存在,则覆盖其,不询问确认。
-r 或 --recursive: 递归复制目录和子文件/目录。必要选项用于复制目录。
-p 或 --preserve: 保留源文件/目录的属性 (权限、所有者、时间戳等)。


复制名为 "image.jpg" 的文件到桌面:
cp image.jpg ~/Desktop/

复制名为 "project" 的目录及其所有内容到 "backup" 目录:
cp -r project backup/

cp 命令不会创建父目录。如果目标目录不存在,则需要先创建。
当复制多个文件时,您可以将它们列出,或者使用通配符 (例如 *.txt ) 指定要复制的文件。

**mv:**用于移动或者重命名文件和目录。

bash 复制代码
mv [选项] 源文件/目录 目标文件/目录
选项:
-i 或 --: 移动文件之前询问确认。
-f 或 --force: 如果目标文件已存在,则覆盖它,不询问确认。
-n 或 --no-clobber: 如果目标文件已存在,则不覆盖它,会退出。

移动文件:
mv sourcefile targetdirectory

重命名文件:
mv sourcefile newfilename

移动目录 (包含子目录和文件) :
mv source_directory targetdirectory

比如:
移动名为 "report.docx" 的文件到 "documents" 目录:
mv report.docx documents/

重命名名为 "file.txt" 的文件为 "newfile.txt":
mv file.txt newfile.txt

移动名为 "music" 的目录到 "home" 目录:
mv music home/music

mv 命令不能直接创建父目录。
当移动文件到已经存在的目录时,如果目标filename 已经存在,并且没有使用 -f 选项,系统会提示您是否覆盖。

**cat:**用于连接并显示文件内容。

bash 复制代码
cat [选项] 文件名
选项:
-n: 在每一行末尾显示行号。
-b: 在每一行首显示空白字符对应的十进制编号。
-s: 合并连续的空白行。
-A: 显示所有非打印字符,包括空格、制表符、回车符等,并使用 ASCII 码表示。
-E: 显示所有非打印字符,包括空格、制表符、回车符等,并使用 ASCII 码表示。

显示文件 "notes.txt" 内容并显示行号:
cat -n notes.txt

连接文件 "data1.txt","data2.txt" 和 "data3.txt" 并输出到终端:
cat data1.txt data2.txt data3.txt > output.txt 

将文件 "README.md" 的内容写入到另一个文件 "file.txt":
cat README.md > file.txt 


cat 命令会直接读取文件内容并输出,无法进行文件的修改。

**more:**用于分页显示文件内容。

bash 复制代码
more [选项] 文件名 
选项:
-n num: 每页显示 num 行。
-c: 显示目录符号。
-f: 忽略文件名的提示信息。
-r: 以 RAW 模式读取文件内容,不进行转义处理。
-d: 只显示文件名,不显示内容。

交互模式:
空格键: 滚动下一屏内容。
回车键: 滚动下一屏内容。
上箭头键: 返回上一屏内容。
下箭头键: 前进下一屏内容。
** 数字:** 向前或向后跳到指定行。
q键: 退出 more 命令。
** /pattern:** 从当前位置开始搜索指定的模式,并跳转到匹配行。
?pattern: 从当前位置开始搜索反模式匹配的行。

分页显示文件 "file.txt" 内容:
more file.txt

分页显示文件 "log.txt" 内容,每页显示 10 行:
more -n 10 log.txt

直接退出 more 命令,不显示内容
more -d file.txt

搜索文件 "config.ini" 中包含 "port" 的所有行
more /config.ini /port
注意:

more 命令只能一次显示一屏内容,以便于阅读和浏览大型文件。

**less:**用于分页显示文件内容,但它比more功能更加强大。

基本语法

bash 复制代码
less [选项] 文件名
选项:
-n num: 每页显示 num 行。
-r: 以 RAW 模式读取文件内容,不进行转义处理。
-s: 忽略文件名的提示信息。
-G: 忽略末尾空白行。

交互模式:
空格键: 滚动下一屏内容。
回车键: 滚动下一屏内容。
上箭头键: 返回上一屏内容。
下箭头键: 前进下一屏内容。
** 数字:** 向前或向后跳到指定行。
** /pattern:** 从当前位置开始搜索指定的模式,并跳转到匹配行。
** ?pattern:** 从当前位置开始搜索反模式匹配的行。
=: 在当前行显示行号。
p 或 P: 显示当前行前/后的行。
b: 显示文件开头。
e: 显示文件结尾。
q: 退出 less 命令。


分页显示文件 "log.txt" 内容,每页显示 20 行:
less -n 20 log.txt

搜索文件 "config.ini" 中包含 "port" 的所有行
less /config.ini /port 

在 less 命令中显示当前行的行号
less file.txt
=

less 命令比 more 命令更强大,因为它支持搜索、标记、书签等更多功能。

**head:**用于显示文件开头部分的内容。

bash 复制代码
head [选项] 文件名
选项:
-n num: 显示文件的前 num 行。
-c num: 显示文件的前 num 字节。

显示文件 "file.txt" 的前 10 行:
head -n 10 file.txt

显示文件 "log.txt" 的前 5 行:
head -5 log.txt

查看文件 "index.html" 的标题行:
head -n 1 index.html

查看文件 "data.csv" 的前 100 字节:
head -c 100 data.csv

**tail:**用于显示文件末尾部分的内容。

bash 复制代码
tail [选项] 文件名
选项:
-n num: 显示文件的后 num 行。
-c num: 显示文件的后 num 字节。

交互模式:
-f: 实时跟踪文件,当文件添加新内容时会滚动并显示。
-s num: 合并重复的行数之前的行数为 num。
-q: 静默模式,不显示文件名的提示信息。

显示文件 "file.txt" 的最后 10 行:
tail -n 10 file.txt

显示文件 "log.txt" 的最后 50 行:
tail -n 50 log.txt

实时监控日志文件 "server.log" 的最新内容:
tail -f server.log

**vi/vim:**文本编辑器。

bash 复制代码
Vim主要分为两种模式:命令模式和插入模式。

命令模式:用于执行编辑操作,需要使用命令来控制编辑器的行为。
插入模式:用于输入文本内容。

vim filename:打开名为 "filename" 的文件。如果文件不存在,vim将创建新文件。

打开一个文件后,默认处于命令模式。

按下 i 键进入插入模式

按下 Esc 键返回命令模式。

:w 键保存文件
:wq 键保存文件并退出
:q! 键强制退出,不保存文件

退出编辑器:
:q! 关闭文件不保存
:q 保存文件后退出

移动光标:
h:左移一格
j:下移一格
k:上移一格
l:右移一格
0:移动到行首
$:移动到行尾
gg:移动到文件开头
G:移动到文件末尾

删除文字:
x:删除光标所在字符
dw:删除光标所在词
dd:删除整行

搜索:
/pattern:向前搜索 "pattern"
?pattern:向后搜索 "pattern"

注释:
在每一行开头添加尖号 ( # ),实现注释

**find:**用于查找文件和目录。

bash 复制代码
find 路径 参数
常用参数:
路径:指定查找的起始路径。如果不指定路径,默认从当前目录开始查找。
参数:用来指定查找的条件和操作。
. 表示当前目录

按文件名查找:
find . -name "*.txt"
这条命令在当前目录及其所有子目录中查找所有以 .txt 结尾的文件,并打印它们的路径。

按文件类型查找:
find . -type f
这条命令查找当前目录及其所有子目录中的所有普通文件,并打印它们的路径。-type d 可以查找目录。

按文件大小查找:
find . -size +1M
这条命令查找当前目录及其所有子目录中大小大于1MB的文件,并打印它们的路径。-size -1M 可以查找小于1MB的文件。

按文件权限查找:
find . -perm 644
这条命令查找当前目录及其所有子目录中文件权限为 644 的文件,并打印它们的路径。

按时间戳查找:
find . -mtime -7
这条命令查找当前目录及其所有子目录中最近7天内修改过的文件,并打印它们的路径。-mtime +7 则可以查找7天前修改过的文件。

打印文件路径:
find . -name "*.log" -print
这条命令查找当前目录及其所有子目录中所有以 .log 结尾的文件,并逐行打印它们的路径。

查找当前目录及其所有子目录中的所有普通文件,并将它们的权限修改为 644。
find . -type f -exec chmod 644 {} \;
或者
find . -type f -exec chmod 644 {} +
上述写法会将 find 找到的文件一次性传递给 chmod 命令,而不是每找到一个文件就执行一次 chmod。这种方式可以在性能上稍微优化,特别是在处理大量文件时。

find . -name "*.jpg" -exec cp {} /backup \;
这条命令查找当前目录及其所有子目录中所有以 .jpg 结尾的文件,并将它们复制到 /backup 目录。

**grep:**用于在文件中搜索指定文本。

bash 复制代码
grep 选项 模式 文件名
常用选项:
-i: 忽略大小写。
-r 或 -R: 递归地在目录中搜索文件。
-n: 显示匹配行及其行号。
-v: 显示不匹配的行。
-E: 使用扩展正则表达式。
-F: 使用固定字符串(Fixed Strings)。
-o: 只显示匹配的部分。
-w: 匹配整个单词。
-c: 统计匹配的行数。
-l: 列出包含匹配的文件名。
-L: 列出不包含匹配的文件名。

在文件中查找特定文本:
grep "pattern" file.txt
这条命令会在 file.txt 中查找包含 pattern 的所有行,并将它们打印出来。

忽略大小写进行搜索:
grep -i "pattern" file.txt
使用 -i 选项可以忽略大小写,例如查找 Pattern、PATTERN、pattern 等都会匹配。

递归地在目录中搜索文件:
grep -r "pattern" directory/
使用 -r 选项可以递归地在指定目录 directory/ 及其子目录中搜索包含 pattern 的所有文件。

显示匹配行及其行号:
grep -n "pattern" file.txt
使用 -n 选项可以显示匹配行及其行号,方便定位匹配的具体位置。

仅显示匹配的部分:
grep -o "pattern" file.txt
使用 -o 选项可以仅显示匹配的部分,而不是整行内容。

统计匹配的行数:
grep -c "pattern" file.txt
使用 -c 选项可以统计匹配的行数而不显示具体匹配内容。

显示不匹配的行:
grep -v "pattern" file.txt
使用 -v 选项可以显示不包含 pattern 的所有行。

匹配整个单词:
grep -w "word" file.txt
使用 -w 选项可以确保只匹配整个单词 word,而不是单词的一部分。

列出包含匹配的文件名:
grep -l "pattern" *.txt
使用 -l 选项可以列出所有包含 pattern 的文件名,而不显示具体匹配内容。

查找 file.txt 中完全匹配 "exact string" 的行。
grep -F "exact string" file.txt

**(tar,gzip):**用于打包和解压文件。

bash 复制代码
归档文件通常是一个或多个文件的集合,它们可能被压缩以节省空间。归档文件通常使用.tar扩展名,可能还会附带其他压缩方法,如.gz(代表gzip)或.bz2(代表bzip2)。

例如:
file.tar 是一个未压缩的归档文件。
file.tar.gz 是一个使用gzip压缩的归档文件。
file.tar.bz2 是一个使用bzip2压缩的归档文件。


tar命令用法

1.创建归档文件
tar -cvf archive.tar file1 file2 ... 
-c:创建一个新的归档文件。
-v:显示详细的操作过程(verbose),可以查看哪些文件被添加到归档中。
-f archive.tar:指定归档文件的名称。

创建一个名为 backup.tar 的归档文件,包含当前目录下所有文件和子目录:
tar -cvf backup.tar .

创建一个名为 documents.tar 的归档文件,仅包含当前目录下的 docs 文件夹:
tar -cvf documents.tar docs


2. 查看归档文件内容
tar -tvf archive.tar 
-t:显示归档文件中包含的文件列表。

查看 backup.tar 中包含的文件列表:
tar -tvf backup.tar


3. 解压归档文件
tar -xvf archive.tar  
-x:解压归档文件中的内容。

解压 backup.tar 中的文件到当前目录:
tar -xvf backup.tar


4. 添加文件到已存在的归档文件
tar -rvf archive.tar newfile.txt  
-r:在已存在的归档文件末尾添加文件。

向 backup.tar 中添加新文件 important.txt:
tar -rvf backup.tar important.txt


5. 从归档文件中删除文件
tar --delete -f archive.tar file_to_delete.txt  
--delete:从归档文件中删除指定的文件。

从 backup.tar 中删除 oldfile.txt:
tar --delete -f backup.tar oldfile.txt


6. 其他常用选项
-z:通过 gzip 压缩归档文件(通常用 .tar.gz 扩展名)。
-j:通过 bzip2 压缩归档文件(通常用 .tar.bz2 或 .tbz 扩展名)。
-C:切换到指定目录后执行操作。

gzip命令用法

1.基本用法
压缩文件,生成 filename.gz
gzip filename 

gzip example.txt
这将生成一个名为 example.txt.gz 的压缩文件,并删除原始的 example.txt 文件。

2. 解压缩文件
解压缩文件 filename.gz
gzip -d filename.gz  

解压缩 example.txt.gz 文件:
gzip -d example.txt.gz

3. 查看压缩比和文件信息

gzip -l filename.gz 
显示压缩文件的信息

查看 example.txt.gz 的压缩信息:
gzip -l example.txt.gz

4. 压缩选项
gzip 命令本身并不提供太多复杂的选项,它主要用于简单的压缩和解压缩操作。
以下是一些常见的压缩选项:
-f:强制压缩,即使文件已经存在或者已经压缩过。
-k:保留原始文件,即不删除原始文件,而是保留压缩后的文件副本。

强制压缩 example.txt,即使已经存在 example.txt.gz:
gzip -f example.txt

保留原始文件 example.txt,并且生成 example.txt.gz:
gzip -k example.txt


默认情况下,gzip 在压缩文件时会删除原始文件,并生成 .gz 后缀的压缩文件。使用 -k 选项可以保留原始文件。
gzip 不支持直接压缩多个文件或目录。如果需要压缩多个文件,通常会结合 tar 命令来先打包成 .tar 文件,然后再用 gzip 进行压缩。

**chmod:**用于更改文件或目录的权限(权限控制)。

bash 复制代码
chmod [选项] 模式 文件名
常用选项:
-R:递归地应用权限更改到目录及其子目录和文件。
-v:显示详细的权限更改信息。
-c:仅在发生更改时显示操作信息。

chmod 命令的模式可以使用两种方法来指定权限:
1. 符号模式:
符号模式允许你通过符号来指定权限的增加或减少。它的基本语法如下:
chmod [ugoa...][[+-=][rwxXstugo...]...][文件名]
u:所有者(user)权限。
g:所属组(group)权限。
o:其他用户(others)权限。
a:所有用户(相当于 ugo 的组合)。

权限符号包括:
+:增加权限。
-:减少权限。
=:设置权限。

权限标志:
r:读权限。
w:写权限。
x:执行权限。

给文件的所有者增加执行权限。
chmod u+x filename



2. 数字模式:
数字模式使用数字来指定权限,每个权限用数字表示如下:
4:读权限(r)。
2:写权限(w)。
1:执行权限(x)。

将这些数字按照权限组合起来,每个组合的总和就是权限的数字表示。例如:
7:rwx(读、写、执行权限)。
6:rw-(读、写权限)。
5:r-x(读、执行权限)。
4:r--(只读权限)。

给文件设置如下权限:所有者(user)具有读、写、执行权限(7),所属组(group)和其他用户(others)具有读、执行权限(5)。
chmod 755 filename

给文件添加执行权限:
chmod +x filename

递归更改目录及其子目录的权限:
chmod -R 755 directoryname

显示详细的权限更改信息:
chmod -v 644 filename

仅在发生更改时显示操作信息:
chmod -c 600 filename

**chown:**用于更改文件或目录的所有者。

bash 复制代码
chown [选项] 新所有者 文件或目录
常用选项:
-R:递归地更改指定目录及其所有子目录和文件的所有者。
-v:显示详细的操作信息。
-c:仅在更改了文件所有者时显示操作信息。

参数说明:
新所有者:可以是用户名、用户ID、用户:组合的形式(将文件所有者更改为指定用户和组合)或者直接是组名。如果只提供用户名或用户ID,文件的所属组不会更改。
文件或目录:要更改所有者的文件名或目录名。

将 filename 文件的所有者更改为 user1:
chown user1 filename

递归地将 directoryname 目录及其所有子目录和文件的所有者更改为 user2,同时将所属组更改为 group2:
chown -R user2:group2 directoryname

将 filename 文件的所属组更改为 group3,而文件所有者不变:
chown :group3 filename

将文件 filename 的所有者和所属组都更改为用户ID为 1001 的用户,组ID也为 1001 的组:
chown 1001:1001 filename

递归地将 directoryname 目录及其所有子目录和文件的所有者更改为 user3,但所属组不会更改:
chown -R user3 directoryname

只有超级用户(root)才能更改其他用户的文件所有者。一般用户只能更改自己拥有的文件或目录的所有者。

**chgrp:**用于更改文件或目录的所属组。

bash 复制代码
chgrp [选项] 新组名 文件或目录
常用选项:
-R:递归地更改指定目录及其所有子目录和文件的所属组。
-v:显示详细的操作信息。
-c:仅在更改了文件所属组时显示操作信息。

参数说明:
新组名:可以是组名或者组ID。
文件或目录:要更改所属组的文件名或目录名。

将文件的所属组更改为指定组:
chgrp group1 filename
这个命令将 filename 文件的所属组更改为 group1。

递归地更改目录及其内容的所属组:
chgrp -R group2 directoryname
这个命令将递归地将 directoryname 目录及其所有子目录和文件的所属组更改为 group2。

使用组ID来更改文件的所属组:
chgrp 1002 filename
这个命令将文件 filename 的所属组更改为组ID为 1002 的组。

chown 命令可以同时更改文件的所有者和所属组,而 chgrp 命令只能更改所属组。

**pwd:**用于显示当前工作目录的路径

**echo:**用于打印输出文本或变量内容到标准输出

2. 进程相关命令

**ps:**用于显示进程状态。

bash 复制代码
ps [options]
常用选项:
-e: 显示所有进程,包括其他用户的进程。
-f: 显示完整格式,包括父进程 ID (PPID)、CPU 使用情况等。
-l: 长格式显示,显示更多的信息,如进程状态、执行时间等。
-u user: 显示特定用户的进程信息。
-p pid: 显示指定进程 ID (PID) 的信息。
-o format: 自定义输出格式。
-a: 显示所有终端(包括与终端无关的)的进程。
-x: 显示没有控制终端的进程。

显示当前所有进程:
ps
这会显示当前终端下运行的所有进程的简要信息,如进程 ID (PID) 和命令名。

显示所有进程的详细信息:
ps -ef
这会显示系统中所有进程的详细信息,包括进程的所有者、PID、父进程 ID (PPID)、CPU 使用率、内存占用等。

显示特定用户的进程:
ps -u username
这会显示特定用户 username 运行的所有进程的信息。可以用于查看某个用户的进程状态。

查找特定进程 ID (PID) 的信息:
ps -p pid
这会显示指定 PID 的进程信息,例如 ps -p 1234 将显示 PID 为 1234 的进程详细信息。

显示所有进程的全格式信息:
ps -efl
这会以长格式显示所有进程的详细信息,包括更多的字段如进程状态、启动时间、CPU 时间等。

查看系统中所有进程的树形结构:
ps -e --forest
这会以树形结构显示所有进程的关系,包括父子进程的层级关系,有助于理解进程之间的衍生关系。

显示没有控制终端的进程:
ps -x
这会显示所有没有控制终端的进程,这些进程通常是守护进程或者后台任务。

自定义输出格式:
ps -o pid,ppid,user,%cpu,%mem,cmd
这会自定义输出字段,仅显示指定的字段如 PID、PPID、用户、CPU 使用率、内存使用率和命令名。

进程状态字段可以包括 R(运行)、S(睡眠)、D(不可中断睡眠)、Z(僵尸)、T(停止)等

**top和htop:**动态显示系统中的进程和资源使用情况。

bash 复制代码
top
输入 top 命令即可启动 top,默认情况下会按照 CPU 使用率进行排序并显示进程列表。

常用交互命令:
q:退出 top。
h:显示帮助信息。
k:终止选中的进程。
1:显示各 CPU 核心的详细信息。
f:添加或移除显示的字段。

选项:
-u username:只显示特定用户的进程。
-p PID:显示指定 PID 的进程信息。
-o field1,field2,...:自定义输出字段。


htop
输入 htop 命令启动 htop,它是 top 的增强版本,提供了更丰富的功能和更直观的界面。

htop 使用彩色显示,区分不同的进程状态和资源使用情况,使信息更直观。并且提供了更多的交互命令和操作选项,可以通过函数键进行快捷操作。

常用交互命令:
F1:显示帮助信息。
F4:筛选进程,按名称或其它条件过滤。
F5:刷新显示。
F9:选择进程操作,如终止进程、优先级调整等。
F10:退出 htop。

选项:
-u username:只显示特定用户的进程。
-p PID:显示指定 PID 的进程信息。
-d seconds:指定刷新间隔时间。

top vs htop:
top 是最基本的进程查看工具,可用性强。
htop 提供了更加交互化和信息丰富的界面,适合需要更详细信息和更好用户体验的场景。

**kill:**用于终止进程。

bash 复制代码
kill [options] PID
PID 是要终止的进程的进程号(Process ID)。
options 是可选的参数,用于指定不同的信号或调整 kill 命令的行为。

常用信号:
SIGTERM (15):默认信号,请求终止进程。通常会允许进程做清理工作,然后自行退出。
SIGKILL (9):强制终止进程。该信号会立即终止进程,不允许进程做清理操作。
SIGHUP (1):挂起信号。通常用于重新启动进程,如重新加载配置文件等。

选项
-signal 或 -s signal:指定要发送的信号类型。例如,-9 或 -SIGKILL 都是发送 SIGKILL 信号。
-l:显示支持的所有信号列表。
-a:不实际发送信号,仅检查进程是否存在并可以发送信号。

终止进程号为 12345 的进程:
kill 12345

使用 SIGKILL 强制终止进程:
kill -9 12345

重新启动进程:
kill -1 12345

显示支持的所有信号列表:
kill -l

**nicerenice:**用于调整进程优先级。

bash 复制代码
nice 命令用于启动新进程时设置其优先级。

nice [options] command [arguments]
command 是要执行的命令或程序。
arguments 是命令的参数。

优先级调整
nice 命令通过调整进程的优先级来控制 CPU 分配。优先级范围从 -20(最高优先级)到 19(最低优先级),默认值是 0。

增加优先级:较高的优先级值意味着进程更容易获取 CPU 时间。
nice -n <priority> command
其中 <priority> 是一个数值,在 -20 到 19 之间。例如,nice -n 10 command 会以较高的优先级运行 command。

降低优先级:较低的优先级值使得进程更少获取 CPU 时间。
nice -n -<priority> command
例如,nice -n -10 command 会以较低的优先级运行 command。


以较高优先级运行 gzip 压缩文件:
nice -n 10 gzip filename

以较低优先级运行长时间运行的任务:
nice -n -10 ./long_running_task.sh


renice 命令用于修改已经运行的进程的优先级。与 nice 不同,renice 可以调整已经运行中的进程的优先级。

renice [options] priority [[-p] pid | [-g] pgrp | [-u] user]
priority 是要设置的新优先级。
-p pid:根据进程号 (PID) 修改优先级。
-g pgrp:根据进程组号 (Process Group ID) 修改优先级。
-u user:根据用户名修改优先级。

提高进程号为 12345 的进程优先级:
renice +10 -p 12345

降低进程组号为 54321 的所有进程优先级:
renice -5 -g 54321

3. 网络相关命令

**ifconfig:**用于配置和显示网络信息

bash 复制代码
ifcopnfig命令用法

显示所有网络接口信息:
ifconfig
这会列出所有网络接口的详细信息,包括接口名称、IP地址、MAC地址、子网掩码、广播地址等。

显示特定网络接口信息:
ifconfig eth0
这将显示 eth0 接口的详细配置信息。

配置网络接口:
设置IP地址和子网掩码:
sudo ifconfig eth0 192.168.1.100 netmask 255.255.255.0
这条命令将 eth0 接口配置为IP地址 192.168.1.100,子网掩码 255.255.255.0。

启用接口:
sudo ifconfig eth0 up
这会启用 eth0 接口,使其可以开始进行网络通信。

禁用接口:
sudo ifconfig eth0 down
这会禁用 eth0 接口,停止其进行网络通信。

指定广播地址:
可以使用 broadcast 参数来指定接口的广播地址:
sudo ifconfig eth0 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255

显示所有接口信息:
如果要显示所有接口(包括未激活的),可以使用 -a 参数:
ifconfig -a

ifconfig 命令所做的修改通常是临时的,系统重启后会重置。要永久修改网络配置,需要编辑相应的配置文件。/etc/network/interfaces(Debian/Ubuntu)或 /etc/sysconfig/network-scripts/ifcfg-eth0(CentOS/RHEL)。

**ip:**用于管理网络接口、路由表、地址等。

bash 复制代码
显示当前网络接口信息:
ip address
这会列出所有网络接口的配置信息,包括激活和未激活的接口。

显示路由表:
使用 ip route 命令可以查看当前系统的路由表,显示系统如何决定发送数据包的目标地址:
ip route
这会列出所有的路由表项,包括目标网络、网关、接口等信息。

显示链接状态:
ip link
使用 ip link 命令可以显示网络接口的链接状态,包括接口名称、状态(UP或DOWN)、MAC地址等

设置IP地址和子网掩码:
sudo ip address add 192.168.1.100/24 dev eth0
这会将 eth0 接口配置为IP地址 192.168.1.100,子网掩码为 255.255.255.0。

使用 ip link 命令可以启用或禁用网络接口:
sudo ip link set dev eth0 up
这会启用 eth0 接口,使其可以开始进行网络通信。
sudo ip link set dev eth0 down
这会禁用 eth0 接口,停止其进行网络通信。

修改MAC地址:
使用 ip link 命令可以修改网络接口的MAC地址
sudo ip link set dev eth0 address 00:11:22:33:44:55
这会将 eth0 接口的MAC地址修改为 00:11:22:33:44:55。

添加路由:
使用 ip route add 命令可以手动添加路由
sudo ip route add 192.168.2.0/24 via 192.168.1.1 dev eth0
这条命令添加了一个到 192.168.2.0/24 子网的路由,使用 192.168.1.1 作为网关,通过 eth0 接口。

删除路由:
使用 ip route del 命令可以删除路由
sudo ip route del 192.168.2.0/24
这条命令将删除路由表中到 192.168.2.0/24 子网的路由。

修改路由:
使用 ip route change 命令可以修改现有路由的参数,例如修改下一跳的地址或出接口。

**netstat:**用于显示网络状态。

bash 复制代码
使用 netstat 命令可以显示当前系统上所有的网络连接信息,包括TCP、UDP、UNIX域套接字等:
netstat

显示特定类型的连接:
可以使用 -t(TCP)、-u(UDP)、-n(数字格式)、-p(显示进程)等选项来筛选显示特定类型的连接,例如:
netstat -t           # 显示所有TCP连接
netstat -u           # 显示所有UDP连接
netstat -n           # 显示数字格式(IP地址而非域名)
netstat -p           # 显示与连接关联的进程
可以结合使用这些选项,例如 netstat -tunp 将显示所有TCP和UDP连接,并且显示与连接相关联的进程。

显示网络接口信息
显示网络接口统计信息:
使用 -i 选项可以显示网络接口的统计信息,包括接口名称、接收和发送的数据包数量、错误等:
netstat -i


显示路由表信息:
使用 -r 选项可以显示系统的路由表信息,包括目标网络、网关、接口等:
netstat -r

显示UNIX域套接字:
使用 -x 选项可以显示所有UNIX域套接字(本地套接字)的信息:
netstat -x

**ping:**用于测试与目标主机的网络连接

bash 复制代码
基本用法:
ping target_address
其中 target_address 可以是主机名(例如 example.com)或者IP地址(例如 192.168.1.1)。

持续 ping 测试:
使用 -c 选项可以指定发送 ICMP 请求的次数。例如,要发送5个 ICMP 请求:
ping -c 5 target_address
这将会发送5个 ICMP 请求到目标主机,并显示每次请求的回应情况。

连续 ping 测试:
使用 -i 选项可以设置 ICMP 请求之间的时间间隔(单位为秒)。例如,设置每隔1秒发送一个 ICMP 请求:

ping -i 1 target_address
这将持续发送 ICMP 请求,直到手动中断(Ctrl+C)。


指定包大小:
使用 -s 选项可以指定 ICMP 数据包的大小(字节)。例如,发送一个大小为100字节的 ICMP 请求:
ping -s 100 target_address
这在测试网络连通性时可以测试不同大小的数据包对网络的影响。

显示时间戳:
使用 -D 选项可以在每行输出中显示时间戳,以便更精确地测量延迟:
ping -D target_address

设置超时时间:
使用 -W 选项可以设置等待目标主机响应的超时时间(单位为秒)。例如,设置超时时间为2秒:
ping -W 2 target_address
如果目标主机在2秒内未响应,则视为超时。

使用特定网络接口:
使用 -I 选项可以指定使用特定的网络接口发送 ICMP 请求。例如,使用 eth0 接口发送 ICMP 请求:
ping -I eth0 target_address


ping 命令的输出通常显示每个 ICMP 回显应答的统计信息,例如:
每个包的回应时间(RTT,Round-Trip Time)。
丢包率(如果有的话)。
发送的字节数和接收的字节数。

**traceroute:**用于追踪数据包从本地主机到目标主机的网络路径

bash 复制代码
基本的 traceroute 追踪:
traceroute target_address
其中 target_address 可以是主机名(例如 example.com)或者IP地址(例如 192.168.1.1)。

指定使用的协议:
使用 -I 选项可以指定使用 ICMP 协议进行 traceroute:
traceroute -I target_address
使用 -U 选项可以指定使用 UDP 协议进行 traceroute:
traceroute -U target_address
默认情况下,traceroute 使用 UDP 协议。

指定端口号:
使用 -p 选项可以指定发送的 UDP 数据包的目标端口号。这对于避开某些防火墙规则或特定的路由器过滤规则可能有用:
traceroute -p port_number target_address

设置最大跃点数:
使用 -m 选项可以指定 traceroute 搜索路由路径的最大跃点数(默认为30):
traceroute -m max_hops target_address
这对于控制 traceroute 的最大深度和减少不必要的跟踪尝试很有用。

显示延迟:
使用 -q 选项可以指定每个 TTL 值发送的查询数(默认为3),从而显示每个路由器的平均延迟:
traceroute -q queries target_address

显示IP地址:
使用 -n 选项可以以数字形式显示IP地址,而不是尝试进行反向域名解析:
traceroute -n target_address


traceroute 命令的输出通常显示每个路由器(每一跳)的IP地址、每一跳的延迟(RTT,Round-Trip Time)、跳数(TTL)等信息。在每一跳的行中,通常会显示如下信息:
序号:显示当前跃点数。
IP地址:显示当前路由器的IP地址。
延迟:显示到达当前路由器的往返时间。

route: 显示和操作 IP 路由表

bash 复制代码
显示当前路由表:
route
这将列出系统当前所有的路由信息,包括目标网络、网关、掩码、接口和标志等。

显示详细信息:
使用 -n 选项可以以数字格式显示IP地址,而不是尝试进行反向域名解析:
route -n
这对于查看路由表时,避免等待反向域名解析的延迟很有帮助。

添加路由:
使用 add 子命令可以添加一个新的路由。
将网络 192.168.10.0/24 通过网关 192.168.1.1 添加到接口 eth0:
sudo route add -net 192.168.10.0 netmask 255.255.255.0 gw 192.168.1.1 dev eth0
add:添加路由。
-net:指定目标网络。
netmask:指定子网掩码。
gw:指定网关。
dev:指定接口。

删除路由:
使用 del 子命令可以删除一个现有的路由。
删除到网络 192.168.10.0/24 的路由:
sudo route del -net 192.168.10.0 netmask 255.255.255.0

修改路由:
使用 change 子命令可以修改一个现有的路由。
将网关修改为 192.168.1.2:
sudo route change -net 192.168.10.0 netmask 255.255.255.0 gw 192.168.1.2

查看特定目标的路由信息:
使用 -n 选项加上目标IP地址可以查看特定目标的路由信息。
查看到主机 192.168.1.100 的路由:
route -n | grep 192.168.1.100


route 命令的输出通常会列出每条路由的详细信息,包括目标网络、网关、掩码、接口和标志等。例如:
目标:显示目标网络或主机的IP地址。
网关:显示用于到达目标的下一跳路由器的IP地址。
掩码:显示目标网络的子网掩码。
接口:显示路由器的出口接口。
标志:显示路由的标志,例如 UG 表示此路由是默认网关。

**wget:**用于从网络下载文件。

bash 复制代码
下载单个文件:
wget URL
其中 URL 是要下载的文件的地址,可以是 HTTP、HTTPS 或 FTP 协议的链接。

保存文件到指定位置:
使用 -O 选项可以指定保存下载文件的路径和文件名:
wget -O /path/to/save/file URL
这将把下载的文件保存到指定的路径和文件名。


递归下载整个网站:
使用 -r 选项可以递归下载整个网站。这对于下载一个完整的静态网站非常有用:
wget -r URL
注意:递归下载可能会下载整个网站的所有链接,包括子链接,因此要谨慎使用,以免下载大量不必要的文件。

限制递归深度:
使用 -l 选项可以限制递归的深度,即下载的链接层级:
wget -r -l depth URL
这将限制下载到指定的深度层级。

断点续传:
使用 -c 选项可以启用断点续传功能。如果下载中断,可以继续下载未完成的部分而不是重新开始:
wget -c URL

后台下载:
使用 -b 选项可以在后台运行 wget,允许你继续执行其他命令:
wget -b URL
下载的进度和日志会保存在 wget-log 文件中。

限制下载速度:
使用 --limit-rate 选项可以限制下载速度,以避免占用过多带宽:
wget --limit-rate=100k URL
这将限制下载速度为每秒100KB。

其他常用选项
-q:静默模式,减少输出。
-nv:非详细模式,减少详细输出。
-np:不递归上级目录。
-U:指定用户代理,模拟不同的浏览器访问。

**curl:**用于发送和接收数据

bash 复制代码
下载文件:
curl URL -o filename
这会将从 URL 下载的文件保存为 filename。

显示下载进度:
使用 -# 选项可以显示下载进度条:
curl -# URL -o filename
这样会在下载过程中显示进度条。

发送 GET 请求:
curl -X GET URL

发送 POST 请求,并使用 -d 选项传递数据:
curl -X POST -d 'data' URL
这会将 data 作为 POST 请求的数据发送给 URL。

使用 -H 选项可以设置请求头:
curl -H 'Content-Type: application/json' URL
这会将 Content-Type 设置为 application/json。

使用 -o 或 -O 选项可以将响应保存到文件:
curl URL -o filename
-o 用于指定保存的文件名,-O 用于使用从 URL 中推断出的文件名保存。

使用 -F 选项可以上传文件:
curl -F 'file=@localfile.txt' URL
这会将 localfile.txt 上传到 URL。

HTTPS 请求:
curl 默认支持 HTTPS,不需要额外选项。

使用 -u 选项可以进行基本的 HTTP 认证:
curl -u username:password URL
这会使用 username 和 password 进行 HTTP 基本认证。

其他常用选项
-s:静默模式,减少输出。
-v:详细模式,显示详细的请求和响应信息。
-L:跟随重定向。
--cookie:发送和接收 cookies。
--header:添加自定义头部信息。

**ssh:**用于访问和管理远程计算机

bash 复制代码
连接到远程主机:
ssh username@hostname
其中 username 是远程主机的用户名,hostname 是远程主机的 IP 地址或域名。

指定端口连接:
如果远程主机的 ssh 服务监听在非默认的端口(默认为 22),可以使用 -p 选项指定端口号:
ssh -p port username@hostname
其中 port 是 ssh 服务监听的端口号。

使用 SSH 密钥对进行认证可以更安全地连接到远程主机,而不需要输入密码:
ssh -i path/to/private_key username@hostname
path/to/private_key 是本地的私钥文件路径。


在 ssh 命令后面指定要在远程主机上执行的命令:
ssh username@hostname 'command'
这会连接到远程主机并执行 command。

其他常用选项
-C:请求压缩所有数据以提高性能。
-v:详细模式,显示 ssh 的调试信息。

**scp:**用于在本地主机和远程主机之间传输文件,通过 SSH 协议进行加密传输

bash 复制代码
使用 scp 将本地文件传输到远程主机上:
scp /path/to/local/file username@hostname:/path/to/remote/location
/path/to/local/file 是本地文件的路径。
username 是远程主机的用户名。
hostname 是远程主机的 IP 地址或域名。
/path/to/remote/location 是远程主机上文件存放的路径。

使用 scp 从远程主机获取文件到本地:
scp username@hostname:/path/to/remote/file /path/to/local/location
username 是远程主机的用户名。
hostname 是远程主机的 IP 地址或域名。
/path/to/remote/file 是远程主机上要获取的文件路径。
/path/to/local/location 是本地文件存放的路径。

指定端口连接:
如果 ssh 服务监听在非默认的端口(默认为 22),可以使用 -P 选项指定端口号:
scp -P port /path/to/local/file username@hostname:/path/to/remote/location

使用 SSH 密钥对进行认证:
可以使用 -i 选项指定私钥文件路径,以使用 SSH 密钥对进行认证:
scp -i /path/to/private_key /path/to/local/file username@hostname:/path/to/remote/location

递归复制目录:
scp -r /path/to/local/directory username@hostname:/path/to/remote/location
-r 选项可以递归地复制整个目录及其内容。

传输文件夹及其内容:
scp -r username@hostname:/path/to/remote/directory /path/to/local/location
-r 选项同样适用于传输整个文件夹及其内容。


其他常用选项
-v:详细模式,显示详细的调试信息。
-C:请求压缩传输的数据以提高性能。
-p:保持文件的修改时间和访问时间。
-l:限制传输速率,以避免网络拥塞。



确保远程主机的 SSH 服务和配置是安全的。
建议使用 SSH 密钥对进行认证,而不是在命令行中使用明文密码。
避免在不可信的网络环境中使用 scp,尤其是在未加密或不安全的网络中。

**nslookup:**用于查询 DNS信息

bash 复制代码
查询域名对应的 IP 地址:
nslookup example.com
这会输出 example.com 的 IP 地址记录,以及 DNS 解析过程中的相关信息。

反向查询 IP 地址对应的域名:
使用 -type=PTR 选项可以进行反向查询,即查询 IP 地址对应的域名:
nslookup -type=PTR 8.8.8.8
这会输出 IP 地址 8.8.8.8 对应的域名。

指定特定 DNS 服务器:
默认情况下,nslookup 使用操作系统配置的 DNS 服务器。可以使用 -querytype 选项指定查询的类型,以及 -server 选项指定特定的 DNS 服务器。
nslookup -querytype=MX example.com 8.8.8.8
这会查询 example.com 的邮件服务器记录(MX 记录),并使用 Google 的 DNS 服务器 8.8.8.8 进行查询。

设置递归查询:
使用 -recurse 选项可以强制 nslookup 执行递归查询,即继续向上级 DNS 服务器查询,直至找到结果。
nslookup -recurse example.com

显示详细信息:
使用 -debug 选项可以显示更详细的调试信息,包括 DNS 查询过程中的通信细节。
nslookup -debug example.com

其他常用选项
-timeout:设置查询超时时间,单位为秒。
-queryclass:设置查询的类别(通常使用默认值 IN)。
-port:指定要连接的远程 DNS 服务器的端口号。



A 记录(Address Record):
用途:将域名解析为 IPv4 地址。
示例:example.com 的 A 记录可以指定为 192.0.2.1,这样访问 example.com 就会被解析为 192.0.2.1。
AAAA 记录(IPv6 Address Record):
用途:将域名解析为 IPv6 地址。
示例:example.com 的 AAAA 记录可以指定为 2001:db8::1,这样访问 example.com 就会被解析为 2001:db8::1。

MX 记录(Mail Exchange Record):
用途:指定邮件服务器的优先级和域名。
示例:example.com 的 MX 记录可以指定为 10 mail.example.com,这表示邮件应该发送到 mail.example.com,优先级为 10。

NS 记录(Name Server Record):
用途:指定域名服务器(Name Server),负责解析特定域名的查询。
示例:example.com 的 NS 记录可以指定为 ns1.example.com 和 ns2.example.com,这些记录告诉其他 DNS 服务器去查询 ns1.example.com 和 ns2.example.com 来获取 example.com 的解析信息。

CNAME 记录(Canonical Name Record):
用途:创建域名的别名,实现域名的重定向。
示例:www.example.com 的 CNAME 记录可以指定为 example.com,这样访问 www.example.com 就会被重定向到 example.com。

4. 磁盘相关命令

**df:**用于查看磁盘空间使用情况

bash 复制代码
显示当前系统上所有已挂载文件系统的磁盘空间使用情况:
df
一般包括下列输出信息:
Filesystem: 文件系统名称,比如 /dev/sda1。
Size: 文件系统总大小,以 GB 为单位。
Used: 文件系统当前已使用空间大小,以 GB 为单位。
Avail: 文件系统当前剩余空间大小,以 GB 为单位。
Use%: 文件系统使用率,以百分比表示。
Mounted on: 文件系统挂载点,即在文件系统中访问它的路径,比如 / 或 /mnt/data。

显示特定文件系统的详细情况:
df /dev/sda1
这会显示 /dev/sda1 文件系统的。

显示不同单位的存储空间:
df -m
-h 表示使用人类可读的单位(KB,MB,GB),-m 表示使用兆字节(MB)为单位。

显示所有挂载点:
df -a 
这会显示所有已挂载的、隐藏的以及没有被其它命令挂载的块设备。

只显示已使用的空间:
df --total
这会展示一个总计行的统计信息,包括总存储空间,已使用的存储空间,以及空闲存储空间。

定制输出格式:
下列选项来定制输出格式。
df -T显示文件系统的类型
df -x type排除特定类型的文件系统排除

man df 可以获取更多关于 df 命令的详细文档和用法说明。

**du:**用来显示文件和目录的空间信息。

bash 复制代码
du [选项] 文件/目录
常用选项:
-h: 以人类可读的单位(如 KB, MB, GB)显示文件大小,而非原始的块大小。
-a: 显示所有子目录的大小,不仅仅是直接子目录。
-c: 在最后显示总大小。
-d: 指定要显示指定深度(可选:0-N)的目录结构信息。
-s: 只显示目录的总大小,而不显示其子目录内的大小。
-b:显示文件和目录的大小,以字节为单位。

显示当前目录下所有文件和目录的大小(以GB为单位):
du -sh *

显示当前目录下所有文件和子目录的大小 (以MB单位) :
du -hm *

仅显示单个目录的大小:
du -sb /home/user/Documents 

显示指定目录下所有子目录的大小 (以KB为单位,显示):
du -a /opt/data

只显示指定目录的总大小而不显示子目录的大小:
du -s /var/log


du 命令会将文件大小展示为整体的占用空间。

**lsblk:**用于列出系统的块设备信息。

bash 复制代码
sudo lsblk [选项]

常用选项:
-f : 显示文件系统。
-o : 指定要显示的输出格式 ( --print --version 查看可用格式)。
-h : 以更易读的单位显示设备大小 (KB、MB、GB...)

一般包括下列输出信息:
NAME: 是该块设备的名称,例如 /dev/sda 。
MAJ:MIN: 是主设备号和次设备号。
RM: 表示删除标记,0 表示未删除,1 表示已删除。
SIZE: 显示设备的大小。
RO: 表示只读标记,0 表示可读写,1 表示只读。
TYPE: 显示设备类型,例如 disk(硬盘),part(分区),loop(虚拟磁盘等)。
MOUNTPOINT: 显示挂载点,即该设备被挂载到的目录。

查看所有块设备信息:
sudo lsblk

查看指定设备的信息:
sudo lsblk /dev/sdb

查看指定类型设备的信息 (例如分区):
sudo lsblk -o NAME,SIZE,TYPE,MOUNTPOINT | grep 'part'

**fdisk:**用于管理磁盘分区

bash 复制代码
fdisk [选项] 设备文件
设备文件: 通常是 /dev/sda 类似的形式,表示要操作的分区磁盘。

常用选项:
-l : 列出磁盘分区表。
-n : 在创建分区时提供交互式帮助提示。
-C : 列出设备的默认分区表类型 (例如,msdos)。

显示磁盘分区表:
sudo fdisk -l
这会列出系统中所有已连接的磁盘及其分区信息。

进入fdisk交互式模式:
sudo fdisk /dev/sda
你会在 fdisk 交互式模式下看到各种操作命令。

创建新分区:
在fdisk模式下,输入 n 创建新分区。

设置分区类型:
在fdisk模式下,输入 t 可以设置分区类型。

退出fdisk模式:
进入fdisk模式后,输入 w 保存更改并退出。


fdisk 操作可能会导致数据丢失,确保备份重要数据。
在使用 fdisk 之前,请使用 lsblk 或 df 命令确认正在操作的磁盘和分区是正确的。

5. 用户管理相关命令

**id:**用于显示当前用户或指定用户的用户身份信息

bash 复制代码
id [选项] [用户名]
常用选项:
-u : 显示用户的 UID(用户标识号)。
-g : 显示用户所属的基本组的 GID(组标识号)。
-G : 显示用户所属的所有附加组的 GID(组标识号),多个 GID 之间用逗号分隔。
-n : 显示用户名而不是 UID。
-r : 显示实际的 UID/GID,而不是有效的(可能是映射后的)。
-Z : 显示安全上下文。


显示当前用户的 UID 和 GID:
id

显示特定用户的 UID 和 GID:
id 用户名

显示用户名而不是 UID:
id -n 用户名

显示用户所属的所有附加组的 GID:
id -G 用户名

**useradd:**用于创建新的用户账户

bash 复制代码
sudo useradd [选项] 用户名

常用选项:
-c "用户描述" : 设置用户描述(comment)。
-d 目录 : 设置用户主目录(home directory)。
-g 组名称 : 设置用户所属的用户组。
-G 组名称1,组名称2, ... : 给用户添加多个用户组。
-s /bin/bash : 设置用户的默认 shell,默认为/bin/bash。
-m : 自动创建用户的主目录。
-U : 没有密码的用户 (必须指定密码后再使用该用户)。

创建一个新的用户:
sudo useradd -c "系统管理员" -m 新用户
这将创建名为 "新用户" 的用户,并设置其描述为 "系统管理员", 同时自动创建用户的 /home/新用户 主目录。

设置用户密码:
sudo passwd 新用户
系统会提示您输入新密码。

添加用户到特定组:
sudo useradd -g admin -G wwwdata 用户名
这会将名为 "用户名" 的用户添加至 "admin" 组,并同时添加至 "wwwdata" 组

**userdel:**用于删除用户账户及其相关配置和文件

bash 复制代码
sudo userdel [选项] 用户名
常用选项:
-r : 删除用户的主目录及其内容。
-f : 强制删除用户,即使用户当前登录或拥有进程。
-Z : 删除用户的 SELinux 用户。
-h : 显示帮助信息和选项。

删除用户(保留主目录):
sudo userdel 用户名
这会删除名为 "用户名" 的用户账户,但会保留其主目录及其内容。

删除用户及其主目录:
sudo userdel -r 用户名
这会删除名为 "用户名" 的用户账户,并同时删除其主目录及其内容。

强制删除用户(即使用户当前登录):
sudo userdel -f 用户名
这会强制删除名为 "用户名" 的用户账户,即使该用户当前已登录或有运行中的进程。

**passwd:**用于更改用户的密码

bash 复制代码
passwd [选项] [用户名]
常用选项:
-l : 锁定用户账户,使其无法登录。
-u : 解锁用户账户,允许其登录。
-d : 使用户密码无效(删除密码),但用户仍然可以登录。
-e : 强制用户在下次登录时更改密码。

更改当前用户的密码:
passwd

更改其他用户的密码(需要管理员权限):
sudo passwd 用户名

锁定用户账户:
sudo passwd -l 用户名
这会禁用指定用户账户的登录,用户将无法使用该账户登录系统。

解锁用户账户:
sudo passwd -u 用户名
如果之前使用 -l 锁定了用户账户,这个命令可以解锁账户,使其恢复登录权限。

删除用户密码(用户仍然可以登录但没有密码):
sudo passwd -d 用户名
这将删除指定用户的密码,但仍允许用户使用其他身份验证方法登录系统。

强制用户下次登录时更改密码:
sudo passwd -e 用户名
这会将用户标记为需要强制更改密码。用户在下次登录时将被提示输入新密码。

**chage:**用于更改用户账户的过期信息

bash 复制代码
chage [选项] 用户名
常用选项:
-l : 显示用户的当前密码和账户过期信息。
-M : 设置密码过期后的最大天数。
-m : 设置密码过期前的最小天数。
-E : 设置账户过期的绝对日期,格式为 YYYY-MM-DD。
-I : 设置账户过期后的不活动期限,单位为天数。
-d : 设置账户的上次修改密码的日期,格式为 YYYY-MM-DD。


显示用户的当前密码和账户过期信息:
chage -l 用户名
这将显示用户的密码过期信息和账户过期信息,包括密码过期的最后修改日期和账户过期日期等。

设置密码过期后的最大天数(例如 90 天):
sudo chage -M 90 用户名
这会将指定用户的密码过期后最大允许使用天数设置为 90 天。超过这个天数后,用户将被提示修改密码。

设置密码过期前的最小天数(例如 7 天):
sudo chage -m 7 用户名
这会设置用户需要在密码过期前至少在 7 天内修改密码。这可以防止用户在密码过期当天才修改密码。

设置账户过期的绝对日期(例如 2026-01-01):
sudo chage -E 2026-01-01 用户名
这将设置用户账户的过期日期为 2026 年 1 月 1 日,过期后用户将无法登录系统。

设置账户过期后的不活动期限(例如 30 天):
sudo chage -I 30 用户名
如果用户在这段不活动期限内没有登录系统,账户将被视为过期。

设置账户的上次修改密码的日期(例如 2023-01-01):
sudo chage -d 2023-01-01 用户名
这会设置用户账户的上次修改密码的日期为 2023 年 1 月 1 日,这对于某些安全策略和审计目的可能是有用的。

**groupadd:**用于创建新的用户组

bash 复制代码
groupadd [选项] 组名
常用选项:
-g GID : 指定新用户组的数值标识符(GID)。默认情况下,系统会自动分配下一个可用的 GID。
-r : 创建一个系统用户组。系统用户组的 GID 通常较小且保留给系统服务使用。
-f : 强制创建用户组。如果组名已存在,使用此选项将强制创建。


创建一个名为 developers 的新用户组:
sudo groupadd developers
这会在系统中创建一个名为 developers 的新用户组。默认情况下,groupadd 命令会自动分配一个未使用的 GID 给该组。

创建一个名为 sysadmin 的系统用户组,指定 GID 为 2001:
sudo groupadd -r -g 2001 sysadmin
这会创建一个名为 sysadmin 的系统用户组,其 GID 为 2001。系统用户组通常用于服务账户或需要特殊权限的系统组件。

强制创建一个名为 developers 的用户组,即使它已经存在:
sudo groupadd -f developers
这会强制创建一个名为 developers 的用户组。如果该组名已存在,则会先删除原有组,然后重新创建。

**groupdel:**删除现有的用户组

bash 复制代码
基本用法
groupdel 组名

删除一个名为 developers 的用户组:
sudo groupdel developers
这会从系统中删除名为 developers 的用户组。如果该组还有成员,系统会提示确认是否删除。

**groupmod:**用于修改 用户组的属性

bash 复制代码
groupmod [选项] 组名
常用选项:
-g GID : 修改用户组的数值标识符(GID)。
-n 新组名 : 修改用户组的名称。
-o : 允许使用非唯一的 GID。通常与 -g 选项一起使用,用于允许将 GID 设置为非唯一值。
-R : 为指定的用户组设置 GID 范围。

修改用户组 developers 的 GID 为 1500:
sudo groupmod -g 1500 developers
这会将用户组 developers 的 GID 修改为 1500。GID 是用于系统内部标识用户组的数值。

将用户组 team 的名称修改为 team1:
sudo groupmod -n team1 team
这会将用户组 team 的名称修改为 team1。修改名称可以使用户组更符合当前组织结构或命名约定。

将用户组 developers 的 GID 设置为一个非唯一值(与现有的其他组共享同一 GID):
sudo groupmod -g 1500 -o developers
使用 -o 选项可以允许将 GID 设置为非唯一值,适用于特定需求下需要共享 GID 的情况。



修改用户组的 GID 可能会影响与该组相关联的文件和目录的访问权限。

6. 系统命令

**uname:**用于显示当前操作系统的信息

bash 复制代码
uname [选项]
常用选项:
-a, --all : 显示所有信息。
-s, --kernel-name : 显示内核名称。
-n, --nodename : 显示网络节点主机名。
-r, --kernel-release : 显示内核版本。
-v, --kernel-version : 显示内核版本详细信息。
-m, --machine : 显示系统硬件架构。
-p, --processor : 显示处理器类型。
-i, --hardware-platform : 显示硬件平台。
-o, --operating-system : 显示操作系统类型。


显示操作系统名称:
uname -s
输出可能是 Linux、Darwin(Mac OS X)、FreeBSD 等,取决于当前操作系统。

显示当前系统的内核版本:
uname -r
输出如 5.4.0-77-generic,这是 Linux 内核的版本号。

显示系统硬件架构:
uname -m
输出可能是 x86_64(64 位)、i686(32 位)等,指示当前系统的处理器架构。

显示所有信息:
uname -a
这会显示包括内核名称、版本、处理器类型等所有详细信息。

**hostname:**用于显示或设置当前系统的主机名

bash 复制代码
hostname [选项]
常用选项:
-a, --alias : 显示主机别名。
-d, --domain : 显示 DNS 域名。
-f, --fqdn, --long : 显示完全限定域名 (FQDN)。
-i, --ip-address : 显示主机的 IP 地址。
-s, --short : 显示短主机名(不包含域名部分)。


显示当前主机名:
hostname
这会简单地输出当前系统的主机名。

显示完全限定域名 (FQDN):
hostname -f
如果主机名是 myhost,而域名是 example.com,则输出可能是 myhost.example.com。

显示主机的 IP 地址:
hostname -i
这会显示主机当前使用的 IP 地址。

显示主机的短名称:
hostname -s
如果主机名是 myhost.example.com,则输出是 myhost。

**hostnamectl:**用来查看和修改主机名

bash 复制代码
hostnamectl [选项] [命令]
常用选项:
status : 显示当前主机名和相关状态信息。
set-hostname NAME : 设置主机名为指定的 NAME。


显示当前主机名和状态信息:
hostnamectl status
这会显示当前主机名、静态主机名、图标名、架构、操作系统、内核版本、虚拟化类型等信息。

设置主机名:
sudo hostnamectl set-hostname newhostname
这会将主机名设置为 newhostname。注意,这个操作需要管理员权限。

设置静态主机名:
静态主机名是永久性的主机名,会存储在 /etc/hostname 文件中。使用以下命令设置静态主机名:
sudo hostnamectl set-hostname --static newhostname
这会设置静态主机名为 newhostname,并更新 /etc/hostname 文件。

显示所有可用信息:
hostnamectl
这会显示所有可用的主机信息,包括静态主机名、图标名、内核版本、架构、虚拟化类型等。


使用 hostnamectl 命令可以比较方便地管理主机名,特别是在使用 systemd 管理的 Linux 系统上。
修改主机名可能需要重启服务或重新登录才能生效,具体取决于系统配置。
相关推荐
小白跃升坊20 分钟前
基于1Panel的AI运维
linux·运维·人工智能·ai大模型·教学·ai agent
跃渊Yuey39 分钟前
【Linux】线程同步与互斥
linux·笔记
舰长11542 分钟前
linux 实现文件共享的实现方式比较
linux·服务器·网络
zmjjdank1ng1 小时前
Linux 输出重定向
linux·运维
路由侠内网穿透.1 小时前
本地部署智能家居集成解决方案 ESPHome 并实现外部访问( Linux 版本)
linux·运维·服务器·网络协议·智能家居
VekiSon1 小时前
Linux内核驱动——基础概念与开发环境搭建
linux·运维·服务器·c语言·arm开发
zl_dfq2 小时前
Linux 之 【进程信号】(signal、kill、raise、abort、alarm、Core Dump核心转储机制)
linux
Ankie Wan2 小时前
cgroup(Control Group)是 Linux 内核提供的一种机制,用来“控制、限制、隔离、统计”进程对系统资源的使用。
linux·容器·cgroup·lxc
skywalk81632 小时前
尝试在openi启智社区的dcu环境安装ollama最新版0.15.2(失败)
linux·运维·服务器·ollama
zhengfei6113 小时前
AutoPentestX – Linux 自动化渗透测试和漏洞报告工具
linux·运维·自动化