1. 概述
  2. 文件系统
  3. 命令行工具
  4. 进程管理
  5. 网络管理
  6. 系统管理
  7. 包管理系统(主 Debian 系)

1. 概述

1.1 概述

参考书籍:
<<鸟哥的 Linux 私房菜-基础篇>>
<<\Linux 就该这么学>>
<<精通 Linux>>

参考网站:
[Linux 命令 | 菜鸟教程]

没有仔细看硬盘的操作(一般用不到)
双系统的分区等直接在 Windows 上完成…
服务器上的硬盘分区也不用手动完成…

所列命令仅列出最基本的形式,更详细的内容可以参考第二章的帮助手册使用方法,自行查找 man pages

1.2 Linux 文件系统结构

/目录 作用
/ 根目录
├── bin binary,可执行文件目录,大部分基础 Linux 命令(如/bin/bash)
├── boot 内核启动加载文件,存放 Linux 在第一次启动时的信息,之后的信息不在这里
├── dev device,设备文件(Linux 把设备当做一个文件看待)
├── etc etcetera,存放重要的系统配置文件,如密码文件等(X11 目录中是显卡和视窗设置文件)
├── lib library,各种代码库(一般只有共享库(动态库),/usr/lib 中同时有静态库和共享库)
├── lost+found 当文件系统发生错误时, 将一些遗失的片段放置到这个目录下
├── media 加载可移除设备的地方,比如移动硬盘,U 盘等
├── mnt mount,让用户临时挂载其他的文件系统的地方
├── opt option,名称为可选目录,有些系统并没有这个目录,存放第三方软件
├── proc process,包含当前正在运行的进程信息及一些内核参数
├── root root 用户的家目录,存放其配置等文件
├── run 系统运行时需要的文件, 不能随便删除.重启时会删除,下次开机时重新生成
├── sbin superuser binary,root 用户工具程序文件
├── snap snap 是 Ubuntu 的一种新的包管理系统,其软件包存放在这里
├── srv service,主要用来存储本机或本服务器提供的服务或数据
├── swapfile 交换文件,虚拟内存文件夹
├── sys system,类似 proc,存放设备和系统的信息
├── tmp temp,临时文件目录,很多程序会把临时数据存放在这里,系统启动时会清空这个文件夹
├── usr Unix System Resources,存放系统系统文件,与 root 文件夹结构类似
├── var 程序存放运行信息的地方,如系统日志,用户信息,缓存等

关于/usr 文件夹的缩写有好几种说法:

Unix System Resources(根据其中的内容,感觉这种比较靠谱)
Unix SoftWare Resources
Unix Share Resources

/usr 目录 作用
. /usr 目录,其子文件夹内容与根目录子文件夹内容类似
├── bin binary,可执行文件目录
├── games 游戏?大概是吧…
├── include C 编译器所需要的头文件
├── lib library,各种库文件(包括动态库和静态库)
├── libexec 与 lib 类似(也不知道为啥不合并)
├── local 管理员安装软件的地方,其结构与/usr 类似,手动安装的软件放这里
├── sbin superuser binary,管理员工具软件目录
├── share Unix 系统间的共享文件(man 手册存放在这里)
└── src source,源代码文件(通常是内核),如果要编译内核,需要在这个目录里操作

2. 文件系统

2.1 文件权限系统

与 Windows 不同,Linux 的权限系统比较复杂:

  1. Linux 把目录也看做一种文件
  2. Linux 把所有用户分为三类:
    文件创建者 user—u
    与创建者同组的用户 group—g
    其他用户 others—o
  3. 每个文件对不同类型的用户的权限分开管理,互不影响
  4. 每个文件的权限包括三种:
    读取权限 read—r
    写入权限 write—w
    执行权限 execute—e

三种权限对于普通文件和目录文件的约束也有细微的区别:

权限—文件类型 含义
r—文件 可读取此一文件的实际内容,如读取文本文件的文字内容等
w—文件 可以编辑、新增或者是修改该文件的内容(但不含删除该文件)
x—文件 该文件具有可以被系统执行的权限
r—目录 表示具有读取目录结构列表的权限,即读取目录中的文件列表
w—目录 在目录中删除,建立,移动,重命名文件
x—目录 把该目录当做工作文件夹/在该目录中执行指令

其中 x 对于目录来说很特殊
如果只有 w,没有 x,则无法执行任何指令
如果只有 r,没有 x,则只能看到目录中的文件名,无法读取其中的文件(即使有文件的 r 权限)

