Shell命令格式
命令提示符:
- 通常显示为
用户名@主机名:目录名 $
或用户名@主机名:目录名 #
(对于root用户)。 ~
表示当前用户的家目录。
命令格式:
bash
$ 命令 [-选项] [参数1] [参数2] ... |
$
或#
是命令提示符,$
代表普通用户,#
代表root用户。[-选项]
是可选的,用于修改命令的行为。[参数]
是命令操作的对象或数据。
多行命令处理:
- 使用
;
分隔可以在一行中执行多个命令。 - 使用
\
可以将一条命令分成多行书写,以提高可读性。但请注意,\
后面不能有空格,且\
仅用于命令行的末尾,以表示该命令将在下一行继续。
Linux命令:
用户系统相关
(1)su:切换用户
- 语法:
su [选项] [用户名]
- 常见参数:
-
:以登录shell启动新的shell(加载用户的shell环境)。-c 命令
:以指定用户的身份执行单个命令。
- 示例:
- 切换到root用户:
su -
- 以user1身份执行
ls
命令:su - user1 -c 'ls'
- 切换到root用户:
exit:退出切换(切换用户组成栈的结构)
(2)添加用户
- 使用
useradd
命令。 - 语法:
useradd [选项] 用户名
- 示例:
useradd -m -s /bin/bash newuser
(-m
创建家目录,-s
指定shell)
(3)删除用户
- 使用
userdel
命令。 - 语法:
userdel [选项] 用户名
- 示例:
userdel -r username
(-r
同时删除用户的家目录) -
删除账号的家目录和邮箱:
(4)查询用户
- 使用
id
、whoami
、who
、w
、users
、finger
(可能需要安装)等命令。 id 用户名
:显示用户的UID、GID等信息。whoami
:显示当前用户名称。who
、w
、users
:显示当前登录的用户信息。finger 用户名
:显示用户的详细信息(如果系统支持)。
查看Linux系统上的所有用户:
-
查看
/etc/passwd
文件这个文件包含了系统上每个用户的基本信息。你可以使用
cat
、less
、more
或grep
等命令来查看这个文件的内容。cat /etc/passwd
或者,如果你只想查看用户名列表,可以结合使用
awk
命令:awk -F: '{ print $1}' /etc/passwd
这里,
-F:
选项指定了字段分隔符为冒号(:
),$1
表示打印每行的第一个字段,即用户名。 -
使用
getent
命令getent
命令用于从各种源获取条目,包括/etc/passwd
文件。要列出所有用户,可以使用:getent passwd
更改密码:
修改用户属性:
usermod (modify a user account)
用途: usermod
命令用于修改用户账户的各种属性。
语法: usermod [选项] 用户名
选项:
-l
或--login 新用户名
: 更改用户的登录名。-d
或--home 新家目录
: 更改用户的家目录。-m
或--move-home
: 移动用户的家目录内容到新家目录。-u
或--uid 新UID
: 更改用户的UID。-g
或--gid 新GID
: 更改用户的主组ID。-G
或--groups 组名列表
: 更改用户的附加组列表。-s
或--shell 新shell
: 更改用户的登录shell。-c
或--comment 新注释
: 更改用户的注释信息。-e
或--expiredate YYYY-MM-DD
: 设置用户的账户过期日期。-f
或--inactive 天数
: 设置用户账户过期后多少天内可以继续登录。-L
或--lock
: 锁定用户的密码。-U
或--unlock
: 解锁用户的密码。-aG
或--append 组名列表
: 添加用户到额外的组。-Z
或--selinux-user SELinux用户
: 更改用户的SELinux用户映射。-V
或--version
: 显示版本信息。-h
或--help
: 显示帮助信息。
示例:
-
更改用户的登录名:
1usermod -l new_username old_username
-
更改用户的家目录:
1usermod -d /new/home/directory username
-
更改用户的家目录,并移动家目录内容:
1usermod -md /new/home/directory username
-
更改用户的UID:
1usermod -u 1001 username
-
更改用户的主组ID:
1usermod -g new_group_id username
-
更改用户的附加组:
1usermod -G group1,group2 username
-
添加用户到额外的组:
1usermod -aG group1,group2 username
-
更改用户的登录shell:
1usermod -s /bin/zsh username
-
更改用户的注释信息:
1usermod -c "New comment" username
-
设置用户的账户过期日期:
1usermod -e 2024-12-31 username
-
设置用户账户过期后多少天内可以继续登录:
1usermod -f 30 username
-
锁定用户的密码:
1usermod -L username
-
解锁用户的密码:
1usermod -U username
用户系统配置文件
passwd
- 用途:
/etc/passwd
文件存储了系统中所有用户的账号信息。- 格式: 每行代表一个用户,每一列由冒号分隔。
- 列说明:
- 用户名 (
username
): 用户名。- 密码占位符 (
x
): 密码已被加密并移至/etc/shadow
文件。- 用户ID (
uid
): 用户标识号。- 组ID (
gid
): 主用户组标识号。- 用户信息 (
comment
): 用户的描述信息。- 家目录 (
home_dir
): 用户的家目录路径。- 登录shell (
shell
): 用户登录时默认使用的shell。- 示例行:
1root:x:0:0:root:/root:/bin/bash 2alice:x:1000:1000:Alice User:/home/alice:/bin/bash
shadow
- 用途:
/etc/shadow
文件存储了系统中所有用户的加密密码以及其他密码相关的信息。- 格式: 每行代表一个用户,每一列由冒号分隔。
- 列说明:
- 用户名 (
username
): 用户名。- 加密密码 (
password
): 密码的加密形式。- 上次更改时间 (
last_change
): 密码上一次更改的时间(以天为单位)。- 最小更改周期 (
min
): 密码更改后的最短使用期限。- 最大更改周期 (
max
): 密码的有效期。- 警告周期 (
warn
): 密码到期前的警告天数。- 不活动周期 (
inactive
): 用户账户不活动的天数。- 过期周期 (
expire
): 账户过期后的天数。- 标志 (
flag
): 特殊标志。- 示例行:
1root:$6$hash:18759:0:99999:7::: 2alice:$6$hash:18759:0:99999:7:::
group
- 用途:
/etc/group
文件存储了系统中所有组的信息。- 格式: 每行代表一个组,每一列由冒号分隔。
- 列说明:
- 组名 (
groupname
): 组名。- 密码占位符 (
x
): 组密码已被加密并通常不需要。- 组ID (
gid
): 组标识号。- 成员 (
members
): 组的成员列表,用逗号分隔。- 示例行:
1wheel:x:10:root,alice 2users:x:1000:alice,bob
login.defs
- 用途:
/etc/login.defs
文件定义了登录和密码管理的策略。- 内容:
- 密码策略:
PASS_MAX_DAYS
: 密码的最大有效期。PASS_MIN_DAYS
: 密码更改后的最短使用期限。PASS_WARN_AGE
: 密码到期前的警告天数。- 用户策略:
LOGIN_RETRIES
: 登录失败的尝试次数。LOGIN_TIMEOUT
: 登录超时时间。UMASK_DEFAULT
: 默认的 umask 值。UID_MIN
和UID_MAX
: 用户ID的最小和最大值。GID_MIN
和GID_MAX
: 组ID的最小和最大值。- 示例配置:
1PASS_MAX_DAYS 99999 2PASS_MIN_DAYS 0 3PASS_WARN_AGE 7 4LOGIN_RETRIES 3 5LOGIN_TIMEOUT 60 6UMASK_DEFAULT 022 7UID_MIN 1000 8UID_MAX 60000 9GID_MIN 1000 10GID_MAX 60000
pwconv
- 用途:
pwconv
命令用于将/etc/passwd
文件中的密码转换为加密形式,并将其移动到/etc/shadow
文件中。- 语法:
pwconv [选项]
- 选项:
-f
或--force
: 强制转换,即使/etc/shadow
文件不存在。-V
或--version
: 显示版本信息。-h
或--help
: 显示帮助信息。- 示例:
- 转换密码:
1pwconv
用户组管理命令
-
groupadd
- 用途:
groupadd
命令用于创建新的用户组。 - 语法:
groupadd [选项] 组名
- 选项:
-g
或--gid GID
: 指定新组的GID。-r
或--system
: 创建系统组。-f
或--force
: 强制创建,即使GID已经存在。-h
或--help
: 显示帮助信息。-V
或--version
: 显示版本信息。
- 示例:
- 创建名为
developers
的新组:1groupadd developers
- 创建名为
developers
的新组,并指定GID为 2000:1groupadd -g 2000 developers
- 创建名为
- 用途:
-
groupdel
- 用途:
groupdel
命令用于删除用户组。 - 语法:
groupdel [选项] 组名
- 选项:
-h
或--help
: 显示帮助信息。-V
或--version
: 显示版本信息。
- 示例:
- 删除名为
developers
的组:1groupdel developers
- 删除名为
- 用途:
-
gpasswd
- 用途:
gpasswd
命令用于管理用户组成员。 - 语法:
gpasswd [选项] 组名
- 选项:
-a
或--add 用户名
: 添加用户到组。-d
或--delete 用户名
: 从组中删除用户。-A
或--admin 用户名列表
: 设置组管理员。-M
或--members 用户名列表
: 设置组成员。-h
或--help
: 显示帮助信息。-V
或--version
: 显示版本信息。
- 示例:
- 将用户
alice
添加到developers
组:1gpasswd -a alice developers
- 从
developers
组中删除用户alice
:1gpasswd -d alice developers
- 设置
developers
组的管理员为bob
:1gpasswd -A bob developers
- 设置
developers
组的成员为alice
和bob
:1gpasswd -M alice,bob developers
- 将用户
- 用途:
-
groups
- 用途:
groups
命令用于显示用户的组成员身份。 - 语法:
groups [选项] [用户名]
- 选项:
-h
或--help
: 显示帮助信息。-V
或--version
: 显示版本信息。
- 示例:
- 显示当前用户的组成员身份:
1groups
- 显示用户
alice
的组成员身份:1groups alice
- 显示当前用户的组成员身份:
- 用途:
文件系统相关的:
认识文件系统
/
:Linux文件系统的根目录,所有目录和文件的起点。/bin
:存放系统中最常用的可执行文件(二进制),如ls
、cp
等。/boot
:存放Linux内核和系统启动文件,包括启动加载器如Grub、lilo。/dev
:存放所有设备文件,代表系统中的硬件设备和接口。/etc
:存放系统的所有配置文件,如/etc/passwd
存储用户账户信息,/etc/hostname
存储主机名等。/home
:用户主目录的默认位置,每个用户都有自己的目录。/initrd
:存放启动时挂载的initrd.img映像文件及所需设备模块。/lib
:存放共享库文件,这些库文件被系统程序所使用。/lost+found
:用于存放fsck命令在检查文件系统时发现的零散文件。/media
:Ubuntu系统自动挂载外部设备(如CD-ROM、USB等)后,存放临时读入的文件。/mnt
:通常用于手动挂载文件系统的挂载点。/opt
:可选的应用软件和程序的存放目录,主要供第三方开发者使用。/proc
:一个虚拟文件系统,包含系统运行时的信息,如/proc/cpuinfo
存储CPU信息。/root
:根用户(超级用户)的主目录。/sbin
:存放系统管理员使用的可执行文件,如reboot
、shutdown
等。/tmp
:存放用户和程序的临时文件,所有用户都有读写权限。/usr
:用于存放系统用户直接相关的文件和目录,如应用程序和库文件。/var
:存放长度可变的文件,如日志文件、邮件队列等。
文件类型:
-
普通文件 (Regular File)
- 表示:
-
- 用途: 用于存储数据,如文本文件、配置文件、可执行文件等。
- 表示:
-
目录 (Directory)
- 表示:
d
- 用途: 用于组织文件和其他目录。
- 表示:
-
符号链接 (Symbolic Link)
- 表示:
l
- 用途: 指向另一个文件或目录的引用,类似于 Windows 中的快捷方式。
- 表示:
-
硬链接 (Hard Link)
- 表示:
-
(与普通文件相同,但通过ls -i
查看inode可以识别) - 用途: 指向同一文件的不同名称,多个硬链接指向同一个inode。
- 表示:
-
块设备文件 (Block Device)
- 表示:
b
- 用途: 用于直接访问硬件设备,如硬盘驱动器。
- 表示:
-
字符设备文件 (Character Device)
- 表示:
c
- 用途: 用于访问不需要缓冲的设备,如终端。
- 表示:
-
套接字文件 (Socket)
- 表示:
s
- 用途: 用于进程间通信 (IPC)。
- 表示:
-
管道文件 (FIFO)
- 表示:
p
- 用途: 用于进程间的无名管道通信。
- 表示:
文件和目录操作
-
创建
mkdir [选项] 目录
: 创建目录。- 示例:
mkdir -p /path/to/new/directory
-p
: 如果父目录不存在也一并创建。
- 示例:
touch [文件]
: 创建空文件或更新文件的时间戳。- 示例:
touch newfile.txt
- 示例:
mkfifo [文件]
: 创建一个命名管道。- 示例:
mkfifo mypipe
- 示例:
-
删除
rm [选项] 文件
: 删除文件。- 示例:
rm file.txt
-i
: 交互模式,逐一确认删除。-f
: 强制删除,忽略不存在的文件,不提示。-r
或-R
: 递归删除目录及其内容。- 示例:
rm -rf directory
- 示例:
- 示例:
rmdir [选项] 目录
: 删除空目录。- 示例:
rmdir emptydir
-p
: 递归删除目录。
- 示例:
-
复制
cp [选项] 源 目标
: 复制文件或目录。- 示例:
cp file1.txt file2.txt
-r
或-R
: 递归复制目录。- 示例:
cp -r source_directory target_directory
- 示例:
-i
: 交互模式,在覆盖前询问用户。- 示例:
cp -i file1.txt file2.txt
- 示例:
-p
: 保留文件的权限、时间戳等元数据。- 示例:
cp -p file1.txt file2.txt
- 示例:
- 示例:
-
移动/重命名
mv [选项] 源 目标
: 移动文件或目录,也可以用于重命名。- 示例:
mv oldfile.txt newfile.txt
-i
: 交互模式,在覆盖前询问用户。- 示例:
mv -i file1.txt file2.txt
- 示例:
- 示例:
-
查看
-
文件内容:
cat [文件]
: 显示文件内容。- 示例:
cat file.txt
- 示例:
head [选项] [文件]
: 显示文件的前几行。- 示例:
head -n 5 file.txt
-n N
: 显示前N行。
- 示例:
tail [选项] [文件]
: 显示文件的最后几行。- 示例:
tail -n 5 file.txt
-n N
: 显示最后N行。
- 示例:
less [文件]
: 分页查看文件内容。- 示例:
less largefile.txt
- 示例:
more [文件]
: 传统分页查看文件内容。- 示例:
more largefile.txt
- 示例:
-
目录内容:
ls [选项] [目录]
: 列出目录内容。- 示例:
ls -al /path/to/directory
-a
: 显示隐藏文件。-l
: 长格式列出。-h
: 人性化输出文件大小。-t
: 按修改时间排序。-r
: 反向排序。
- 示例:
ll
: 等同于ls -l
.- 示例:
ll
- 示例:
ls -d [目录]
: 列出目录本身的信息而非其内容。- 示例:
ls -d /path/to/directory
- 示例:
-
切换工作目录:
cd [路径]
: 切换当前工作目录。- 示例:
cd /path/to/directory
~
: 用户家目录。- 示例:
cd ~
- 示例:
-
: 上一个工作目录。- 示例:
cd -
- 示例:
..
: 上一级目录。- 示例:
cd ..
- 示例:
- 示例:
-
-
给文件添加内容
echo "文本" >> 文件
: 追加文本到文件末尾。- 示例:
echo "Hello, world!" >> file.txt
- 示例:
cat > 文件
: 创建新文件或清空已有文件,并从标准输入读取内容。- 示例:
1cat > newfile.txt 2Hello, this is a new file. 3^D
- 示例:
-
改变文件权限
chmod [选项] [模式|数字] 文件
: 改变文件权限。- 示例:
chmod u+x file.txt
u
: 用户权限。g
: 组权限。o
: 其他用户权限。a
: 所有用户。+/-/:
增加/减少/设置权限。rwx
: 读写执行权限。- 数字: 用八进制数字表示权限。
- 示例:
chmod 755 file.txt
- 示例:
- 示例:
-
链接文件
ln [选项] 源 目标
: 创建硬链接。- 示例:
ln file.txt link_file.txt
-s
: 创建符号链接(软链接)。- 示例:
ln -s file.txt soft_link_file.txt
- 示例:
- 示例:
-
压缩与解压
gzip [选项] 文件
: 使用 gzip 算法压缩文件。- 示例:
gzip file.txt
- 示例:
bzip2 [选项] 文件
: 使用 bzip2 算法压缩文件。- 示例:
bzip2 file.txt
- 示例:
zip [选项] 归档文件 文件
: 使用 zip 算法压缩文件。- 示例:
zip archive.zip file.txt
- 示例:
-
归档与释放
tar [选项]
: 打包或解包文件。- 示例:
tar czvf archive.tar.gz file1.txt file2.txt
c
: 创建一个新的归档文件。r
: 向已存在的归档文件中添加文件。- 示例:
tar rvf archive.tar file3.txt
- 示例:
x
: 解包文件。- 示例:
tar xvf archive.tar
- 示例:
f
: 指定归档文件的名称。v
: 显示处理过程中的详细信息。z
: 使用 gzip 对归档文件进行压缩或解压缩。- 示例:
tar cvzf archive.tar.gz file.txt
- 示例:
- 示例:
-
比较文件的不同
diff [选项] 文件1 文件2
: 显示两个文件之间的差异。- 示例:
diff file1.txt file2.txt
-r
: 递归比较目录中的文件。- 示例:
diff -r dir1 dir2
- 示例:
- 示例:
-
查看文件属性信息
file [文件]
: 显示文件的类型和可能的编码。- 示例:
file file.txt
- 示例:
-
查看文件的统计信息
wc [选项] [文件]
: 显示文件的行数、单词数和字符数。- 示例:
wc file.txt
-l
: 只显示行数。- 示例:
wc -l file.txt
- 示例:
-w
: 只显示单词数。- 示例:
wc -w file.txt
- 示例:
-m
或-c
: 只显示字符数。- 示例:
wc -m file.txt
- 示例:
- 示例:
-
在文件中查找字符串
grep [选项] "模式" 文件
: 在文件中搜索匹配模式的行。- 示例:
grep "hello" file.txt
-r
: 递归搜索目录中的文件。- 示例:
grep -r "hello" /path/to/directory
- 示例:
- 示例:
-
文件查找命令
-
locate
- 用途:
locate
命令通过查询预先构建的数据库来快速查找文件系统中的文件。 - 原理:
locate
命令通过查询一个预先构建的数据库来快速查找文件系统中的文件。这个数据库通常通过定期运行updatedb
命令来更新。 - 特点: 查找速度快,但无法查找到最近添加且尚未更新到数据库中的文件。
- 用法:
locate [选项] 文件名
- 选项:
-i
: 忽略大小写。-r
: 使用正则表达式。-b
: 使用基本正则表达式。-d
数据库: 指定数据库文件。
- 示例:
- 查找名为
example.txt
的文件:1locate example.txt
- 查找包含
example
的文件,忽略大小写:1locate -i example
- 查找名为
- 用途:
-
which
- 用途:
which
命令用于查找并显示给定命令的绝对路径,确保你调用的是正确的程序。 - 用法:
which [选项] 命令名
- 选项:
-a
: 显示所有匹配项,即使它们位于不同的目录中。-m
: 显示匹配项的数量。
- 示例:
- 查找
ls
命令的绝对路径:1which ls
- 查找
- 用途:
-
tree
- 用途:
tree
命令以树状图列出目录的内容,包括子目录和文件。 - 用法:
tree [选项] 目录名
- 选项:
-L
限制目录显示深度。-a
显示所有文件和目录(包括以.
开头的隐藏文件)。-d
只列出目录。-h
人性化输出文件大小。-H
使用符号链接的目标作为基点。-n
不自动排序。-p
显示文件权限。-u
显示最后一次访问时间。-t
显示最后一次修改时间。-f
显示完整路径。
- 示例:
- 以树状图形式列出当前目录的内容:
1tree .
- 限制目录显示深度为 2:
1tree -L 2 .
- 显示所有文件和目录(包括隐藏文件):
1tree -a .
- 以树状图形式列出当前目录的内容:
- 用途:
-
find
- 用途:
find
命令在目录树中搜索文件,并执行指定的操作。它非常灵活,可以基于文件名、类型、大小、权限等多种条件进行搜索。 - 基本语法:
find [起始目录] [查找条件] [操作]
- 查找条件:
-name
: 根据文件名查找。- 示例:
find /path/to/start -name "*.txt"
- 示例:
-type
: 根据文件类型查找(f
代表普通文件,l
代表符号链接)。- 示例:
find /path/to/start -type f
- 示例:
-user
、-group
、-uid
、-gid
: 根据文件的所有者或组来查找。- 示例:
find /path/to/start -user alice
- 示例:
-size
: 根据文件大小查找。单位可以是c
(字节)、k
(千字节)、M
(兆字节)等。- 示例:
find /path/to/start -size +10M
- 示例:
-empty
: 查找空文件或空目录。- 示例:
find /path/to/start -empty
- 示例:
-perm
: 根据文件权限查找。- 示例:
find /path/to/start -perm 755
- 示例:
-newer
: 查找比参考文件更新的文件。- 示例:
find /path/to/start -newer /path/to/reference/file
- 示例:
- 组合条件:
-a
: 逻辑与(AND),默认条件之间就是逻辑与关系。-o
: 逻辑或(OR)。!
: 逻辑非(NOT)。
- 示例:
- 查找所有
.txt
文件:1find /path/to/start -name "*.txt"
- 查找大于 1MB 的
.txt
文件:1find /path/to/start -name "*.txt" -size +1M
- 查找由
alice
拥有的.txt
文件:1find /path/to/start -name "*.txt" -user alice
- 查找所有
.txt
文件或.log
文件:1find /path/to/start \( -name "*.txt" -o -name "*.log" \)
- 查找不属于
alice
的.txt
文件:1find /path/to/start -name "*.txt" ! -user alice
- 查找所有
- 用途:
-
特别说明:
chown (change owner)修改文件或目录的所有者和所属组
用途: 更改文件或目录的所有者和所属组。
语法: chown [选项] [所有者][.[所属组]] 文件或目录
选项:
-R
或--recursive
: 递归地更改目录及其子目录内的文件所有权。-h
或--no-dereference
: 只更改符号链接的所有权,而不是链接指向的实际文件。-v
或--verbose
: 显示更改所有权的每个文件或目录。-f
或--silent
: 抑制错误信息的输出。-c
或--changes
: 仅报告更改了所有权的文件。-L
或--dereference-command-line-symbolic-links-to-directories
: 当命令行参数中包含符号链接时,递归地更改它们所指向的目录的所有权。-X
或--preserve-root
: 如果当前用户不是超级用户,则禁止将根目录的所有权更改为其他用户。--reference=FILE
: 将文件或目录的所有权设置为参考文件的所有权。
示例:
-
更改单个文件的所有者为
user1
:1chown user1 file.txt
-
更改单个文件的所有者为
user1
并所属组为group1
:1chown user1.group1 file.txt
-
递归地更改目录及其所有子目录和文件的所有者为
user1
:1chown -R user1 directory/
-
递归地更改目录及其所有子目录和文件的所有者为
user1
并所属组为group1
:1chown -R user1.group1 directory/
-
显示递归更改所有权的过程:
1chown -Rv user1 group1 directory/
-
更改符号链接的所有权:
1chown -h user1 symlink.txt
chgrp (change group)修改文件或目录的所属组
用途: 更改文件或目录的所属组。
语法: chgrp [选项] 组 文件或目录
选项:
-R
或--recursive
: 递归地更改目录及其子目录内的文件所属组。-h
或--no-dereference
: 只更改符号链接的所属组,而不是链接指向的实际文件。-v
或--verbose
: 显示更改所属组的每个文件或目录。-f
或--silent
: 抑制错误信息的输出。-c
或--changes
: 仅报告更改了所属组的文件。-L
或--dereference-command-line-symbolic-links-to-directories
: 当命令行参数中包含符号链接时,递归地更改它们所指向的目录的所属组。-X
或--preserve-root
: 如果当前用户不是超级用户,则禁止将根目录的所属组更改为其他组。
示例:
-
更改单个文件的所属组为
group1
:1chgrp group1 file.txt
-
递归地更改目录及其所有子目录和文件的所属组为
group1
:1chgrp -R group1 directory/
-
显示递归更改所属组的过程:
1chgrp -Rv group1 directory/
-
更改符号链接的所属组:
1chgrp -h group1 symlink.txt
进程管理命令
-
top
top
: 显示系统当前运行的所有进程的状态,并实时更新。-b
: 批处理模式,适合脚本调用。-d seconds
: 设置更新间隔秒数。-n count
: 更新次数,通常用于批处理模式。-p pid
: 显示指定PID的进程。-q
: 快速模式,更新频率更快,不等待数据完全更新。-S
: 累计模式,显示累计CPU时间。-s
: 安全模式,禁用键盘输入。-c
: 显示完整的命令行。-C
: 不将子进程的CPU时间累加到父进程中。-P
: 显示每个线程的信息。-o field[,field...]
: 指定排序字段,多个字段用逗号分隔。-O field[,field...]
: 类似于-o
,但只对当前窗口有效。-s
: 设置安全模式,禁用键盘输入。-m bytes
: 设置最大显示内存大小。-p pid
: 显示特定PID的进程。-u username
: 显示特定用户的进程。
- 示例:
1top -b -n 1 | head -n 17 # 批处理模式下获取一次系统状态,并仅输出前17行 2top -d 5 # 更新间隔为5秒 3top -p 1234 # 仅显示PID为1234的进程 4top -c # 显示完整的命令行 5top -S # 累计模式
-
ps
ps [选项]
: 显示当前系统的进程快照。-A
: 显示所有进程。-a
: 显示终端中运行的所有进程。-u
: 显示更详细的用户信息。-x
: 显示没有控制终端的进程。-e
: 显示所有进程。-f
: 显示完整信息。-h
: 人性化输出。-j
: 作业控制格式。-w
: 宽输出。-o format
: 自定义输出格式。-C command
: 显示指定命令的进程。-p pid
: 显示指定PID的进程。
- 示例:
1ps aux # 显示所有进程 2ps -ef | grep ssh # 查找包含ssh关键字的进程 3ps -o pid,ppid,command -C nginx # 显示nginx进程的PID、PPID和命令 4ps -p 1234 -o %cpu,%mem # 显示PID为1234的进程的CPU和内存使用率
-
pstree
pstree [选项]
: 以树形结构显示进程。-p
: 显示PID。-u
: 显示用户。-s
: 显示会话ID。-l
: 显示长格式命令行。-a
: 显示所有进程。-h
: 显示帮助信息。-n
: 不解析命令名。-c
: 显示命令名。-p pid
: 从指定PID开始显示。
- 示例:
1pstree # 显示当前用户的进程树 2pstree -p # 显示PID 3pstree -a # 显示所有进程 4pstree -p 1234 # 从PID为1234的进程开始显示
-
kill
kill [选项] PID
: 发送信号给指定PID的进程。-signal
: 发送特定信号。-l
: 列出所有可用信号。-0
: 检查进程是否存在。-CONT
: 继续暂停的进程。-STOP
: 暂停进程。-TERM
: 终止进程。-KILL
: 强制终止进程。-HUP
: 重启进程。-INT
: 中断进程。-QUIT
: 退出进程。
- 示例:
1kill -9 1234 # 强制终止PID为1234的进程 2killall -9 ssh # 终止所有名为ssh的进程 3kill -l # 列出所有信号 4kill -0 1234 # 检查PID为1234的进程是否存在 5kill -SIGTERM 1234 # 使用SIGTERM信号终止PID为1234的进程 6kill -SIGCONT 1234 # 继续PID为1234的暂停进程
磁盘相关命令:
-
fdisk
- 用途:
fdisk
是一个用于创建、显示、修改和删除分区表的命令。 - 语法:
fdisk [选项] 设备
- 选项:
-l
或--list
: 显示所有磁盘的分区表。-c
或--convert
: 显示分区的单位转换。-u
或--units
: 设置分区单位。-b
或--sectorsize
: 设置扇区大小。-v
或--version
: 显示版本信息。-u
或--units
: 设置使用的单位(如 sectors, cylinders)。-b
或--sectorsize
: 设置每个扇区的大小。-l
或--list
: 列出分区表。
- 命令:
p
: 显示当前分区表。n
: 新建分区。d
: 删除分区。m
: 移动分区。t
: 改变分区类型。w
: 写入分区表并退出。q
: 退出而不保存更改。
- 示例:
- 列出所有磁盘的分区表:
1fdisk -l
- 创建新的分区表:
接下来,按照提示进行操作:1sudo fdisk /dev/sda
- 输入
n
创建新分区。 - 输入
p
创建主分区。 - 输入起始扇区(默认为第一扇区)。
- 输入结束扇区(或按回车键接受默认值)。
- 输入
w
保存分区表并退出。
- 输入
- 列出所有磁盘的分区表:
- 用途:
-
mount
- 用途:
mount
用于挂载文件系统。 - 语法:
mount [选项] 设备 挂载点
- 选项:
-t
或--types
: 指定文件系统类型。-o
或--options
: 指定挂载选项。-a
或--all
: 挂载/etc/fstab文件中的所有条目。-r
或--read-only
: 以只读方式挂载。-w
或--rw
: 以读写方式挂载。-n
或--no-mtab
: 不更新/proc/mounts文件。-f
或--fake
: 创建一个虚拟挂载点。-u
或--update
: 更新已存在的挂载点。-l
或--list
: 列出所有已挂载的文件系统。-v
或--verbose
: 显示详细信息。
- 示例:
- 挂载一个分区:
1sudo mount /dev/sda1 /mnt/newdrive
- 以只读方式挂载一个分区:
1sudo mount -o ro /dev/sda1 /mnt/newdrive
- 挂载一个ext4类型的分区:
1sudo mount -t ext4 /dev/sda1 /mnt/newdrive
- 挂载所有分区(根据/etc/fstab文件):
1sudo mount -a
- 列出所有已挂载的文件系统:
1mount
- 挂载一个分区:
- 用途:
-
umount
- 用途:
umount
用于卸载已挂载的文件系统。 - 语法:
umount [选项] 挂载点 | 设备
- 选项:
-l
或--lazy
: 允许卸载正在被使用的文件系统。-f
或--force
: 强制卸载。-n
或--no-mtab
: 不更新/proc/mounts文件。-v
或--verbose
: 显示详细信息。
- 示例:
- 卸载一个分区:
1sudo umount /mnt/newdrive
- 强制卸载一个分区:
1sudo umount -f /mnt/newdrive
- 卸载一个分区:
- 用途:
-
df
- 用途:
df
用于显示磁盘空间使用情况。 - 语法:
df [选项]
- 选项:
-h
或--human-readable
: 以易于阅读的方式显示文件大小(KB, MB, GB)。-H
或--si
: 类似于-h
选项,但是使用 1000 字节的倍数。-T
或--print-type
: 显示文件系统的类型。-t
或--type=TYPE
: 只显示指定类型的文件系统。-x
或--exclude-type=TYPE
: 排除指定类型的文件系统。-P
或--portability
: 兼容旧版本 df 的输出格式。-a
或--all
: 包括临时文件系统。
- 示例:
- 显示磁盘使用情况:
1df -h
- 显示所有文件系统的使用情况:
1df -a
- 显示磁盘使用情况:
- 用途:
-
du
- 用途:
du
用于估计每个文件或目录占用的磁盘空间。 - 语法:
du [选项] 文件或目录
- 选项:
-a
或--all
: 显示所有文件的磁盘使用情况。-h
或--human-readable
: 以易于阅读的方式显示文件大小(KB, MB, GB)。-H
或--si
: 类似于-h
选项,但是使用 1000 字节的倍数。-s
或--summarize
: 显示总计。-S
或--separate-dirs
: 显示每个目录的总大小。-x
或--one-file-system
: 跳过其它文件系统。-L
或--follow
: 跟随符号链接。-k
或--kilobytes
: 以 KB 为单位显示大小。-m
或--megabytes
: 以 MB 为单位显示大小。
- 示例:
- 显示当前目录及其子目录的磁盘使用情况:
1du -sh .
- 显示所有文件的磁盘使用情况:
1du -ah
- 显示当前目录及其子目录的总大小:
1du -sch .
- 显示当前目录及其子目录的磁盘使用情况:
- 用途:
其他相关命令:
echo (echo text to standard output)
用途: echo
命令用于将文本输出到标准输出。
语法: echo [选项] [文本]
选项:
-n
: 不打印末尾的新行。-e
: 解释转义字符(如\n
,\t
)。-E
: 不解释转义字符。--help
: 显示帮助信息。--version
: 显示版本信息。
示例:
-
输出一行文本,不带换行符:
1echo -n "Hello, world!"
-
输出带有换行符的文本:
1echo "Hello,\nworld!"
shutdown (halt or reboot the system)
用途: shutdown
命令用于关闭或重启系统。
语法: shutdown [选项] [时间] [消息]
选项:
-h
: 关机。-r
: 重启。-k
: 发送警告信息,但不执行关机或重启。-c
: 取消已计划的关机或重启。-P
: 在关机时关闭电源。-t seconds
: 设置延迟秒数。--help
: 显示帮助信息。--version
: 显示版本信息。
示例:
-
在5分钟后关机:
1shutdown -h +5
-
立即重启:
1shutdown -r now
history (list or save the commands you have used)
用途: history
命令用于列出或保存您使用过的命令历史记录。
语法: history [选项]
选项:
-c
: 清除历史记录。-d pos
: 删除指定位置的历史记录项。-w
: 将历史记录写入文件。-a
: 将新命令添加到历史记录文件。-r
: 从文件中读取历史记录。-n
: 显示历史记录的编号。-p
: 将历史记录项加入到命令行。-s
: 将命令添加到历史记录,但不执行。--help
: 显示帮助信息。--version
: 显示版本信息。
示例:
-
列出历史记录:
1history
-
清除历史记录:
1history -c
date (display or set the system date and time)
用途: date
命令用于显示或设置系统日期和时间。
语法: date [选项] [时间格式]
选项:
-u
: 使用协调世界时(UTC)。-s
: 设置日期和时间。--set
: 设置日期和时间。--help
: 显示帮助信息。--version
: 显示版本信息。
示例:
-
显示当前日期和时间:
1date
-
设置日期和时间:
1date -s "2023-09-01 12:00:00"
sleep (suspend execution for a given number of seconds)
用途: sleep
命令用于使进程暂停执行一定的时间。
语法: sleep [选项] 秒数
选项:
--help
: 显示帮助信息。--version
: 显示版本信息。
示例:
- 暂停执行5秒:
1sleep 5
env (run a command with an environment)
用途: env
命令用于运行一个命令,并可以指定命令的环境变量。
语法: env [选项] [变量=值]... [命令] [参数]
选项:
-i
: 忽略所有环境变量。--help
: 显示帮助信息。--version
: 显示版本信息。
示例:
-
显示所有环境变量:
1env
-
运行命令并设置环境变量:
1env NEW_VAR=value command arg
环境变量管理
用途: 环境变量是在操作系统中定义的变量,它们可以被 shell 和运行中的程序使用。
删除环境变量:
-
临时删除:
- 在当前 shell 会话中删除环境变量:
1unset VAR_NAME
- 在当前 shell 会话中删除环境变量:
-
永久删除:
- 编辑
.bashrc
或.profile
文件,删除相应的export
行。
- 编辑
临时添加环境变量:
-
在当前 shell 会话中添加环境变量:
1export VAR_NAME=value
-
使用
env
命令临时设置环境变量:1env VAR_NAME=value command arg
永久添加环境变量:
- 在
.bashrc
或.profile
文件中添加环境变量:
然后添加以下行:1nano ~/.bashrc
保存文件后,运行:1export VAR_NAME=value
1source ~/.bashrc
软件包管理工具
dpkg (Debian package manager)
用途: dpkg
是 Debian 和基于 Debian 的发行版(如 Ubuntu)的基础软件包管理工具。
语法: dpkg [选项] [命令] [参数]
命令:
--configure
: 配置未完成安装的软件包。--get-selections
: 显示软件包的选择状态。--set-selections
: 设置软件包的选择状态。--verify
: 验证已安装的软件包。--info
: 显示软件包信息。--contents
: 显示软件包的内容。--status
: 显示软件包的状态。--list
: 列出已安装的软件包。--purge
: 卸载软件包并清除其配置文件。--remove
: 卸载软件包。--install
: 安装或升级软件包。--reconfigure
: 重新配置软件包。
选项:
-i
或--install
: 安装或升级软件包。-r
或--remove
: 卸载软件包。-P
或--purge
: 卸载软件包并清除配置文件。-L
或--listfiles
: 显示软件包安装的文件列表。-l
或--list
: 列出已安装的软件包。-S
或--search
: 搜索文件属于哪个软件包。-s
或--status
: 显示软件包的状态。-c
或--contents
: 显示软件包的内容。-I
或--show
: 显示软件包信息。-V
或--verify
: 验证已安装的软件包。-D
或--debug
: 设置调试级别。-h
或--help
: 显示帮助信息。-V
或--version
: 显示版本信息。
示例:
-
安装软件包:
1dpkg -i package.deb
-
卸载软件包:
1dpkg -r package-name
-
显示软件包的状态:
1dpkg -s package-name
-
搜索文件属于哪个软件包:
1dpkg -S /path/to/file
apt-get (Advanced Package Tool)
用途: apt-get
是基于 Debian 的发行版中的高级软件包管理工具,用于安装、卸载、更新软件包等操作。
语法: apt-get [选项] [子命令] [参数]
子命令:
update
: 更新软件包列表。upgrade
: 升级已安装的软件包。dist-upgrade
: 升级系统版本。install
: 安装软件包。remove
: 卸载软件包。purge
: 卸载软件包并清除配置文件。autoremove
: 卸载不再需要的依赖软件包。clean
: 清除下载的软件包缓存。source
: 安装源代码包。build-dep
: 安装构建依赖。
子选项:
-y
: 自动回答 yes。-f
: 修复损坏的依赖关系。-d
: 下载但不安装。-o
: 设置APT配置选项。-s
或--simulate
: 模拟操作。-h
或--help
: 显示帮助信息。-V
或--version
: 显示版本信息。
示例:
-
更新软件包列表:
1sudo apt-get update
-
升级已安装的软件包:
1sudo apt-get upgrade
-
安装软件包:
1sudo apt-get install package-name
-
卸载软件包:
1sudo apt-get remove package-name
-
卸载软件包并清除配置文件:
1sudo apt-get purge package-name
-
清除下载的软件包缓存:
1sudo apt-get clean
网络相关命令
ping (test Internet connectivity)
用途: ping
命令用于测试与另一台计算机的网络连接是否可达。
语法: ping [选项] 目标地址
选项:
-c
或--count 数量
: 发送指定数量的ICMP Echo Request报文。-i
或--interval 时间
: 发送ICMP Echo Request报文之间的间隔时间(以秒为单位)。-t
或--time-out 时间
: 设置超时时间(以毫秒为单位)。-W
或--timeout 时间
: 设置等待每次回复的超时时间(以秒为单位)。-s
或--size 大小
: 设置ICMP Echo Request报文的大小(以字节为单位)。-q
或--quiet
: 减少输出信息。-v
或--verbose
: 增加输出信息。-h
或--help
: 显示帮助信息。-V
或--version
: 显示版本信息。
示例:
-
测试与 www.example.com 的连接:
1ping www.example.com
-
发送 5 个 ICMP Echo Request 报文:
1ping -c 5 www.example.com
-
每次发送报文之间间隔 2 秒:
1ping -i 2 www.example.com
-
设置超时时间为 500 毫秒:
1ping -W 0.5 www.example.com
ifconfig (configure network interfaces)
用途: ifconfig
命令用于配置和显示网络接口的信息。
语法: ifconfig [选项] [网络接口]
选项:
-a
: 显示所有网络接口的信息。-s
: 以表格形式显示网络接口统计信息。up
: 启用网络接口。down
: 关闭网络接口。promisc
: 设置网络接口为混杂模式。arp
: 启用网络接口的 ARP 功能。noarp
: 禁用网络接口的 ARP 功能。mtu MTU
: 设置网络接口的最大传输单元。inet IP
: 设置网络接口的 IPv4 地址。netmask MASK
: 设置网络接口的子网掩码。broadcast BROADCAST
: 设置网络接口的广播地址。ether MAC
: 设置网络接口的 MAC 地址。alias IP
: 设置网络接口的别名地址。-h
或--help
: 显示帮助信息。-V
或--version
: 显示版本信息。
示例:
-
显示所有网络接口的信息:
1ifconfig -a
-
启用网络接口
eth0
:1ifconfig eth0 up
-
关闭网络接口
eth0
:1ifconfig eth0 down
-
设置
eth0
的 IPv4 地址为192.168.1.100
:1ifconfig eth0 inet 192.168.1.100
-
设置
eth0
的子网掩码为255.255.255.0
:1ifconfig eth0 netmask 255.255.255.0
-
设置
eth0
的广播地址为192.168.1.255
:1ifconfig eth0 broadcast 192.168.1.255
常用特殊字符
-
通配符 (Wildcard)
-
*
(星号)- 用途: 代表任意数量的任意字符。
- 示例:
这将列出当前目录下所有扩展名为1ls *.txt
.txt
的文件。
-
?
(问号)- 用途: 代表单个任意字符。
- 示例:
这将列出当前目录下所有以1ls a?.txt
a
开头,接着是一个任意字符,然后是.txt
扩展名的文件。
-
[...]
(方括号)- 用途: 代表方括号内的任何一个字符。
- 示例:
这将列出当前目录下所有以1ls a[bcd].txt
a
开头,接着是b
、c
或d
,然后是.txt
扩展名的文件。
-
[^...]
(方括号加脱字符)- 用途: 代表除了方括号内的任何字符。
- 示例:
这将列出当前目录下所有以1ls a[^bcd].txt
a
开头,接着不是b
、c
或d
的任意字符,然后是.txt
扩展名的文件。
-
{n...m}
(花括号)- 用途: 代表一系列字符串的组合。
- 示例:
这将列出当前目录下的1ls {file1,file2,file3}.txt
file1.txt
、file2.txt
和file3.txt
。
-
-
选择 (Selection)
-
|
(竖线)- 用途: 用于管道,将一个命令的输出作为另一个命令的输入。
- 示例:
这将列出当前目录下所有1ls *.txt | grep "example"
.txt
文件,并通过grep
命令筛选包含 "example" 的行。
-
-
转义 (Escape)
-
`` (反引号)
- 用途: 用于嵌入命令的输出。
- 示例:
这将输出今天的日期,格式为1echo "Today is `date +%Y-%m-%d`."
YYYY-MM-DD
。
-
-
重定向 (Redirection)
-
>
(大于号)- 用途: 用于重定向命令的输出到文件,覆盖原有文件内容。
- 示例:
这将把当前目录下所有1ls *.txt > file_list.txt
.txt
文件的列表写入file_list.txt
文件中。
-
>>
(两个大于号)- 用途: 用于追加重定向命令的输出到文件,不会覆盖原有文件内容。
- 示例:
这将把当前目录下所有1ls *.txt >> file_list.txt
.txt
文件的列表追加到file_list.txt
文件的末尾。
-
<
(小于号)- 用途: 用于从文件读取输入,代替标准输入。
- 示例:
这将输出1cat < input.txt
input.txt
文件的内容。
-