Linux学习笔记(一): Linux 基础知识
- 概述
- 文件系统
- 命令行工具
- 进程管理
- 网络管理
- 系统管理
- 包管理系统(主 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 的权限系统比较复杂:
- Linux 把目录也看做一种文件
- Linux 把所有用户分为三类:
文件创建者 user—u
与创建者同组的用户 group—g
其他用户 others—o- 每个文件对不同类型的用户的权限分开管理,互不影响
- 每个文件的权限包括三种:
读取权限 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 | zip -q -r html.zip /home/html |
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 | tar -zcv -f filename.tar.gz 要被压缩的文件或目录名称 |
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 的命令行把每个命令(软件)的输入和输出看做是一种流
既然所有的输入输出都是流,则可以通过管道将其传递,或者改变其流动的方向
重定向
- 原本一个软件的输入是标准输入(命令行中的键盘输入),输出为标准输出(命令行回显)
- 覆盖重定向为覆盖原本内容(重定向到文件中则覆盖文件内容),符号为>
- 追加重定向会追加内容(重定向到文件后不会覆盖原文本内容),符号为>>
- 输入重定位符号<表示普通重定位,<<则表示后面跟的是定义的结束符
- 标准输入 (stdin) :代码为 0 ,使用 < 或 <<
- 标准输出 (stdout):代码为 1 ,使用 > 或 >>
- 标准错误输出(stderr):代码为 2 ,使用 2> 或 2>>
- /dev/null 为一个特殊设备,所有重定向到该设备的流都会被直接抛弃(相当于是一个垃圾桶)
- 可以把两个流合并:2>&1(把 stderr 合并到 stdout 中,其他同理)
- 需要注意的是,重定位符号的位置不影响效果
关于 4,例子如下:
1 | # cat 指令如果没有指定文件,或者指定文件为“-”,则从标准输入读取 |
管道
- 管道可以把一个程序的输出给另一个程序当做输入,即在两个命令之间用|连接:ls -al /etc | less
- 管线命令仅会处理 standard output,对于 standard error output 会予以忽略
- 管线命令必须要能够接受来自前一个指令的数据成为 standard input 继续处理才行
- stdin 与 stdout 可以利用减号 “-“ 来替代
3.4 指令的连续执行
单行指令拆分成多行
如果一行写不下指令发生折叠,会影响视觉效果,可以通过”\”符号对指令进行分割,行之间无缝连接
1
2
3
4
5
6
7
8
9yishiyu@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$按照一定逻辑连续执行指令
;
: 无条件执行,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 来暂停一个进程的进行 |
kill 指令(向进程发送信号)
kill -s Signal PID
-s: 指定信号
PID: 指定进程 PID
例子:
kill -9 4300
强制终止 PID 为 4300 的进程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 账号管理
用户管理
用户创建(会同时创建一个同名组)
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修改/设置密码
普通用户可以修改自己的密码,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 字段,密码失效日期查看用户信息
id [选项]… [用户]
修改用户信息
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 密码栏的 ! 拿掉,解冻啦!删除用户
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)
组管理
添加组
groupadd [-g gid] [-r] 组名
选项与参数:
-g :后面接某个特定的 GID ,用来直接给予某个 GID ~
-r :建立系统群组啦!与 /etc/login.defs 内的 GID_MIN 有关。修改组信息
groupmod [-g gid] [-n group_name] 群组名
选项与参数:
-g :修改既有的 GID 数字;
-n :修改既有的组名删除组
groupdel [groupname]
组管理
gpasswd groupname: 设置组管理密码
gpasswd [-A user1,…] groupname: 指定组管理员
gpasswd [-ad] user groupname: 添加/删除组成员
6.2 资源管理
检测内存的使用情况
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 列出几次的意思~查阅系统信息
uname [-asrmpi]
选项与参数:
-a :所有系统相关的信息,包括底下的数据都会被列出来;
-s :系统核心名称
-r :核心的版本
-m :本系统的硬件名称,例如 i686 或 x86_64 等;
-p :CPU 的类型,与 -m 类似,只是显示的是 CPU 的类型!
-i :硬件的平台 (ix86)也可以使用 screenfetch 命令
其输出带发行版 logo 的系统信息(非常好看)观察系统启动时间与工作负载
uptime
这个命令显示的和 top 命令最上面一行的内容是一样的查看网络和 socket 文件
netstat -[atunlp]
选项与参数:
-a :将目前系统上所有的联机、监听、Socket 数据都列出来
-t :列出 tcp 网络封包的数据
-u :列出 udp 网络封包的数据
-n :不以进程的服务名称,以埠号 (port number) 来显示;
-l :列出目前正在网络监听 (listen) 的服务;
-p :列出该网络服务的进程 PID分析核心信息
dmesg
监测系统资源变化
vmstat [-n] [延时[次数]]
还有一些其他的参数,但是一般只用这个就够了
6.3 SELinux
SELinux 即 Security Enhanced Linux(安全附魔 Linux…)
主要是为系统安全服务的一个模块
原本一个进程访问一个资源仅看其是否有权限
在 SELinux 中附加条件为其是否需要该资源
暂时用不到,所以先不学(到时候也得忘)
参考链接:SELinux | 知乎
参考书籍:<<鸟哥的 Linux 私房菜-基础篇>>
7. 包管理系统(主 Debian 系)
包管理系统包括两个体系:
- Debian 系统的 apt 体系
- 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 等命令获取软件的服务器)有两种
- 官方维护的软件源(国内的各种镜像源与其内容相同,仅提高了速度)
- Ubuntu 母公司 Canonical 架设的 PPA(Personal Package Archives,个人软件档案)
其中官方维护的软件源质量有保证,PPA 源由个人建立,可靠性上可能有一定的缺失.
官方软件源(及各种镜像源)地址存放在/etc/apt/source.list 文件中
软件源的格式通常是 4 部分:
[archive type] [repository URL] [distribution] [component]
- archive type 有两种,deb 表示二进制软件包,deb-src 表示源代码软件包.
- repository URL 表示仓库地址,国内镜像站通常是’https://mirrors.xxx.xxx/debian‘
(如果是 ubuntu,就替换 debian)- distribution 表示发行版本的代号,如 Debian 9 是 stretch,Ubuntu 17.04 是 zesty
(来自完整的版本号 Zesty Zapus)- component 通常有 main、contrib 和 non-free 三类,可以有多个,空格分隔
(Ubuntu 中是 main、restricted、universe 和 multiverse)- 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 \ |
从本地包安装(类似 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 用的比较少,先写这么多,以后用到了再看