Skip to content

;按顺序执行,不论执行结果 |管道,前一个的结果为后一个的输入 ps aux | grep 'firefox'

>输出写入到文件,无则创建有则复写 echo "Hello, World!" > hello.txt >>输出写入到文件,无则创建有则追加 echo "Hello, World!" >> hello.txt

&& 前面成功才运行后面的 || 前面失败才运行后面的

&进程放入后台运行 使用 jobs 命令可以查看当前Shell会话中所有后台进程的列表。 fg 命令可以将后台进程带到前台。 fg job_id 挂起和继续后台进程:使用 Ctrl+Z 可以挂起当前前台进程,并将其放入后台。使用 bg 命令可以继续运行被挂起的后台进程。 # 挂起当前前台进程 Ctrl+Z

# 继续运行被挂起的后台进程 bg %job_id

退出时终止后台进程:默认情况下,当你退出终端时,后台进程也会被终止。如果你想要在退出终端后仍然保持后台进程运行,可以使用 nohup 命令。 nohup long_running_command > output.log 2>&1 & > :将标准输出重定向到 output.log 文件。 2>&1 :将标准错误也重定向到同一个文件。

vi文件编辑创建 默认进入的就是命令模式 从插入模式或末行模式切换到命令模式:

当你在插入模式(例如,你在编辑文本)时,只需按下 Esc 键即可返回命令模式。 当你在末行模式(例如,你在输入 : 命令后)时,同样可以按 Esc 键来返回命令模式。如果你在末行模式输入了错误的命令,也可以按 Esc 来取消并返回命令模式。

在命令模式,按i进去插入模式

保存退出 按esc 出现 : 命令后 输qw 强制退出 按esc 出现 : 命令后 输q!

cat 查看文件内容

修改文件权限为可执行 chmod +x -R 文件 其中-R为递归修改

tail 查看文件后n行

tee

脚本

!/bin/bash

# 启动一个后台命令 command1 & command2 &

等待所有后台命令完成

wait

ls 文件列表

grep 正则查找

top 运行中的进程

kill 杀死进程

rm -r 文件夹路径 rm 文件

cp /home/example/apisix_conf/config.yaml /home/apisix/apisix_conf/ 复制文件

scp /local/file.txt user@remote_ip:/remote/directory/ 远程复制 scp user@remote_ip:/remote/file.txt /local/directory/ 拉取远程文件

修改主机名 /etc/hostname

修改主机定向

/etc/hosts

127.0.0.1   localhost ubuntu
::1         localhost ip6-localhost ip6-loopback ubuntu

sudo su - 其中sudo表示以管理员身份执行命令 su代表切换到root用户 -代表启动一个新shell 如root还未设置密码可以输入passwd重置密码

passwd username 修改其他用户密码 passwd -l username 禁用账号 passwd -u username 启用账号 passwd -S username 检测账户启用状态

useradd -m username -m选项会自动为用户创建home目录。

userdel -r username -r选项会同时删除用户的home目录

id username 查看用户是否存在,查看某个用户的 UID 和所属组

核心规则:~ 的扩展基于 /etc/passwd 文件中的记录,而不是实际的文件系统。 /etc/passwd 文件的每一行都定义了一个用户,其中就包含了该用户的家目录路径。 /etc/shadow 加密的密码在这个文件

# /etc/passwd 文件格式示例
username:x:1001:1001:User Name,,,:/home/username:/bin/bash
#                                    ↑
#                            第六个字段就是家目录路径


有一个名为 username 的用户。
他的密码存储在 /etc/shadow 文件中(由 x 指明)。
他的数字用户ID是 1001。
他的主用户组的ID也是 1001(通常这意味着系统创建了一个与用户同名的组 username)。/etc/group
他的全名是 User Name,没有填写办公室、电话等其他信息。
他的家目录位于 /home/username。
他登录后使用的Shell是 /bin/bash。

如果用户名是 alice,那么 ~ 就等同于 /home/alice。 ~username 代表指定用户的家目录。 ~bob 会被展开为 /home/bob(假设 bob 的家目录是标准的)。

root 用户的家目录是 /root,而不是 /home/root。 同样,~root 也指向 /root。

用户组管理常用命令 groups:查看当前用户属于哪些组。


getent group <groupname>:查看某个组里有哪些成员。

