Linux 相关汇总

◇ 目录结构

目录结构

◇ 命令相关

▷ 多用户相关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 创建用户
adduser <user_name>
# 将用户加入到 sudo 用户组
usermod -aG sudo <user_name>

# 切换用户,目录不改变
# 需要输入目标用户的密码
su <user_name>
# 切换用户,同时改变目录
# 需要输入目标用户的密码
su - <user_name>

# 临时以交互模式启动 root shell,会改变目录
# 需要输入当前用户的密码
sudo -i
# 退出 root shell
exit

# 临时以特定用户的身份打开一个新的终端会话,会改变目录
# 需要输入当前用户的密码
sudo -i -u <user_name>
# 退出
exit

▷ 文件相关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# 创建一个空文件或更新已存在文件的时间戳
touch <file_name>
# 创建文件并写入内容,如果文件已存在,覆盖文件的内容
echo "something" > <file_name>
# 在文件末尾添加新的内容
echo "something" >> <file_name>

# 硬链接
ln <file_s> <file_d>
# 符号链接
ln -s <file_s> <file_d>

# 查看文件内容,在终端显示出来
cat <file_name>
# 合并文件内容
cat file1 file2 > merged_file
# 追加 file1 文件内容到 existing_file 末尾
cat file1 >> existing_file

# 实时监视文件末尾内容
tail -f <file>

# 创建目录
mkdir <folder_name>
# 创建多级目录
mkdir -p a/b/c
# 创建多级目录并指定权限
mkdir -p a/b/c -m 0755 # 只针对最后一个文件夹
install -d a/b/c -m 0755

# 重命名
mv file_s file_d
# 比较文件
diff file1 file2

# 删除文件
rm <file_name>
# 删除目录
rmdir <folder_name>
# 递归删除目录
rm -r <folder_name>
# 交互模式,删除每个文件时进行确认
rm -ri <folder_name>

▷ 权限相关

1
2
3
4
5
6
7
8
9
10
11
12
# 添加用户的读写执行权限
chmod u+rwx <file_name>
# 移除群组和其他用户的读写执行权限
chmod go-rwx <file_name>

# 用户读写执行,群组和其他用户读执行
chmod 755 <file_name>

# 查看当前的创建权限掩码
# 下面的例子表示其他用户无法拥有读权限
$ umask
0002

▷ 运行相关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# & 表示后台运行,会返回一个 PID 进程号
$ <long_running_command> &
[1] 4438

# 显示当前运行的进程
$ ps
PID TTY TIME CMD
3934 pts/0 00:00:00 bash
4438 pts/0 00:00:00 xxx
4439 pts/0 00:00:00 ps

# 显示系统上所有进程
# a:所有用户。x:显示没有控制终端的进程。f:以树状结构显示。
ps axf

# 显示进程的内存映射信息
pmap 4438

# 查看进程
$ cd /proc/4438/
$ ls fd
0 1 2 3
# 详细显示
$ ls fd -l

/proc/[PID]/fd/ 目录中,通常情况下,以下的编号分别表示:

  • 0: 标准输入 (stdin)
  • 1: 标准输出 (stdout)
  • 2: 标准错误 (stderr)

这些编号代表了进程的标准输入、标准输出和标准错误文件描述符。文件描述符是用于访问文件、设备或管道的抽象概念。上述编号是在大多数 UNIX-like 系统中的通用约定。

具体来说:

  • 0 (stdin): 是进程的标准输入文件描述符。通常从终端输入时,这个描述符被用来接收输入。
  • 1 (stdout): 是进程的标准输出文件描述符。通常当程序输出信息时,这个描述符被用来输出到终端或文件。
  • 2 (stderr): 是进程的标准错误文件描述符。通常当程序遇到错误时,错误信息被输出到这个描述符,以便将错误信息与标准输出区分开。

这些标准文件描述符使得进程可以与系统进行基本的输入和输出交互。其他的文件描述符 (如3、4等) 可能会被用于打开或引用其他文件、设备或管道,这取决于具体的进程和它的实现。

中止相关:

1
2
3
4
5
6
7
8
9
# SIGTERM (15): 默认的终止信号。该信号请求目标进程正常终止,允许进程执行清理操作
# 如果目标进程能够捕获和处理 SIGTERM 信号,它有机会进行优雅地退出
kill -15 PID

# SIGKILL (9): 强制终止信号,无法被捕获、处理或忽略。立即终止目标进程,不允许进行清理操作
kill -9 PID

# SIGINT (2): 当从键盘输入中断字符 (通常是Ctrl+C) 时,终端会向前台进程组中的所有进程发送 SIGINT 信号
kill -2 PID

▷ 杂项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 查看限制相关
ulimit -a

# 新建一个名为 -a 的文件
touch -- -a
touch ./-a

# 查看文件详细信息
stat file_name

# 获取上一条命令的退出状态码
echo $?

# 查看环境变量
export

▷ 其它

Ubuntu 相关参见:链接

◇ 环境变量

▷ PATH 相关

打开:

1
2
3
4
5
6
7
8
# 全局系统环境变量
sudo vim /etc/environment

# 全局 shell 配置
sudo vim /etc/profile

# 用户级别 shell 配置
vim ~/.bashrc

填写:

1
2
3
4
5
6
7
# 全局系统环境变量
# 后面添加即可
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/your/path"

# shell 配置
# 行尾添加即可
export PATH=$PATH:/your/path

更新:

1
2
3
4
5
6
7
8
# 全局系统环境变量
source /etc/environment

# 全局 shell 配置
source /etc/profile

# 用户级别 shell 配置
source ~/.bashrc

◇ 应用程序

▷ Man 手册

section 包括:

  1. Standard commands (标准命令)
  2. System calls (系统调用)
  3. Library functions (库函数)
  4. Special devices (设备说明)
  5. File formats (文件格式)
  6. Games and toys (游戏和娱乐)
  7. Miscellaneous (杂项)
  8. AdministrativeCommands (管理员命令)
  9. 其他 (Linux特定的),用来存放内核例行程序的文档
  10. 新文档,可能要移到更适合的领域
  11. 老文档,可能会在一段期限内保留

No manual entry for xxx 错误的解决方案:

查找命令相关的 man 手册时,显示 No manual entry for xxxx, 如:

1
2
$ man 3 printf
No manual entry for printf in section 3

解决方案:装上 gcc 之后就可以了。

◇ 参考内容

  1. 【Linux C】man查看C函数原型|定义No manual entry for xxx 错误的解决方案. https://blog.51cto.com/liangchaoxi/4292814