Linux 基础知识汇总,介绍 Linux 的基础知识
Linux 基础知识
- 一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:
标准输入文件(stdin)
:stdin 的文件描述符为 0
,Unix 程序默认从 stdin 读取数据
标准输出文件(stdout)
:stdout 的文件描述符为 1
,Unix 程序默认向 stdout 输出数据
标准错误文件(stderr)
:stderr 的文件描述符为 2
,Unix 程序会向 stderr 流中写入错误信息
- Linux 设备分为三类:
- 字符设备,如键盘、鼠标等
- 块设备,如硬盘、光驱、软驱等
- 网络设备,如以太网卡
查看架构
apt install coreutils
# Linux
$ arch
x86_64
$ getconf LONG_BIT
64
# Mac
$ arch
i386
$ getconf LONG_BIT
64
文件权限
使用 ls -lh
可以查看文件权限
# 文件权限
-rwxr-xr-x
# 位
9876543210
说明:
- 第 9 位表示
文件类型
,可选值:
p
命名管道文件
d
目录文件
l
符号连接文件
-
普通文件
s
socket 文件
c
字符设备文件
b
块设备文件
- 第 8-6 位:文件所有者的权限
- 第 5-3 位:同组用户的权限
- 第 2-0 位:其他用户的权限
- 上述三组的形式为
rwx
:
SUID & SGID & SBID
控制文件访问的权限标志(flag)
:
SUID(set uid ID upon execution)
允许用户以可执行文件的 owner
的权限运行可执行文件
chmod u+s /path/to/bin
、chmod u-s /path/to/bin
SUID
仅对 二进制程序(binary program)
有效,且执行者需要有执行 x
权限
- 权限仅在上述程序的执行过程(
runtime
)时有效
- 执行者临时拥有该程序
所有者(owner)
的权限
SGID(set group ID upon execution)
允许用户以可执行文件的 owner group
的权限运行可执行文件
chmod g+s /path/to/bin
、chmod g-s /path/to/bin
- SGID 对二进制程序有效,且执行组需要有执行
x
权限
- SGID 主要用在目录上
- 假设用户在某个目录下具有
w
权限,若使用者在此目录下建立新文件,则新文件的群组与此目录的群组相同
SBID(the restricted deletion flag or sticky bit)
仅对目录有效,用来阻止非文件的所有者删除文件,如 drwxrwxrwt ... /tmp
SUID
和 SGID
文件文件示例:
-rwsr-xr-x
表示 SUID
和所有者权限中可执行位被设置
-rwSr--r--
表示 SUID
被设置,但所有者权限中可执行位没有被设置
-rwxr-sr-x
表示 SGID
和同组用户权限中可执行位被设置
-rw-r-Sr--
表示 SGID
被设置,但同组用户权限中可执行位没有被设置
设置方法:
# 设置 SUID 位
chmod u+s <filename>
# 去掉 SUID 位
chmod u-s <filename>
# 设置 SGID 位
chmod g+s <filename>
# 去掉 SGID 位
chmod g-s <filename>
# 设置 SBID 位
chmod o+t <dirname>
# 去掉 SBID 位
chmod o-t <dirname>
SUID
示例:普通用户使用 passwd
可以临时拥有 root
权限修改 /etc/shadow
文件
$ ls -lhart /usr/bin/passwd
-rwsr-xr-x 1 root root 28K Aug 9 2019 /usr/bin/passwd
# 默认 root 拥有所有文件的权限
$ ls -lhart /etc/shadow
---------- 1 root root 660 Mar 26 2023 /etc/shadow
SGID
示例:获得该程序所属用户组的权限
mlocate
程序通过查询数据库文件 /var/lib/mlocate/mlocate.db
实现快速的文件查找
- 普通用户执行
mlocate
命令时,会临时获得用户组 mlocate
的执行权限,因为用户组 mlocate
对 mlocate.db
具有读权限,所以普通用户可以读取 mlocate.db
# SGID 文件
$ ls -lhart /usr/bin/mlocate
-rwxr-sr-x 1 root mlocate 47K Jul 16 2019 /usr/bin/mlocate
$ ls -lhart /var/lib/mlocate/
total 216K
drwxr-xr-x 1 root root 4.0K Nov 22 14:54 ..
-rw-r----- 1 root mlocate 201K Nov 22 14:54 mlocate.db
drwxr-xr-x 2 root root 4.0K Nov 22 14:54 .
其他类似工具
其他
agetty
是一个用于处理终端登录的程序,处理终端设备上的输入和输出,并为用户登录会话提供基本的交互功能
agetty
用于打开一个 tty
端口,提示登录名并调用 /bin/login
命令。agetty
一般由 init
调用