#将用户追加到某个附加组中(-aG 选项非常重要,避免覆盖用户原有的其他组)。
sudo usermod -aG <groupname> <username>:
# 将 bob 加入 developers 组。
sudo usermod -aG developers bob 
# 使 bob  ONLY 属于 audio 组
sudo usermod -G audio bob
# 使 bob  ONLY 属于 sudo,audio 组
sudo usermod -G sudo,audio bob

sudo usermod -aG sudo alice  # 授予 sudo 权限

sudo usermod -e 2024-09-13 username 账号过期时间
sudo usermod -e "" username 清除过期时间


例如:

sudo groupadd <newgroup>:创建新用户组。
sudo groupdel <oldgroup>:删除用户组。

重要提示:修改用户所属组后,该用户需要重新登录才能使新的组权限生效。
#用户登录日志,最后一次登录时间
lastlog
#登录成功日志
last -n 100

#登录失败日志
lastb  -n 100


# 用户信息
id username
用户id=1001(dixi) 组id=1002(dixi) 组=1002(dixi),27(sudo)

who 查看当前登录用户    用户名、终端、登录时间、(来源IP)  快速查看哪些用户在线,信息简洁
root@userroot-PowerEdge-R730xd:~# who
userroot :0           2025-10-02 22:43 (:0)图形界面
userroot pts/0        2025-10-03 00:29 (192.168.31.227)
userroot pts/1        2025-10-03 00:29 (192.168.31.227)

users   仅显示当前登录的用户名 已登录用户的名称列表
getent passwd | grep -v "/nologin\|/false" | cut -d: -f1 可以登录的用户


# 查看 userroot 的所有进程
ps -u userroot -f
# 查看 userroot 的进程树
ps -u userroot -f --forest
# 实时监控 userroot 的进程
top -u userroot

# 杀死用户的所有进程
pkill -u username
# 强制杀死
pkill -9 -u username


核心概念:用户 (User)、用户组 (Group)、其他人 (Others) Linux 系统通过三个实体来管理对所有文件和目录的访问: 用户 (User): 文件或目录的所有者。通常是谁创建了它,谁就是它的所有者。 用户组 (Group): 一组相关的用户。可以为一个用户组设置权限,组内的所有成员都会自动获得这些权限。一个用户可以属于多个组。 其他人 (Others): 既不是文件所有者,也不在文件所属用户组里的任何其他用户。

为什么这样设计? 为了灵活且高效地分配权限。例如,你可以创建一个 developers 组,将所有的开发人员加入该组,然后设置某个项目目录的权限为 rwx 给 developers 组。这样,任何加入该组的开发人员都能读写和执行该目录下的文件,而无需为每个人单独设置权限。

权限类型:读 (r)、写 (w)、执行 (x) 权限对于文件和目录来说,含义有根本性的不同: 权限 对文件的影响 对目录的影响 r (读) 可以读取文件的内容(如用 cat, less 查看) 可以列出目录下的内容(如用 ls 命令)。没有读权限,即使有执行权限,你也无法看到目录里有什么文件。 w (写) 可以修改或覆盖文件的内容 可以在目录内创建、删除、重命名文件或子目录。注意:删除文件取决于对目录的写权限,而不是对文件本身的写权限! x (执行) 可以执行该文件(如脚本、二进制程序) 可以进入该目录(如用 cd 命令),并访问目录中的元信息。这是使用目录内任何文件的前提。 特殊权限: 还有 setuid, setgid, sticky bit 等特殊权限,用于更高级的场景,本文先不展开。

查看权限:ls -l 命令详解 使用 ls -l 命令可以查看详细的权限信息。

$ ls -l
total 16
drwxr-xr-x 2 alice developers 4096 Sep 14 10:44 my_directory
-rw-r--r-- 1 alice developers 1328 Sep 14 09:30 my_file.txt
-rwxr-x--- 1 bob  security    2048 Sep 14 11:20 backup.sh


我们以 -rwxr-x--- 1 bob security 2048 Sep 14 11:20 backup.sh 为例进行解析:
权限字符串 (-rwxr-x---):
第1位:文件类型
-:普通文件
d:目录
l:符号链接

