[TOC]
写在前面:
Virtualbox 安装增强工具需要先执行以下命令才行:
yum install -y gcc gcc-c++ kernel kernel-devel
若提示无法加载光驱, 则需要先 umount 已经挂载的光盘.
版本
内核版本
主版本号、次版本号、末版本号
理论上次版本号是奇数为不稳定版, 偶数为稳定版但是从内核 2.6 开始就已经不按照次版本号来区分是否是稳定版了, 建议直接以官方网站上表明 "Stable" 的为准.
发行版本
RedHat Enterprise Linux(RHEL) - 商业收费, 是商业公司维护的发行版本的代表
- Fedora - 免费(由RedHat 桌面版发展来的免费版, 相对RedHat Enterprise不稳定), 稳定性较差.
- CentOS - 社区版企业操作系统(RHEL社区克隆版), 由RedHat Enterprise代码再编译(去除相关logo, 版本信息), 其实就是RedHat,免费又稳定.
Debian - 社区免费, 是社区组织维护的发行版本的代表
- Ubuntu - 基于Debian 的 unstable 版本加强桌面系统, 桌面系统分为三套: Gnome、KDE(kubuntu)、Xfc(xubuntu). 适合作为桌面系统
Debian
- 7.7 代号: Wheezy
- 8 代号: Jessie
- 9 代号: Stretch
- 10 代号: Buster
Ubuntu
- 14 代号: Trusty
- 16 代号: Xenial
- 17 代号: Artful
Alpine - 面向安全的轻型 Linux 发行版本。不同于其他的 Linux 发行版本,Alpine 采用 musl libc
和 busybox
进行构建,减小系统的体积和运行时资源消耗。
注意: 如果需要涉及到编译,Alpine 镜像采用的是musl libc
而非glibc
,这点需要额外留意
发行版本 | |
---|---|
基于Debian | ▪ Debian▪ Ubuntu▪ Linux Mint▪ Knoppix▪ MEPIS▪ sidux▪ CrunchBang Linux▪ Chromium OS▪ Google Chrome OS |
基于Red Hat | ▪ Red Hat Enterprise Linux▪ Fedora▪ CentOS▪ Scientific Linux▪ Oracle Linux |
基于Mandriva | ▪ Mandriva Linux▪ PCLinuxOS▪ Unity Linux▪ Mageia |
基于Gentoo | ▪ Gentoo Linux▪ Sabayon Linux▪ Calculate Linux▪ Funtoo Linux |
基于Slackware | ▪ Slackware▪ Zenwalk▪ VectorLinux |
其它 | ▪ SUSE▪ Arch Linux▪ Puppy Linux▪ Damn Small Linux▪ MeeGo▪ Slitaz▪ Tizen▪ StartOS |
终端
终端的类型
- 字符终端(命令行终端)
- 图形终端
- 远程终端(VNC, SSH)
运行级别
init运行级别 | target | 含义 |
---|---|---|
0 | shutdown.target | 关机 |
1 | emergency.target | 单用户(可以找回密码) |
2 | rescure.target | 多用户(无网络) |
3 | multi-user.target | 多用户(有网络) |
4 | 无 | 保留,未分配 |
5 | graphical.target | 图形界面 |
6 | 无 | 系统重启 |
关机(poweroff)init 0
切换到字符终端
init 3
图形终端
init 5
重启
init 6
使用 systemctl
查看和修改默认运行级别
systemctl [command] [unit.target]
示例
systemctl get-default 获取当前的运行级别(字符)
systemctl set-default multi-user.target 设置以字符终端级别启动(即 init 3)
command:
get-default :取得当前的target
set-default :设置指定的target为默认的运行级别
isolate :切换到指定的运行级别(无需重启)
可选的 unit.target
shutdown.target
emergency.target
rescure.target
multi-user.target
graphical.target
终端提示
#
root
$
普通用户
常见目录
/
根目录/root
root用户的home目录/home/
普通用户的home目录/etc
配置文件目录/etc/services
文件包含服务及端口映射/bin
命令目录/sbin
管理命令目录/usr/bin:/user/sbin
系统预装的其他命令/dev
设备目录/dev/null # 空设备。任何写入都将被直接丢弃(但返回"成功");任何读取都将得到EOF(文件结束标志)。 /dev/zero # 零流源。任何写入都将被直接丢弃(但返回"成功");任何读取都将得到无限多的二进制零流。 /dev/random # 真随机数发生器。以背景噪声数据或硬件随机数发生器作为熵池,读取时会返回小于熵池噪声总数的随机字节。 # 若熵池空了,读操作将会被阻塞,直到收集到了足够的环境噪声为止。建议用于需要生成高强度密钥的场合。 # [注意]虽然允许写入,但企图通过写入此文件来"预存"随机数是徒劳的,因为写入的数据对输出并无影响。 /dev/urandom # 伪随机数发生器。更快,但是不够安全。仅用于对安全性要求不高的场合。 # 即使熵池空了,读操作也不会被阻塞,而是把已经产生的随机数做为种子来产生新的随机数。 # [注意]虽然允许写入,但企图通过写入此文件来"预存"随机数是徒劳的,因为写入的数据对输出并无影响。 /dev/pts* # 伪终端(在init 5级别下的终端也是伪终端). 每一个伪终端(PTY)都有一个master端(共享/dev/ptmx)和一个slave端(/dev/pts*) /dev/tty* # 终端(字符)设备 "关于磁盘设备, 目前内核已经将SATA/PATA/IED硬盘统一使用 /dev/sd* 来表示,已经不再使用 /dev/hd* 这种过时的设备文件了。 /dev/sr? # SCSI CD-ROM device /dev/hd* # IDE接口的硬盘 /dev/sd* # SATA接口的硬盘
/mnt
挂载目录/proc
内存信息以文件形式的表现, 并非物理上的文件.
环境配置
语言
1. 确认系统当前语言
locale
# 或
echo $LANG
2.确认系统当前是否支持中文, 若不支持则需先按照语言包
locale -a|grep zh_CN
3.修改成中文
echo > /etc/locale.conf <<"EOF"
LANG="zh_CN.UTF-8"
EOF
CentOS 6 是修改这个文件:
/etc/sysconfig/i18n
4.设置使用中文的 man 帮助
yum install -y man-pages-zh-CN.noarch
若当前不支持中文. 则需要执行命令
yum -y groupinstall "Chinese Support"
安装中文支持
若只是想执行某个命令临时用某个语言, 可以如下
# 查看中文的man帮助
LANG=zh_CN.UTF-8 man iptables
# 查看英文的man帮助
LANG=c man iptables
若出现安装完中文支持后缺失 "zh_CN" 的情况(或使用一段时间后), 则可考虑使用如下命令修复
localedef -v -c -f UTF-8 -i zh_CN zh_CN.UTF8
时区
- 确认当前时区
date
- 复制并替换当前时区配置文件
# 此处以 Asia/Shanghai 为例
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
也可以使用 tzselect
获取目标地区的时区字符, 再修改 TZ 环境变量来配置.
代理
# 通过设置环境变量
http_proxy=socks5://192.168.0.9:1084
https_proxy=socks5://192.168.0.9:1084
ftp_proxy=socks5://192.168.0.9:1084
命令
以下仅列出部分个人觉得值得记录的命令: 未用过的命令 或 参数复杂.
帮助命令
man(manual的缩写)
共9章
# 查看指定命令的第 section 节的帮助, section取值: 1~9, 默认是1 man [
] # 依次查看各个 section(如果有的话) 的帮助 man -a section 参数: 1: 用户指令(Commands) 可以从shell运行的命令 2: 系统调用(System calls) 必须由内核完成的功能 3: 程序库调用(Library calls) 大多数 libc 函数, 例如 qsort 4: 设备(Special files) /dev目录中的文件 5: 文件格式(File format and conventions) /etc/passwd等人类可读的文件的格式说明 6: 游戏(Games) 7: 杂项(Macro packages and conventions) 文件系统标准描述, 网络协议, ASCII和其他字符集,以及其他东西 8: 系统指令(System management commands) 类似mount等命令, 大部分只能由root执行. 9: 内核内部指令 已废弃. help
shell(命令解释器)自带的命令称为内部命令, 其他的是 外部命令
# 查看命令是属于哪种类型的命令 type <命令名> # 查看内部命令的帮助 help <内部命令> # 查看外部命令的帮助 <外部命令> --help
- info
比 help 更详细, 作为 help 的补充, 基本都是英语.
shell
通配符
通配符是 shell 内建的符号, 常用于操作多个相似的文件.
通配符 | 说明 |
---|---|
* |
匹配任何字符 |
? |
匹配1个字符 |
[xyz] |
匹配 xyz 中任意一个 |
[a-z] |
匹配范围 |
[!xyz] 或 [^xyz] |
不匹配 |
clear
清空屏幕, 本质是屏幕翻页, 可通过向上滚动查看到之前的命令.
clear
可以使用 Ctrl+l(小写的L) 来清空屏幕.
echo
打印到标准输出
echo [选项] 打印内容
选项
-n # 不追加换行(默认会)
-e # 支持转义字符的解释
-E # 不支持转义字符的解释
转义字符 -e
\a alert (bell)
\b backspace
\c suppress further output
\e escape character
\f form feed
\n new line
\r carriage return
\t horizontal tab
\v vertical tab
\\ backslash
\0nnn the character whose ASCII code is NNN (octal). NNN can be
0 to 3 octal digits
\xHH the eight-bit character whose value is HH (hexadecimal). HH
can be one or two hex digits
文件/目录相关
ls 命令
查看目录情况
ls [选项] <文件名或路径>...
选项
显示范围
-a, --all 显示所有, 包括隐藏的
-A, --almost-all 近乎所有, 不显示 . 和 ..
-R, --recursive 递归显示子目录
-d 将目录名像文件一样显示, 而不是显示目录里的内容.
特别适用于要直接查看某个目录的信息而不是目录内文件信息时.
-i 显示文件的i节点编号
显示格式
-l, --format=long, --format=verbose
-h, --human-readable 自动转换文件大小单位, 默认单位是字节.
排序相关(默认按文件名排序)
-r, --reverse 逆序显示
-t, --sort=time 按最近修改时间排序
-S, --sort=size 按文件大小排序
输出解释
[root@localhost tmp]# ll -ih --time-style=long-iso /var/
总用量 12K
34889261 drwxr-xr-x. 2 root root 19 2020-02-15 18:24 account
33844659 drwxr-xr-x. 2 root root 6 2018-04-11 12:59 adm
50402559 drwxr-xr-x. 13 root root 159 2020-02-15 18:42 cache
50827832 drwxr-xr-x. 2 root root 6 2018-11-05 01:10 crash
370319 drwxr-xr-x. 3 root root 34 2020-02-23 17:05 db
16862160 drwxr-xr-x. 3 root root 18 2020-02-15 18:24 empty
33844660 drwxr-xr-x. 2 root root 6 2018-04-11 12:59 games
50402560 drwxr-xr-x. 2 root root 6 2018-04-11 12:59 gopher
50409426 drwxr-xr-x. 3 root root 18 2020-02-15 18:17 kerberos
33574985 drwxr-xr-x. 61 root root 4.0K 2020-02-23 22:56 lib
50402561 drwxr-xr-x. 2 root root 6 2018-04-11 12:59 local
50331726 lrwxrwxrwx. 1 root root 11 2020-02-15 18:16 lock -> ../run/lock
16861864 drwxr-xr-x. 20 root root 4.0K 2020-02-23 23:11 log
50402562 lrwxrwxrwx. 1 root root 10 2020-02-15 18:16 mail -> spool/mail
370321 drwxr-xr-x. 2 root root 6 2018-04-11 12:59 nis
16862162 drwxr-xr-x. 2 root root 6 2018-04-11 12:59 opt
33844662 drwxr-xr-x. 2 root root 6 2018-04-11 12:59 preserve
50331725 lrwxrwxrwx. 1 root root 6 2020-02-15 18:16 run -> ../run
50402563 drwxr-xr-x. 12 root root 140 2020-02-15 18:24 spool
17300610 drwxr-xr-x. 4 root root 28 2020-02-15 18:19 target
69 drwxrwxrwt. 15 root root 4.0K 2020-02-23 23:12 tmp
33844663 drwxr-xr-x. 2 root root 6 2018-04-11 12:59 yp
↑ ↑ ↑ ↑ ↑
i节点编号 权限 与该i节点链接的文件名数量 归属主和归属组 大小
stat 命令
打印inode信息
stat
mkdir 命令
创建目录
mkdir [选项] <目录名>...
选项
-p, --parents 递归创建目录. 忽略已存在的目录时的报错信息.
cp 命令
复制文件/目录
cp [选项]
选项
提示
-f 覆盖目的文件而不提示
-r 递归
-v, --verbose 显示复制的文件名
复制范围
-p, --preserve 保留源文件的元数据(所有者, 组, 权限, 时间)
-a, --arhchive 等同于 -dpR
mv 命令
移动(改名) 文件
mv [选项]
选项
-f, --force # 覆盖前永不提示
-i, --interactive # 覆盖前提示
注意:
mv
不能用于同名目录覆盖, 即mv /patha/dirname /pathb/dirname
, 此时会提示目录已存在, 无法移动解决办法参见:
简单来说就是:
cd ${SOURCE}; find . -type d -exec mkdir -p ${DEST}/\{} \; find . -type f -exec mv \{} ${DEST}/\{} \; find . -type d -empty -delete
文本查看
cat
head
tail
more
less
wc 命令
统计文件内容信息
wc [选项] [<文件>]
选项
-c, --bytes, --chars 字节数
-l, --lines 换行符数(即行数)
-w, --words 单词数
file 命令
查看文件的类型
file
tee 命令
从标准输入读入, 并同时写往标准输出和文件
tee [选项] ...
选项
-a, --append # 追加到 给出的 文件, 而不是 覆盖
readlink 命令
找出符号链接或规范文件名所指向的位置(绝对路径)
readlink [选项]
选项
-f, --canonicalize # 递归跟随给出文件名的所有符号链接以标准化,除最后一个外所有组件必须存在。
示例
readlink -f /bin/awk # 输出 /bin/gawk
cd /bin && readlink -f ./awk # 输出 /bin/gawk
打包压缩和解压缩
tar 命令
打包: tar
压缩: gzip 和 bzip2
常用扩展名: .tar.gz
, .tar.bz2
, .tgz
, .tbz2
打包
tar [选项] ...
示例
tar -czvf xx.tar.gz xx1 xx2 xx3... 打包并使用gzip压缩
tar -tvf xx.tar 详细查看压缩包内的文件
tar -xzvf xx.tar.gz 解压缩
必须选项
-c, --create 创建新存档
-x, --extract, --get 从存档中取出文件. 目前大多数情况下 tar 会自行检测包的压缩格式, 因此在不指定压缩选项时会自动处理好.
-t, --list 查看存档中的文件目录
--delete 从存档中删除
-r, --append 附加到存档结尾
其他选项
-f, --file <文件> 指定存档或设备
压缩选项
-a, --auto-compress 根据文件后缀来决定压缩程序
-z, --gzip, --gunzip, --ungzip 用gzip处理存档, 常用扩展名: .tar.gz 或 .tgz
-j, --bzip2 用bzip2处理存档, 常用扩展名: .tar.bz2 或 .tbz2
-Z, --compress, --uncompress 用compress处理存档
解压时选项
-C, --directory=DIR 改变解压目录至 DIR
--no-same-owner 将解压后的文件属主和属组保持与当前用户一致(普通用户默认使用该选项)
--same-owner 将解压后的文件属主和属组保持与压缩时的uid、gid一致(root用户默认使用该选项)
--strip-components N 去除N层目录结构(适用于压缩包中的目录结构前面很多空白层)
压缩算法对比:
bzip2 比 gzip 拥有更高的压缩比例, 但消耗更长的时间(多好几倍的时间)
通常推荐用 gzip.
unzip 命令
查看, 提取 ZIP 压缩包
unzip [选项] <压缩包.zip> [...] [-d ]
参数
... 只提取指定文件, 支持通配符 *
选项
-l 查看压缩包内的文件列表(不解压)
-v 查看压缩包内的详细文件列表, 包括压缩比率等(不解压)
-j 忽略压缩文件中的原有目录, 直接将其中的文件解压出来
-d 解压到指定目录(若未制定则默认是在当前目录)
示例
unzip test.zip a.txt b.txt # 从 test.zip 中解压出 a.txt 和 b.txt 文件
文本编辑器 vim
VIM 有4种模型:
- 正常模式 Normal-mode
- 插入模式 Insert-mode
- 命令模式 Command-mode
- 可视模式 Visual-mode
graph TB
normal(正常模式) --i,o,O,a,A--> insert(插入模式)
insert --ESC--> normal
normal --:,/--> command(命令模式)
command --ESC--> normal
command --:q--> 退出
VIM 个人推荐配置
set tabstop=4 " 制表符占用宽度为 4
set smartindent " 智能缩进
VIM 部分配置
"set nu "显示行数
syntax on "启用语法高亮
set tabstop=4 " 设置 tab 制表符所占宽度为 4
set softtabstop=4 " 设置按 tab 时缩进的宽度为 4
set shiftwidth=4 " 设置自动缩进宽度为 4
set expandtab " 缩进时将 tab 制表符转换为空格
set autoindent "开启自动缩进
set smartindent " 智能缩进
set hlsearch " 搜索结果高亮
filetype on " 开启文件类型检测
syntax on " 开启语法高亮
"set relativenumber " 显示相对行号
"set nonu "关闭显示行数
set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
set encoding=utf-8
/etc/vimrc
~/.vimrc
正常模式
# 模式切换
i 进入插入模式 光标定位在当前字符.
a 进入插入模式, 光标定位在下一个字符.
I 进入插入模式, 光标定位在本行的开头
A 进入插入模式, 光标定位在本行的末尾
o 进入插入模式, 光标在下一行开头并产生一个空行.
O 进入插入模式, 光标在上一行开头并产生一个空行.
: 进入命令模式
/ 进入命令模式, 并查找
v 进入字符可视模式
V 行可视模式
Ctrl+v 块可视模式
# 历史操作
u undo, 撤销操作
Ctrl+r redo, 重做撤销
# 光标移动(在方向键产生乱码时适合使用)
h ←
j ↓
k ↑
l →
gg 移动到第一行
G 移动到最后一行
G 移动到第num行
^ 移动到行开头
$ 移动到行末尾
e 移动到下一个单词末尾
# 行操作
yy 复制本行(包括换行符)
y$ 复制光标到本行末尾间的内容(不包括换行符)
yy 复制num行
dd 剪切本行
d$ 剪切光标到行末尾间的内容
dd 剪切num行
p 在当前光标处黏贴(插入)
# 字符操作
x 删除单个字符
r 替换单个字符, 输入r后再输入替换后的字符即可.
大写的是指 Shift+字符
插入模式
ESC 返回正常模式
命令模式
ESC 返回正常模式
:w [] 保存|另存为
:q 退出
:q! 退出(不保存)
:! 切换执行linux命令
# 查找
/<待查找文本> 全文查找, n定位下一个匹配, N定位上一个匹配
/<待查找文本>\c 忽略大小写
/<待查找文本>\C 大小写敏感
# 查找支持正则, 但要注意转义, 例如:
/\s 匹配一个空格
/\s\+ 匹配一个或多个空格
/\s\{2,} 匹配2个或以上空格
# 替换 - 命令格式
:[前缀]s//[/后缀]
# 替换 - 前缀总结
:<行号>s 仅在第<行号>内替换
:<开始行>,<结束行>s 仅在指定行范围内替换
:%s 全文替换(默认每行只替换一此, 除非配合 /g)
:.,+s 当前行及下面的num行替换
# 替换 - 后缀总结(可以组合使用)
/g global, 替换所有匹配项
/c confirm, 逐个确认替换
/i 忽略大小写
# vim配置
## 行号
set nu 显示行号
set nonu 不显示行号(默认)
set relativenumber 显示相对行号
set hlsearch 高亮显示查找匹配内容(默认)
set nohlsearch 不高亮显示查找匹配内容
## 大小写
set ignorecase 大小写不敏感
set smartcase 大小写敏感(默认)
## 空格与制表符
set expandtab 缩进时将 tab 制表符转换为空格
set autoindent 开启自动缩进
set smartindent 智能缩进
set tabstop=4 设置 tab 制表符所占宽度为 4
set softtabstop=4 设置按 tab 时缩进的宽度为 4
set shiftwidth=4 设置自动缩进宽度为 4
## 编码
set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936 逐个尝试文件编码
set encoding=utf-8 文件编码
filetype on 开启文件类型检测
syntax on 开启语法高亮
vim 的配置文件:
/etc/vimrc
针对所有人~/.vimrc
针对个人
可视模式
可视模式分三种
v 进入字符可视模式
V 行可视模式
Ctrl+v 块可视模式
ESC 返回正常模式
# 可视操作
## 以下的 '<,'> 是自动输入的
:'<,'>/ 在选定的行查找
:'<,'>s 在选定的行替换, 其实若知道行号也可以用 :,s 来等价处理.
# 块操作 - 需用 Ctrl+v 进入块模式, 并选定作用范围后
d 将选择的块删除
I(大写的i) 将文本插入光标所在范围列, 输入要插入的内容后再按 ESC+ESC 将插入的内容应用到块.
用户和用户组
用户分为:
- root 用户
- 普通用户(受限用户)
新建用户实际做的操作
- 往
/etc/passwd
添加该用户信息, 每个用户都会分配一个新的独立的uid - 往
/etc/shadow
添加该用户密码相关配置 - 若未指定用户所属的组, 则会在
/etc/group
创建和用户名同名的组(group), 并分配给该用户 - 创建用户的home目录及其配置文件, 位于
/home/<用户名>
重要配置文件
相关重要配置文件
/etc/passwd
/etc/passwd
/etc/group
/etc/passwd
用户配置信息.
如果要新建用户, 甚至只需要往这里添加新用户的信息就可以了(当然home目录需要自己手动创建)
root:x:0:0:root:/root:/bin/bash
...
ntp:x:38:38::/etc/ntp:/sbin/nologin
...
youjiaxing:x:1000:1000:youjiaxing:/home/youjiaxing:/bin/bash
user1:x:1001:1001::/home/user1:/bin/bash
上述每行字段(用:
分隔)格式如下
字段1 字段2 字段3 字段4 字段5 字段6 字段7
用户名 是否需要密码验证 用户id(uid) 组id(gid) 注释 home目录 用户登录成功的命令解释器
x: 需要密码验证 /bin/bash 目前通用的解释器
空: 不需要密码 /sbin/nologin 禁止登陆
/etc/shadow
root:.........:18307:0:99999:7:::
...
youjiaxing:..............::0:99999:7:::
上述每行字段(用:
分隔)格式如下:
字段1 字段2
用户名 加密后的密码
/etc/group
组的配置信息
root:x:0:
...
youjiaxing:x:1000:youjiaxing
上述每行字段(用:
分隔)格式如下:
字段1 字段2 字段3 字段4
组名 是否需要密码验证 组id(gid) 其他组设置
x: 需要
命令
id 命令
显示真实和有效的UID和GID
id [选项] <用户名=当前用户>
useradd 命令
新建用户
useradd [选项] <用户名>
选项
-g, --gid <组名> # 设置用户初始的主组名(必须是已存在的组名)
-d, --home-dir # 指定home目录, 默认是在 /home/<用户名>
-s, --shell # 指定用户的登录 shell 名。默认为留空,让系统根据 /etc/default/useradd 中的 SHELL 变量选择默认的登录 shell,默认为空字符串。
# 例如不允许登录的用户, 可以这样: "-s /sbin/nologin"
-c, --commentCOMMENT # 任何字符串。通常是关于登录的简短描述,当前用于用户全名
-r, --system # 创建一个系统账户(不会自动创建home目录)
userdel 命令
删除用户
userdel [选项] <用户名>
选项
-r, --remove 同时移除对应home目录(默认不会移除)
passwd 命令
修改用户密码
passwd [选项] <用户名=当前用户>
选项
--stdin # 指定从标准输入获取新密码
示例
echo 123456 | passwd user1 # 将用户 user1 密码设置为 123456
usermod 命令
修改用户属性
usermod [选项] <用户名>
选项
-d, --home 修改用户的home目录
-m, --move-home 需和 -d 配合使用, 表示将旧的home目录移动到新的home目录.
-g, --gid <组名> 设置用户初始的主组名(必须是已存在的组名)
-a, --append 将用户添加到附加组。只能和 -G 选项一起使用
-G, --groups [,...] 设置用户的附加组(默认行为是替换), 若同时使用 -a 则是追加
chage 命令
更改用户过期密码信息
chage [选项] <用户名>
groupadd 命令
新建用户组
groupadd [选项] <组名>
选项
-r, --system # 创建一个系统组
groupdel 命令
删除用户组
groupdel [选项] <组名>
su 命令
切换用户
su [-] <用户>
示例
su - <用户> # 使用 login shell, 同时会切换到
su <用户> # 使用 non-login shell
注意
使用 exit 可以退出当前用户.
root用户切换到其他用户是不需要输入密码.
选项
- 切换用户的同时切换环境(指的是工作路径, 切换到用户的home目录)
sudo 命令
以其他用户身份(默认是管理员)执行一条命令
sudo [选项]
选项
-u, --user= 以指定的用户或id执行命令
-H 将HOME环境变量设为新身份的HOME环境变量
visudo 命令
# 设置需要使用sudo的用户(组)
visudo
# 示例: 允许 user3 用户在任意终端上执行取消关机命令
user3 ALL=/usr/sbin/shutdown -c
# 示例: 允许 user4 用户在任意终端执行任意命令
user4 All=(ALL) ALL
# 示例: 允许 user5 用户在任意终端执行任意命令(无需输入密码)
user5 All=(ALL) NOPASSWD: ALL
相关配置项说明:
- localhost: 指的是字符终端, 并非ssh和图形终端.
- ALL: 所有终端
who 命令
查看当前主机上有哪些登录的用户, 对应终端, 及来源.
who
whoami 命令
查看当前用户
whoami
文件与目录权限
!!! root用户不受任何权限限制, 权限控制是针对普通用户.
owner 和 group 优先级
如果用户是该文件属主且同组, 则权限判定时只会看 owner 部分, 忽略 group 部分.
如果 owner 权限拒绝, 但 group 权限允许, 一样是拒绝.
权限表示
-rw------- 1 username groupname mtime filename
类型和权限 指向该i节点的文件名数量 用户 组名 修改时间 文件名
类型和权限:
- rw- --- ---
类型 权限
owner group other
有时候权限的后面会多出一个 "+" , 它表示有额外的 facl 权限
文件类型
- 普通文件
d 目录
b 块特殊文件(也叫做"块设备", eg. 插入的移动硬盘, 光驱)
c 字符特殊文件(也叫做"字符设备", eg. 终端. 在 /dev 目录中很多)
l 符号链接(软链接)
f 命名管道(通信功能)
s 套接字文件(通信功能)
不问文件类型的权限的意义不一样! 这点需要注意块设备无法直接用类似
cat
之类的命令直接操作, 需要先挂载
权限表示
# 普通文件权限表示
r 4 读
w 2 写
x 1 执行
# 目录权限表示
r 可查看目录内的文件名
x 进入目录(目录的访问权)
rx 可进入目录并查看目录文件名
wx 修改目录内的文件名(包括删除文件)
创建新文件有默认权限, 根据umask值计算, 属主和属组根据当前进程的用户来设定.
特殊权限
SUID
念作 SET UID
用于二进制可执行文件, 执行命令时取得文件属主(owner)权限
设置 SUID
# 符号方式
chmod u+s
# 数字方式, 假设文件原先权限是 755, 现在需要在此基础上设置 SUID
chmod 4755
# user 带执行权限
--s
# user 不带执行权限(大写的s)
--S
示例
如 /usr/bin/passwd(注意权限中 user 的 x 位置): s -rwsr-xr-x root root /usr/bin/passwd 用户修改密码时需要修改文件 /etc/passwd, 而该文件状态是: -rw-r--r-- root root /etc/pass 其他用户无权写, 因此需要 SUID
SGID
念作 SET GID
用于目录, 在该目录下创建新的文件或目录, 权限自动更改为该目录的属组(group).
常用于文件共享.
在权限中 group 的 x 位置: s
设置 SGID
# 符号方式
chmod g+s
# 数字方式, 假设目录原先权限是 755, 现在需要在此基础上设置 SGID
chmod 2755
# group 带执行权限
--s
# group 不带执行权限(大写的s)
--S
SBIT
一般称作Stick位
用于目录, 该目录下新建的文件和目录, 仅root和自己可以删除
常用于在一个公共目录中, 为了防止自己的文件(在其他人可写的情况下)被其他人删掉.
设置 SBIT
# 符号方式
chmod o+t
# 数字方式, 假设目录原先权限是 755, 现在需要在此基础上设置 SBIT
chmod 1755
# other 带执行权限
--t
# other 不带执行权限(大写的t)
--T
示例
如 /tmp/ 目录(注意权限中 other 的 x 位置): t drwxrwxrwt root root /tmp
命令
chmod 命令
修改文件、目录权限
chmod [选项] <文件>
chmod忽略符号链接文件.
mode:
[ugoa..][+-=][rwxXstugo...] 可以使用符号或数字(8进制)来更改权限, eg. chmod 755
u 文件所有者
g 文件所在组的用户
o 其他用户
a 所有用户(默认), 等同于 ugo
+ 追加权限(在原来基础上)
- 撤销权限
= 设置权限(只具有这些权限)
r 读权限
w 写权限
x 执行权限(或对目录的访问权)
X
s
t
u
g
o
选项:
-R 递归改变子目录及文件
chown
更改属主、属组
chown [选项] : ...
和 可忽略其中任意一个, eg. chown : ... 表示仅更改属组
chgrp
单独修改属组
chgrp
不常用
umask
显示或设置用户文件创建掩码
umask [选项] []
创建新文件的默认权限是 666, 而不同用户的umask是不同的.
比如 root 用户的默认umask 是 0022, 那么它创建的文件的初始权限就是: 666 - 0022 = 644, 也就是 rw-r--r--