ll 命令可以列出当前工作目录文件的详细信息
其中最开始的 10 个字符代表了文件的类型和权限
第一个字符为文件类型

字符 文件类型
d 目录
- 普通文件
l 链接文件(类似 windows 中的快捷方式)
b 可供储存的接口设备/随机存储设备
c 串行通信接口设备

后面的 9 个字符分为三组,分别表示 ugo 三个用户的 rwx 三个权限

2.2 文件管理命令

2.2.1 普通管理命令

命令 含义
ls list, 列出当前目录下的所有文件
ll ls -alF 的缩写(列出所有文件,输出详细信息,附上说明字符)
cd dir change directory,改变工作目录(即当前所在目录)
cp file1 file2 copy,复制 file1 到 file2 的位置
cp file1 file2 dir 复制 file1,file2 到目录 dir 中
touch file 创建新文件
mkdir dir make directory,创建新文件夹
rm [-rf] file/dir remove,删除文件,-r:递归删除文件夹,-f 忽略不存在的文件和参数
rmdir dir remove directory,删除空文件夹,可以用 rm 代替,很木大的一个命令

2.2.2 权限管理命令

修改所属组命令

chgrp [options]… group file…
-v: 打印详细信息
-R: 递归执行

修改属主命令(同时也可以改变所属组)

chown [options] user [:group] file…
-v: 打印详细信息
-R: 递归执行

修改权限命令:chmod

chomd nnn file
file 为目标文件
nnn 为用三个 8 进制数字表示的三个用户的目标权限

chomd ugo+rwx file
file 为目标文件
ugo(也可以为单个/两个字母)为目标用户
+为添加(-为减少)
rwx(也可以为单个/两个字母) 为目标权限

2.3 压缩与解压缩

2.3.1 概述

Linux 中常用的压缩格式如下:

后缀名 含义
*.Z compress 程序压缩的文件(现在基本不实用)
*.zip zip 程序压缩的文件 (Windows 常用格式)
*.rar rar 程序压缩的文件 (Windows 常用格式)
*.gz gzip 程序压缩的文件 (Linux 常用格式)
*.bz2 bzip2 程序压缩的文件 (比 gz 压缩比更高,处理时间更长)
*.xz xz 程序压缩的文件 (比 bz2 压缩比更高,处理时间更长)
*.tar tar 程序打包的数据,并没有压缩过 (把一个目录压缩成一个文件)
*.tar.gz tar 程序打包的文件,其中并且经过 gzip 的压缩
*.tar.bz2 tar 程序打包的文件,其中并且经过 bzip2 的压缩
*.tar.xz tar 程序打包的文件,其中并且经过 xz 的压缩

其中最常用的是 gzip,tar,zip,rar 四个程序
bzip2,xz 与 gzip 使用方法基本一致不再赘述

2.3.2 gzip 格式