第2-4位:用户 (User) 的权限,即文件所有者 bob 的权限:rwx(读、写、执行)
第5-7位:用户组 (Group) 的权限,即 security 组所有成员的权限:r-x(读和执行,无写权限)
第8-10位:其他人 (Others) 的权限:---(没有任何权限)

链接数 (1): 硬链接的数量(对于目录,通常至少为2)。
所有者 (bob): 文件的所有者。
所属组 (security): 文件所属的用户组。
文件大小 (2048): 以字节为单位的大小。
修改时间 (Sep 14 11:20): 最后修改时间。
文件名 (backup.sh)。

总结一下这个文件 backup.sh 的权限:
用户 bob:可以读、写、执行这个脚本。
security 组的成员:可以读和执行这个脚本,但不能修改它。
其他任何用户:完全不能访问这个文件。


修改权限:chmod 命令 (Change Mode) chmod 用于改变文件或目录的权限。有两种设置方法: 方法一:符号模式 (ugo +/- rwx) - 直观 使用字母 u(用户), g(组), o(其他人), a(所有人) 和运算符 +(加), -(减), =(设置) 来修改。

# 为文件所有者添加执行权限
chmod u+x backup.sh
# 为用户组和其他人移除写权限
chmod go-w my_file.txt
# 为组设置精确的权限为“读和执行”
chmod g=rx my_directory


# 给所有人添加读权限
chmod a+r my_file.txt

方法二:数字模式 (八进制) - 高效 用三个数字分别代表用户、用户组、其他人的权限。每个数字是 r(4), w(2), x(1) 的和。

权限  数字
--- 0
--x 1
-w- 2
-wx 3
r-- 4
r-x 5
rw- 6
rwx 7


# 设置权限为 rwxr-xr-- (用户:7,组:5,其他人:4)
chmod 754 my_script.sh

# 常用权限:
chmod 644 my_file.txt    # rw-r--r-- (用户可读写,组和其他只读)
chmod 755 my_script.sh   # rwxr-xr-x (用户全权限,组和其他可读执行)
chmod 700 secret_file    # rwx------ (只有用户自己能访问)
chmod 777 open_dir       # rwxrwxrwx (所有人都有全部权限!非常危险,慎用)
-R 选项:递归修改目录及其内部所有内容的权限。


chmod -R 755 /path/to/directory/ # 谨慎使用 -R!

修改所有者和所属组:chown 和 chgrp chown (Change Owner) 改变文件的所有者和/或所属组。通常需要 sudo 权限。

# 将文件所有者改为 alice
sudo chown alice my_file.txt

# 将文件所有者和组都改为 alice 和 developers
sudo chown alice:developers my_file.txt

# 只改变所属组(用冒号,前面留空)
sudo chown :developers my_file.txt

# 递归改变目录的所有者
sudo chown -R alice /path/to/directory/

Shell 的两种启动模式
Shell(这里主要指 Bash)有两种启动方式,它们会读取不同的配置文件:

登录 Shell
场景:系统启动时通过控制台登录、SSH 远程登录、su - username(带横杠)。
读取的文件:~/.bash_profile > ~/.bash_login > ~/.profile(按顺序找到第一个为止)。
特点:只执行一次,用于设置最基础、最全局的环境。

交互式非登录 Shell
场景:在图形界面下打开终端窗口、在已有 Shell 中直接运行 bash 命令。
读取的文件:~/.bashrc。
特点:每次打开新窗口都会执行,用于设置与交互相关的、局部的功能。


source 命令就像是 “刷新设置”按钮,你改了配置后,按一下(执行命令)就能让新设置立刻起作用,不用重启电脑(或注销登录)。
source 是一个 shell 内置命令(不是外部程序),用于在当前 shell 环境中执行一个文件中的命令。
它有一个等效的符号:.(一个点)。source filename 和 . filename 是完全相同的。
你需要先给文件执行权限:chmod +x my_vars.sh
然后执行:./my_vars.sh
结果:系统会创建一个新的子 shell 来运行这个脚本。脚本中设置的 MY_VAR 和 myalias 都只存在于那个子 shell 中。当脚本运行结束,子 shell 退出,这些设置也随之消失,当前 shell 的环境没有任何改变。
在软件开发中加载虚拟环境(如 Python 的 venv),其 activate 脚本就是通过 source 来执行的,从而改变当前 shell 的 PATH 等环境变量。