gzip [-cdtv#] 归档名
选项与参数:
-c :将压缩的数据输出到屏幕上,可透过数据流重导向来处理;
-d :解压缩;
-t :可以用来检验一个压缩文件的一致性~看看文件有无错误;
-v :可以显示出原文件/压缩文件案的压缩比等信息;
-# : 为数字的意思,代表压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好!预设是 -6

gzip 命令会使得原本的文件消失,如果要保存原本的文件,可以使用-c 参数再重定向到文件即可

1
gzip -c file > file.gz

2.3.3 zip 格式和 rar 格式

这两个格式需要自行安装
参考网址:
zip 命令(一般从 linux 压缩文件传给 windows 用这个就行了)
unzip 命令
unrar 命令

实例:

1
2
zip -q -r html.zip /home/html
unzip -l html.zip

2.3.4 tar 格式

tar 命令用来把一个目录中的文件打包成一个文件
同时可以用参数指定压缩工具顺手把其压缩

选项与参数:
-c :压缩文件,可搭配 -v 来察看过程中被打包的档名(filename)
-t :查看压缩文件内部结构
-x :解压缩,可以搭配 -C (大写) 在特定目录解开
上述三条参数为功能选择参数,不能同时出现
-z :用 gzip 压缩归档文件,后缀最好设为.gz
-j :用 bzip2 压缩归档文件后缀最好设为.bz2
-J :用 xz 压缩归档文件,后缀最好设为.xz
上述三个参数是压缩方式选择,不能同时出现
-v :显示详细信息
-f filename:-f 后面要立刻接要被处理的档名!建议 -f 单独写一个选项
-C 目录:这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。
-p(小写) :保留备份数据的原本权限与属性,常用于备份(-c)重要的配置文件
-P(大写) :保留绝对路径,亦即允许备份数据中含有根目录存在之意;

三条最基本的操作:

1
2
3
tar -zcv -f filename.tar.gz 要被压缩的文件或目录名称
tar -zvt -f filename.tar.gz
tar -zxv -f filename.tar.gz -C 欲解压缩的目录

3. 命令行工具

3.1 显示工具

仅给出命令基本的用处,详细内容可以参考 man 手册或者找相关博客

指令 含义
echo 回显指令,把从输入读取到的信息输出到输出
grep 正则表达式工具,从给定输入中读取,输出表达式能匹配到的行信息
less 当要输出的内容较多时,可以使用 less 工具使其逐步输出(相同的工具还有 more,推荐使用 more)
pwd 输出当前工作目录名
diff 查看两个文件的不同
file 查看文件格式
find 在给定文件夹中查找给定文件
head 输出文件的起始部分
tail 输出文件的结尾部分
sort 对文本文件进行行排序
cut 使用给定分割字符分割给定的字符串
wc word counter,对给定字符串进行计数
uniq 报告或省略重复行
tee 双向重定向,把给定的输入流复制一份,一份流入给定文件,一份继续传递
tr 字符转换或字符删除
join 合并两个文件
paste 合并两个文件
expand 把 tab 替换为给定数量的空格
split 把给定的大文件切分成小文件
xargs 把读入的流转换为命令行参数传递

3.2 通配符

Linux 命令行中的通配符为一种弱化的正则语言
在命令行中的命令执行前,shell 会首先把所有的通配符展开(试图与当前工作目录中的所有文件进行匹配)
比如 rm ./* 会试图移除当前目录下的所有文件

通配符 含义
* 匹配 0 个到无穷多个任意字符
? 1 个任意字符(但不能为空字符)
[] 匹配[]中的任意一个字符一次
[a-b] 匹配 a 与 b 编码顺序内的任意字符一次
反向选择,匹配不在[]内的任意字符一次

3.3 重定向和管道

Linux 的命令行把每个命令(软件)的输入和输出看做是一种流
既然所有的输入输出都是流,则可以通过管道将其传递,或者改变其流动的方向

重定向

  1. 原本一个软件的输入是标准输入(命令行中的键盘输入),输出为标准输出(命令行回显)
  2. 覆盖重定向为覆盖原本内容(重定向到文件中则覆盖文件内容),符号为>
  3. 追加重定向会追加内容(重定向到文件后不会覆盖原文本内容),符号为>>
  4. 输入重定位符号<表示普通重定位,<<则表示后面跟的是定义的结束符
  5. 标准输入 (stdin) :代码为 0 ,使用 < 或 <<
  6. 标准输出 (stdout):代码为 1 ,使用 > 或 >>
  7. 标准错误输出(stderr):代码为 2 ,使用 2> 或 2>>
  8. /dev/null 为一个特殊设备,所有重定向到该设备的流都会被直接抛弃(相当于是一个垃圾桶)
  9. 可以把两个流合并:2>&1(把 stderr 合并到 stdout 中,其他同理)
  10. 需要注意的是,重定位符号的位置不影响效果

关于 4,例子如下:

1
2
3
4
5
6
# cat 指令如果没有指定文件,或者指定文件为“-”,则从标准输入读取
yishiyu@yishiyu-Lenovo:~/Code/test$ cat > catfile << "eof"
> this is a test
> OK now stop
> eof
yishiyu@yishiyu-Lenovo:~/Code/test$

管道

  1. 管道可以把一个程序的输出给另一个程序当做输入,即在两个命令之间用|连接:ls -al /etc | less
  2. 管线命令仅会处理 standard output,对于 standard error output 会予以忽略
  3. 管线命令必须要能够接受来自前一个指令的数据成为 standard input 继续处理才行
  4. stdin 与 stdout 可以利用减号 “-“ 来替代

3.4 指令的连续执行

  1. 单行指令拆分成多行

    如果一行写不下指令发生折叠,会影响视觉效果,可以通过”\”符号对指令进行分割,行之间无缝连接

    1
    2
    3
    4
    5
    6
    7
    8
    9
    yishiyu@yishiyu-Lenovo:~/Code/test$ echo \
    > the first line \
    > the second line \
    > > testfile
    yishiyu@yishiyu-Lenovo:~/Code/test$ ls
    testfile
    yishiyu@yishiyu-Lenovo:~/Code/test$ cat testfile
    the first line the second line
    yishiyu@yishiyu-Lenovo:~/Code/test$
  2. 按照一定逻辑连续执行指令

    • ;: 无条件执行, sync; sync; shutdown -h now
    • &&: 前一条指令成功, ls /tmp/abc && touch /tmp/abc/hehe
    • ||: 前一条指令失败, ls /tmp/abc \|\| mkdir /tmp/abc

4. 进程管理

4.1 进程的观察

静态观察

使用 ps 指令可以观察一个瞬间时所有进程的状态
ps 指令的 man 手册比较乱(因为要兼顾不同系统)
所以直接背两个固定的套路是比较不错的

  • 仅观察自己的 bash 相关进程: ps -l
列表项 含义
F flags,进程权限.4—root
S status,进程状态
UID/PID/PPID 进程 UID,PID,父进程 PID
C CPU 使用百分比
PRI/NI 执行优先级,越小优先级越高
ADDR/SZ/WCHAN 内存相关
TTY 终端位置
CMD 触发该进程的指令
  • 观察系统所有进程:ps aux
列表项 含义
USER 所属用户
PID 进程 ID
%CPU CPU 使用百分比
%MEM 物理内存使用百分比
VSZ 虚拟内存使用量
RSS 占用的固定内存量
TTY 终端位置
STAT 进程状态
START 启动时间
TIME 使用 CPU 的时间
COMMAND 触发该进程的指令

动态观察

top 可以持续不断地检测系统进程状态

top [-d 数字] | top [-bnp]
选项与参数:
-d:后面可以接秒数,就是整个进程画面更新的秒数。预设是 5 秒;
-b:以批次的方式执行 top ,通常会搭配数据流重导向来将批次的结果输出成为文件。
-n:与 -b 搭配,意义是,需要进行几次 top 的输出结果。
-p:指定某些个 PID 来进行观察
在 top 执行过程当中可以使用的按键指令:
? :显示在 top 当中可以输入的按键指令;
P :以 CPU 的使用资源排序显示;
M :以 Memory 的使用资源排序显示;
N :以 PID 来排序!
T :由该 Process 使用的 CPU 时间累积 (TIME+) 排序。
k :给予某个 PID 一个信号(signal)
r :给予某个 PID 重新制订一个 nice 值。
q :离开 top

4.2 进程的管理

可以通过向进程发送信号来实现对进程的管理

信号 含义
1 SIGHUP 启动被终止的进程,可让该 PID 重新读取自己的配置文件,类似重新启动
2 SIGINT 相当于用键盘输入 [ctrl]-c 来中断一个进程的进行
9 SIGKILL 代表强制中断一个进程的进行
15 SIGTERM 以正常的结束进程来终止该进程。如果进程异常(如卡死),则可能无法接收这个信号
19 SIGSTOP 相当于用键盘输入 [ctrl]-z 来暂停一个进程的进行
  1. kill 指令(向进程发送信号)

    kill -s Signal PID
    -s: 指定信号
    PID: 指定进程 PID
    例子:
    kill -9 4300
    强制终止 PID 为 4300 的进程

  2. killall 指令(指定名称发送信号)

    killall [-egiqvw] [-signal] name
    -e: 对于超过 15 个字符的名字,killall 命令默认是只匹配前 15 个字符,-e 要求强制全部匹配
    -g: 杀死属于改进承租的进程
    -i: 交互方式运行,在杀死进程之前需要交互式确认
    -l: 列出所有已知的信号名
    -q: 如果没有进程杀死,不会提出抱怨
    -v: 报告信号是否成功杀死
    -V: 显示版本信息
    -w: 确认所有被杀进程死去(未响应进程和僵尸进程可能会导致永久等待)

4.3 服务的管理

一种特殊的进程叫做 deamon 进程(后台守护进程),一般的服务都是以后台进程的方式实现的
对服务的管理一般通过 systemctl 这个命令完成

systemctl [command] [unit]
command 主要有:
start :立刻启动后面接的 unit
stop :立刻关闭后面接的 unit
restart :立刻关闭后启动后面接的 unit,亦即执行 stop 再 start 的意思
reload :不关闭后面接的 unit 的情况下,重载配置文件,让设定生效
enable :设定下次开机时,后面接的 unit 会被启动
disable :设定下次开机时,后面接的 unit 不会被启动
status :目前后面接的这个 unit 的状态,会列出有没有正在执行、开机预设执行否、登录等信息等!
is-active :目前有没有正在运作中
is-enable :开机时有没有预设要启用这个 unit

systemctl 还可以对系统上的服务进行观察

systemctl [command] [—type=TYPE] [—all]
command:
list-units:依据 unit 列出目前有启动的 unit。若加上 —all 才会列出没启动的。
list-unit-files :依据 /usr/lib/systemd/system/ 内的文件,将所有文件列表说明。
—type=TYPE:就是之前提到的 unit type,主要有 service, socket, target 等

关于系统服务的详细内容可以参照鸟哥的书,其中有关于系统服务结构的详细讲解(包括如何自定义服务)

5. 网络管理

5.1 网络基本命令

基本命令 含义
hostname 获取主机名称
ping 确认网络连接是否畅通
ifconfig 查询网卡信息(包括虚拟网卡)
telnet 试图与主机指定端口进行连接,确认服务是否正常运行
ssh 与指定主机进行 ssh 连接

netstat [选项]
参数列表:
-a: 列出所有端口信息
-l: 只列出监听端口信息
上述两个参数不可同时使用,默认是-a
-t: 列出 tcp 端口
-u: 列出 udp 端口
-x: 列出 unix 端口
上述三个参数可以同时使用,默认三个全有
-p: 列出进程名和 pid
-p 参数与 grep 同时使用可以查看占用端口的进程

wget 和 curl 都是网络下载器
其中 wget 更轻便,curl 功能更强大
一般使用 wget 就行了

wget 笔记:[wget 命令 | 竹子-博客-架构未来
]

5.2 网络防火墙设置

防火墙主要有两种工具:iptables 和 firewalld
其二者都仅是把规则整理后传给系统内核模块来执行,而不是其本身执行
这几种防火墙互相不冲突,但是必须所有防火墙都放行流量才能通过
所以只需要设置一种,把其他的几种关闭或者设置全部放行即可

同时如果使用阿里云服务器,还有一种防火墙方式:阿里防火墙组管理(感觉超级好用…其他云服务平台应该也有类似的)

iptables 比较旧,firewalld 比较新(鸟叔直接讲的 firewalld,没有提 iptables…)

所以直接略过 iptables(可以参照<<\Linux 就该这么学>>)

参考链接:
[Firewalld 详解 | 知乎]
[FirewallD 入门手册 | Linux 中国]

6. 系统管理

6.1 账号管理

用户管理

  1. 用户创建(会同时创建一个同名组)

    useradd [-u UID] [-g 初始群组] [-G 次要群组] [-mM] > [-c 说明栏] [-d 家目录绝对路径] [-s shell] 使用者账号名
    选项与参数:
    -u :后面接的是 UID ,是一组数字。直接指定一个特定的 UID 给这个账号;
    -g :后面接的那个组名就是我们上面提到的 initial group 啦~
    该群组的 GID 会被放置到 /etc/passwd 的第四个字段内。
    -G :后面接的组名则是这个账号还可以加入的群组。这个选项与参数会修改 /etc/group 内的相关资料喔!
    -M :强制!不要建立用户家目录!(系统账号默认值)
    -m :强制!要建立用户家目录!(一般账号默认值)
    -c :这个就是 /etc/passwd 的第五栏的说明内容啦~可以随便我们设定的啦~
    -d :指定某个目录成为家目录,而不要使用默认值。务必使用绝对路径!
    -r :建立一个系统的账号,这个账号的 UID 会有限制 (参考 /etc/login.defs)
    -s :后面接一个 shell ,若没有指定则预设是 /bin/bash 的啦~
    -e :后面接一个日期,格式为『YYYY-MM-DD』此项目可写入 shadow 第八字段,亦即账号失效日的设定项目啰;
    -f :后面接 shadow 的第七字段项目,指定密码是否会失效。
    0 为立刻失效,-1 为永远不失效(密码只会过期而强制于登入时重新设定而已。)

    创建新用户时系统的行为:
    在 /etc/passwd 里面建立一行与账号相关的数据,包括建立 UID/GID/家目录等;
    在 /etc/shadow 里面将此账号的密码相关参数填入,但是尚未有密码(手动设置密码后会有加密后的密码);
    在 /etc/group 里面加入一个与账号名称一模一样的组名;
    在 /home 底下建立一个与账号同名的目录作为用户家目录,且权限为 700

  2. 修改/设置密码

    普通用户可以修改自己的密码,root 用户可以在不知道用户密码时修改其密码
    passwd [—stdin] [账号名称]
    passwd [-l] [-u] [—stdin] [-S] [-n 日数] [-x 日数] [-w 日数] [-i 日期] 账号
    选项与参数:
    —stdin :可以透过来自前一个管线的数据,作为密码输入,对 shell script 有帮助!
    -l :是 Lock 的意思,会将 /etc/shadow 第二栏最前面加上 ! 使密码失效;
    -u :与 -l 相对,是 Unlock 的意思!
    -S :列出密码相关参数,亦即 shadow 文件内的大部分信息。
    -n :后面接天数,shadow 的第 4 字段,多久不可修改密码天数
    -x :后面接天数,shadow 的第 5 字段,多久内必须要更动密码
    -w :后面接天数,shadow 的第 6 字段,密码过期前的警告天数
    -i :后面接『日期』,shadow 的第 7 字段,密码失效日期

  3. 查看用户信息

    id [选项]… [用户]

  4. 修改用户信息

    usermod [-cdegGlsuLU] username
    选项与参数:
    -c :后面接账号的说明,即 /etc/passwd 第五栏的说明栏,可以加入一些账号的说明。
    -d :后面接账号的家目录,即修改 /etc/passwd 的第六栏;
    -e :后面接日期,格式是 YYYY-MM-DD 也就是在 /etc/shadow 内的第八个字段数据啦!
    -f :后面接天数,为 shadow 的第七字段。
    -g :后面接初始群组,修改 /etc/passwd 的第四个字段,亦即是 GID 的字段!
    -G :后面接次要群组,修改这个使用者能够支持的群组,修改的是 /etc/group 啰~
    -a :与 -G 合用,可『增加次要群组的支持』而非『设定』喔!
    -l :后面接账号名称。亦即是修改账号名称, /etc/passwd 的第一栏!
    -s :后面接 Shell 的实际文件,例如 /bin/bash 或 /bin/csh 等等。
    -u :后面接 UID 数字啦!即 /etc/passwd 第三栏的资料;
    -L :暂时将用户的密码冻结,让他无法登入。其实仅改 /etc/shadow 的密码栏。
    -U :将 /etc/shadow 密码栏的 ! 拿掉,解冻啦!

  5. 删除用户

    userdel [-r] username
    选项与参数:
    -r :连同用户的家目录也一起删除

为新用户添加 root 权限

需要注意的是,建立完用户后,用户默认是无法使用 root 权限的
在执行 sudo 命令的时候,Linux 会首先在/etc/sudoers 这个文件中查找当前用户是否拥有 root 权限

可以使用 sudo vim /etc/sudoers 也可以使用 sudo visudo 这个命令对配置文件进行修改

使用者账号 登入者的来源主机名=(可切换的身份) 可下达的指令
root ALL=(ALL) ALL
同时可以给一个组赋予权限,使得该组内所有用户都拥有该权限(%代表该名称为组)
%wheel ALL=(ALL) ALL
可以给该用户限定 sudo 执行的命令(必须用绝对路径表示)
user ALL=(root) !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root

su 和 sudo 命令

命令 含义
sudo super user do,命令前缀,使用 root 权限执行后续命令
su user switch user,切换至用户 user
su 切换至 root 用户模式,所有命令都使用 root 权限执行,exit 退出

默认情况下,只有 root 用户拥有管理员权限,其他用户无法使用 su 和 sudo 命令获取到管理员权限

需要注意的是 su 单独使用和 su user 只切换到目标用户身份,但不加载该用户的环境配置(即 nologin shell)
-和-l 两个参数(其实都是—login 的缩写)切换身份的同时加载该用户的环境配置(即 login shell)

组管理

  1. 添加组

    groupadd [-g gid] [-r] 组名
    选项与参数:
    -g :后面接某个特定的 GID ,用来直接给予某个 GID ~
    -r :建立系统群组啦!与 /etc/login.defs 内的 GID_MIN 有关。

  2. 修改组信息

    groupmod [-g gid] [-n group_name] 群组名
    选项与参数:
    -g :修改既有的 GID 数字;
    -n :修改既有的组名

  3. 删除组

    groupdel [groupname]

  4. 组管理

    gpasswd groupname: 设置组管理密码
    gpasswd [-A user1,…] groupname: 指定组管理员
    gpasswd [-ad] user groupname: 添加/删除组成员

6.2 资源管理

  1. 检测内存的使用情况

    free [-b|-k|-m|-g|-h] [-t] [-s N -c N]
    选项与参数:
    -b:直接输入 free 时,显示的单位是 Kbytes,可以让系统自己指定你单位(-h)
    也可以使用 b(bytes), m(Mbytes), k(Kbytes), g(Gbytes) 指定单位
    -t :在输出的最终结果,显示物理内存与 swap 的总量。
    -s :可以让系统每几秒钟输出一次,不间断的一直输出的意思!对于系统观察挺有效!
    -c :与 -s 同时处理~让 free 列出几次的意思~

  2. 查阅系统信息

    uname [-asrmpi]
    选项与参数:
    -a :所有系统相关的信息,包括底下的数据都会被列出来;
    -s :系统核心名称
    -r :核心的版本
    -m :本系统的硬件名称,例如 i686 或 x86_64 等;
    -p :CPU 的类型,与 -m 类似,只是显示的是 CPU 的类型!
    -i :硬件的平台 (ix86)

    也可以使用 screenfetch 命令
    其输出带发行版 logo 的系统信息(非常好看)

  3. 观察系统启动时间与工作负载

    uptime
    这个命令显示的和 top 命令最上面一行的内容是一样的

  4. 查看网络和 socket 文件

    netstat -[atunlp]
    选项与参数:
    -a :将目前系统上所有的联机、监听、Socket 数据都列出来
    -t :列出 tcp 网络封包的数据
    -u :列出 udp 网络封包的数据
    -n :不以进程的服务名称,以埠号 (port number) 来显示;
    -l :列出目前正在网络监听 (listen) 的服务;
    -p :列出该网络服务的进程 PID

  5. 分析核心信息

    dmesg

  6. 监测系统资源变化

    vmstat [-n] [延时[次数]]
    还有一些其他的参数,但是一般只用这个就够了

6.3 SELinux

SELinux 即 Security Enhanced Linux(安全附魔 Linux…)
主要是为系统安全服务的一个模块

原本一个进程访问一个资源仅看其是否有权限
在 SELinux 中附加条件为其是否需要该资源

暂时用不到,所以先不学(到时候也得忘)

参考链接:SELinux | 知乎
参考书籍:<<鸟哥的 Linux 私房菜-基础篇>>

7. 包管理系统(主 Debian 系)

包管理系统包括两个体系:

  1. Debian 系统的 apt 体系
  2. RedHat 系统的 yum 体系

7.1 apt 体系

7.1.1 概述

参考链接:
(有一说一嗷,csdn,博客园,简书相关博客抄袭实在严重,github pages 上的质量高多了)
APT 体系 | 维基百科
包管理系统 | 知乎

APT 体系全称是 Advanced Packaging Tools(高级包管理工具)
其底层是 dpkg(Debian package,Debian 包管理工具)

dpkg 的包结构为.deb 格式,dpkg 可以直接通过.deb 文件安装软件
APT 体系为基于 dpkg 的包管理系统,其通过网络安装源来安装软件
dpkg 不会主动处理依赖关系,APT 体系会自动处理软件包间的依赖关系.

APT 体系主要由三个命令组成,提供基于 dpkg 的高级命令工具集合

命令 功能
apt-get 控制包安装卸载等
apt-cache 用于查询 APT 缓存(通过 apt-get update 更新)
apt-file (维基百科上有这个,但是 man apt-file 找不到相关手册…)

现在推出了一个 apt 命令,但是感觉还是 apt-get 好用一点
Linux 中国在知乎上的文章对 apt 的描述是显示彩色的进度条(笑死我了哈哈哈哈)

7.1.2 命令总结

  • 安装软件
命令 功能
sudo apt-get install \ 安装新的软件
sudo apt-get upgrade 更新已安装的所有软件
  • 卸载软件
命令 功能
sudo apt-get remove \ 卸载软件,但是保存配置文件
sudo apt-get -purge remove \ 卸载软件并清除配置文件
sudo apt-get autoremove 自动删除不需要的包
  • 搜索软件
命令 功能
sudo apt-cache search \ 在 APT 系统缓存中搜索软件信息
sudo apt-cache show \ 已经确定了包的名字,显示缓存中的相关信息
sudo apt-get update 从已配置的软件源拉取信息,以更新 APT 信息缓存
sudo apt-cache policy \ 已经确定了包的名字,显示其安装信息
  • dpkg 命令

dpkg 命令为底层命令,可以安装本地 deb 包

命令 功能
dpkg -i package.deb 安装包
dpkg -r package 删除包
dpkg -P package 删除包(包括配置文件)
dpkg -L package 列出与该包关联的文件
dpkg -l package 显示该包的版本
dpkg —unpack package.deb 解开 deb 包的内容
dpkg -S keyword 搜索所属的包内容
dpkg -l 列出当前已安装的包
dpkg -c package.deb 列出 deb 包的内容
dpkg —configure package 配置包
dpkg -s package 显示该包的信息
  • apt 命令
命令 功能
apt list 根据名称列出软件包
apt search 搜索软件包描述
apt show 显示软件包细节
apt install 安装软件包
apt remove 移除软件包
apt autoremove 卸载所有自动安装且不再使用的软件包
apt update 更新可用软件包列表
apt upgrade 通过 安装/升级 软件来更新系统
apt full-upgrade 通过 卸载/安装/升级 来更新系统
apt edit-sources 编辑软件源信息文件

7.1.3 镜像源管理

参考链接:
Debian 软件包管理 | 简书

APT 体系的镜像源(即 apt-get 等命令获取软件的服务器)有两种

  1. 官方维护的软件源(国内的各种镜像源与其内容相同,仅提高了速度)
  2. Ubuntu 母公司 Canonical 架设的 PPA(Personal Package Archives,个人软件档案)

其中官方维护的软件源质量有保证,PPA 源由个人建立,可靠性上可能有一定的缺失.

官方软件源(及各种镜像源)地址存放在/etc/apt/source.list 文件中

软件源的格式通常是 4 部分:

[archive type] [repository URL] [distribution] [component]

  1. archive type 有两种,deb 表示二进制软件包,deb-src 表示源代码软件包.
  2. repository URL 表示仓库地址,国内镜像站通常是’https://mirrors.xxx.xxx/debian
    (如果是 ubuntu,就替换 debian)
  3. distribution 表示发行版本的代号,如 Debian 9 是 stretch,Ubuntu 17.04 是 zesty
    (来自完整的版本号 Zesty Zapus)
  4. component 通常有 main、contrib 和 non-free 三类,可以有多个,空格分隔
    (Ubuntu 中是 main、restricted、universe 和 multiverse)
  5. distribution 中可能会使用 stable 而不是特定的版本号
    还会有相关的后缀-updates、-proposed-updates、-backports、-security 等.

PPA 源可以通过命令进行管理

命令 功能
sudo add-apt-repository ppa:\/\ 添加一条 PPA 源
sudo apt-get update 刷新 APT 缓存,获取 PPA 源中的信息
sudo add-apt-repository -r ppa:\/\ 移除一个 PPA 源

添加 PPA 源相当于在/etc/source.list.d/下创建 list 文件
也相当于在/etc/apt/source.list 中添加对应的源地址(当然不是命令中那种格式)
删除的时候也可以直接进入/etc/apt/source.list.d/文件夹中删除相对应的文件
最后,add-apt-repository 依赖 python-software-properties 这个工具包
如果提示没有找到该命令,可以先用 apt-get 安装这个工具包

7.2 yum 体系

7.2.1 概述

yum 体系源自 redhat 系统,与 debian 的 dpkg 类似:
dpkg — rpm ==> 本地包管理系统
apt — yum ==> 在线包管理系统
.dep — .rpm ==> 软件包格式

yum==Yellow dog Updater, Modified (可真是够奇怪的…)
rpm==The RPM Package Manager(真就套娃呗…)

参考链接:
yum 的用法
虽然 Ubuntu 本身没 yum(也不适合用 yum 安装东西)
但是可以通过 docker 运行一个 centos 镜像来体验一下 yum

1
sudo docker run -it centos

7.2.2 命令总结

  • 安装软件
命令 功能
sudo yum install \ 安装新的软件
sudo yum update 更新已安装的所有软件
sudo yum insatll \.rpm 从本地包安装(类似 dpkg -i)
  • 卸载软件
命令 功能
sudo yum remove \ 卸载软件
  • 搜索软件
命令 功能
sudo yum search \ 在 yum 系统缓存中搜索软件信息
sudo yum all search \ 搜索内容扩大至软件描述
sudo yum check-update 从已配置的软件源拉取信息,以更新 yum 信息缓存
sudo yum info \ 已经确定了包的名字,显示其信息
sudo yum deplist \ 列出包的依赖关系
sudo yum list \ 列出给定包的信息(如果没有 package 参数,列出所有)

同 APT 体系的 dpkg 一样,yum 体系也有底层的 rpm 工具,但是其用的比较少
(毕竟 yum 能直接处理本地包)

7.2.3 镜像源管理

yum 的镜像源文件为/etc/yum.repos.d/CentOS-Base.repo
与 apt 类似,就不再写了(懒.jpg)
换国内源的办法可以自行搜索

yum 用的比较少,先写这么多,以后用到了再看