Linux系统与网络管理
0. 背景
0.1 Unix
Unix诞生于1969年
特点
- 多任务
- 多用户
- 多平台
- 保护模式
- 可移植操作系统接口(POSIX)
0.2 Linux
与Unix关系
类Unix系统,完全按照Unix的思想设计的
历史
诞生于1991年,创始人Linus
两大分支
BSD unix
unix System V
0.3 GPL规则
- GPL允许软件自由传播,修改,但不能修改后以一定的权限许可来出售
- GPL允许个人和组织为盈利而传播GPL软件
- 使用该软件的源代码时,必须保证在新的软件中保证源代码可以被免费使用
- 出售自由软件的的组织需要遵循一定的GPL规则:
①不能限制购买软件的用户自由权
②必须告诉用户软件属于GPL范畴
③必须提供软件完整的源代码
1. 基础知识
1.1 Shell
系统用户界面,是用户和内核交互的一种接口。解释命令给内核。
shell也有一套自己的语言。
shell快捷键
CTRL+<选项>:
- h:删除前一个字符
- u:删除整行
- c:中断当前命令
- d:结束输入(在shell会使用户注销)
此外:
- 上下键盘:上下光标,查看上一个或下一个命令
- tab:命令补全
- q:大部分程序退出命令
1.2 退出命令
1.2.1 注销
exit
或者loglout
只是切断前台,后台继续执行任务。
eg:发出shutdown命令后使用exit,用户退出后依旧会关机
1.2.2 关闭系统
shutdown [options] [time] [message]
选项[options]
options | 含义 |
---|---|
-r | 关机后重启 |
-h | 关机后停机 |
-k | 只发送警告,不关机 |
选项[time]
格式 | 用法 | 备注 | 例子 |
---|---|---|---|
时间串 | hhmm/小时分钟 | 默认24h制,若使用12小时制需要后面加入am/pm 特别的时间串: NOON(12:00) MIDNIGHT(0:00) TEATIME(16:00) NOW(现在,一般省略不写) |
1130表示11:30 |
日期串 | MMDDYY/月日年 | TODAY TOMORROW 月可以使用前三个首字母 星期可以使用英文缩写 |
|
偏移量 | +<数目><时间单位> | 时间单位默认为minute | +1week |
注意:在rh8,turbo Linux7之后的版本只有两种方法:
- 标准的hh:mm格式
- 偏移量:+n ,n的单位只能是分钟
- 超过15分钟关机警告无提示
shutdown相似命令
halt
:等价于shutdown -h now
reboot
:等价于shutdown -r now
1.3 其他命令
1.3.1 passwd
格式:passwd [用户名]
root用户才可执行
1.3.2 date
-
date [opion]
date默认显示当前位置时间
eg:data -u 显示格林威治时间 -
date [时间格式]
时间格式:MMDDhhmm[[CC]YY][.ss]
月日时分[[年份前两位]年份后两位][秒](括号内是可以省略的)
eg:date 0903123312
2012年9月3日12点33分
1.3.3 cal
cal [option] [月] [年]
查看日历
选项
- -y:显示整年日历
- -j:从该年1.1开始到今日作为日期的Julian式日历
年需要使用完整格式
1.3.4 logname/whoami
logname
:当前登录系统的用户的名字whoami
:当前用户登录的身份who/w
:当前登录的所有用户
logname和whoami区别
假设有以下三种情况
①:普通的登录(区别于以下的两种情况),只登陆root/普通用户
此时两者一致
②:假设现在已经登录普通用户gx,使用su命令切换到root
③假设现在登录了root,使用su登录到gx
总而言之,whoami
显示当前使用的用户角色,logname
显示最早登录的用户角色
1.3.5 write
write username [终端号]
向同一系统的用户进行通讯
mesg [选项]
设置是否屏蔽消息
-y为开启,-n为关闭。root无视屏蔽
who -w
查看用户信息屏蔽情况
1.3.6 uname
uname [选项]
查看主机信息
-a 所有信息
-n 系统名(计算机在网络中的节点名)
-s 操作系统的名字
-r 操作系统的版本号
-v 操作系统的版本信息
-m 机器的硬件
-p 处理器类型
1.3.7 man
帮助命令
使用man
进入man page
1.4 文件系统简介
1.4.1 ext2和ext3
ext3相比ext2加了日志
ext4相比ext3修改了重要的数据结构,提供更佳的性能和可靠性
1.4.2 XFS
高性能,架构和扩展性
缺点:不能缩小,删除大量文件会下降性能
XFS和ext4区别
-
单个文件大小:
ext4是16GB~16TB
XFS是16TB~16EB -
最大文件系统大小
ext4可以是1EB
XFS可以是8EB -
可扩展性
ext4不如XFS
1.4.3 Linux目录
/etc:系统配置文件目录
/var:含系统变化信息
/home:本地用户目录
/bin:可执行文件目录
/lib:系统共享库开发库
/sbin:系统执行程序
文件名格式
- 文件名不可使用特殊字符(符 !@#$%^&*()[]{}’ ”/;<> 空格)
- 不规定扩展名
- 用.开头的为隐藏文件
绝对路径和相对路径
绝对路径:固定从根目录开始的路径
相对路径:从当前目录开始的路径
目录捷径
.表示当前目录
..表示上一级目录
设当前目录为/home/gx
..表示/home
../lyq表示/home/lyq
./abc表示/home/gx/abc
1.4.4 有关文件的操作命令
ls cd pwd cp
ls
ls [option]
选项 | 含义 |
---|---|
-l | 长格式完全属性列表 |
-a | 列出包含隐藏文件的所有文件 |
-C/x | 按列输出,纵向/横向排序 |
-F | 标记文件类型 |
-R | 递归列出所有子目录 |
-t | 按照时间排序 |
-d | 只列出目录,不列出自身 |
i | 查看inode |
cd pwd cp
cd [路径]
变换目录
pwd
显示当前路径
cp -t 文件名 目的地
eg:cp 1.txt /home/a
复制文件
eg:cp -r ttt /home
复制目录
mv/rm
mv [option] source dest
eg:mv 1.txt /home/abc/2
将1.txt移动到/home/abc下并重命名为2
eg:mv * /home/abc
将当前目录下所有文件移动到/home/abc下
eg:mv abc net03
把目录abc改名成net03
rm [option] file
删除文件
选项:
-r :删除目录
-f :强制删除
eg:rm /home/g*
删除以g开头的文件
eg:rm -f /home/*
删除home下所有文件
eg:rm -rf /home
无需提示立刻删除
mkdir/rmdir
mkdir
建立目录
rmdir
删除空目录
ln
ln [options] file target
ln用于给文件多个名字,可以使用不同名字引用同一文件
- 硬连接:
ln file targetfile
源文件和目标文件需要在同一个文件系统
源文件和目标文件引用同一个inode(索引节点)和盘上相同的数据 - 符号连接:
ln -s file target
目标文件指向源文件的路径和名字而不是数据。
目标文件会指向一个新的inode,不同于源文件的inode
ls -i
在列表中包含索引节点号inode
ls -lL
查看原始连接属性
例题
1.5 用户,组和文件
每个用户都有一个UID(User ID)和GID(Group ID),通过/etc/passwd修改UID和GID。判断文件权限是通过识别用户UID和GID实现的,与当前组的名字无关
可以使用id
查看用户和组的值
1.5.1 文件属性
第一位
d | 目录 |
---|---|
- | 文件 |
l | 连接文件 |
b | 可供存储的设备 |
c | 外围设备,如鼠标 |
其他九位三三一组,为权限字
- 2~4 文件拥有者属性
- 5~7 文件所属组的属性
- 8~10 其他人对此文件的属性
1.5.2 文件保护标志
权限 | 含义 | 允许 |
---|---|---|
r | 可读 | 访问和复制 |
w | 可写 | 更新和删除 |
x | 可执行 | 执行程序 |
1.5.3 目录保护标志
权限 | 含义 | 允许 |
---|---|---|
r | 列表 | 列出内容,还不能进入目录 |
rx | 查找 | 定位和对文件操作 |
w | 可写 | 在目录中增删改查 |
tip:如果没有x权限,即使拥有w权限也无法访问
1.5.4 例题
假设mike用户试图删除/home/mike目录下一个文件1.txt目录mike和1.txt的属性分别是如下几种情况,问他是否能删
除该文件?
A)mike是目录的所有者,并且目录有写权限(由d和w表示),所以mike可以删除1.txt文件。
B)虽然mike不是目录的所有者,但是该目录对所有用户都开放了写权限(由最后的rwx表示),所以mike可以删除1.txt文件。
C)mike是目录的所有者,并且目录有写权限,但是1.txt文件的所有者是root,不过这并不影响删除操作,所以mike仍然可以删除1.txt文件。
1.5.5 修改权限
chown 用户 文件
改变文件的拥有权
改变用户和组,使用chown 用户.组 文件
chrgp 组 文件
改变组拥有权chmod 模式 文件
改变文件访问权限
如果是目录 使用 -R
会递归处理所有文件
文字设定法
chmod 用户类别[+=-][标志][,第二个权限] 文件
用户类别 | u用户 g组 o其他 a所有 |
---|---|
+=- | = 设置保护 注意:一旦设置会覆盖之前的权限 + 添加保护 - 删除保护 |
标志 | r 读 w 写 x 执行 |
文件 | 支持通配符 |
其他标志
X | 只有目标文件对某些用户是可执行的或该目标文件是目录时才追加x 属 |
---|---|
s | 在文件执行时把进程的属主或组ID置为该文件的文件属主。方式“u+s”设置文件的用户ID位,“g+s”设置组ID位。(设置文件suid或sgid) |
t | 保存程序到交换设备上 |
u | 与文件主属性有相同的权限 |
g | 与和文件属主同组的用户拥有一样的权限 |
o | 和其他用户有相同的权限 |
文字设定法举例
-
chmod ug+w,o-x text
设置text属性为:主用户和同组用户增加写权限,其他用户删除执行权限 -
chmod og=rx *
当前目录所有文件:同组用户和其他可以进行读和执行权限,覆盖之前的权限 -
chmod u+s a.out
假设执行后 a.out权限为
设另外一个文件1.c,其权限为–rw-------,属主为mike。当另一个用户gx执行此文件a.out,他的身份会暂时变成mike,则可以运行1.c文件
使用s命令,当用户使用该文件时其身份会暂时变更和文件主属一致。
数字设定法
数字 | 属性 |
---|---|
0 | 无权限 |
1 | 可执行 |
2 | 可写 |
4 | 可读 |
确定权限后将其相加,数字属性格式是从0~7,顺序为u g o
设置suid和sgid:suid前面加4,sgid前面加2
举例
-
chmod 644 mm.txt
-rw-r--r-- -
chmod 750 wch.txt
-rwxr-x--- -
chmod 4544 1.txt
-r-sr--r-- -
chmod 2755 1.txt
-rwxr-s-rx -
chmod 6751 1.txt
-rwsr-s--x -
chmod 4644 1.txt
-rwSr--r--
由于该用户组没有x权限,所以这段是没有意义的,大写S也代表着无效
1.6 文件备份和压缩
1.6.1 tar
tar [option] 文件/目录
option | 意义 |
---|---|
c | 创建一个档案 |
x | 从档案解开文件 |
v | 显示详细信息 |
f | 指定操作的tar文件名 |
t | 浏览档案内容 |
-N/--newer 'date' | 备份指定日期后变化的文件 |
工具命令
选项 | 工具 | 扩展名 | 备注 |
---|---|---|---|
z | 用gzip压缩 | .gz | gzip [] 文件 -d 解压缩 -c 标准输出 |
Z | 用compress压缩 | .Z | 最传统的压缩工具 |
j | 用bzip | .bz2 | 压缩比最高的工具 |
1.6.2 举例
-
tar cvf /dev/ftape /home
将home压缩到该文件内 -
tar zcvf home.tar.gz /home
备份文件名为home.tar.gz -
tar -N ‘2012-09-10’ -cvf home.20120910.tar /home
对/home目录进行增量备份,备份2012年9月10日以来变化的文件,备份文件名为home.20120910.tar
2 vi编辑器
目前使用的vi实际上是vim(Vi Improved)
2.1 常用命令
vi file
以普通方式打开文件
view file
以只读打开文件
2.2 三种模式
- 命令模式:进入vi默认模式,可以输入命令和移动光标
- 插入模式:输入文本
- ex模式:输入扩展命令
2.3 光标移动命令
2.3.1 按字符移动
2.3.2 按行移动
0 | 移动至行首 |
---|---|
$ | 移动至行尾 |
nG | 移动到第n行 |
G | 移动最后一行 |
2.3.3 按单词移动
b | 移动到词首 |
---|---|
e | 移动到词尾 |
w | 移动到下一词词首 |
2.4 删除
x | 删除光标下字符 |
---|---|
X | 删除光标前字符 |
dd | 删除整行 |
dw | 删除到下一词首 |
d[n] | 删除指定行 |
2.5 查找与替换
2.5.1 查找
/string | 从当前光标位置向下查询 |
---|---|
?string | 向上查询 |
2.5.2 替换
:n,ms/oldstring/newstring/g
从n到m行,将所有的oldstring都替换为newstring
2.6 其他命令
:w | 保存 |
---|---|
:w! | 强制保存 |
:wq | 保存退出 |
:wq! | 保存强制退出 |
:q | 退出 |
:q! | 强制退出 |
3 Linux安装与启动
3.1 安装中虚拟控制台
ALT+F1 | 安装主程序窗口 |
---|---|
ALT+F2 | Shell环境(第二阶段) |
ALT+F3 | 调试信息 |
ALT+F4 | 系统核心信息 |
ALT+F5 | mke2s的输出信息 |
tips:只有文本安装时才可以调换,GUI模式不可以
3.2 硬盘
3.2.1 硬盘代号
Linux最多有4个primary分区,所以第一个extend分出来的logical分区为/dev/hda5
硬盘安装点 | Linux代号 |
---|---|
第一个IDE的Master | hda |
第一个IDE的Slave | hdb |
第二个IDE的Master | hdc |
第二个IDE的Slave | hdd |
sata
若bios为兼容模式,第一个sata硬盘代号为hde
若为非兼容,第一个为sda
SCSI
第一个SCSI硬盘为sda
3.2.2 硬盘分区
分区 | 大小 |
---|---|
/boot | 不小于64M(r8.3最低200M) |
/swap | 内存的2~3倍 |
/var | 存储日志,多留空间。若为邮件服务器,需要独立分区 |
/usr | 作为开发平台需要多预留空间 |
/home | 需要多人使用就独立分区 |
3.3 运行级别
运行级别是在/etc/inittab系统操作的不同模式。本质是过滤器,有所选择的选取进程运行
4 Shell编程
4.1 变量
字符串赋值
h=哈哈 h="哈哈" h='哈哈'
三者都可以赋值
变量引用
hhh是变量名,$hhh是变量的值
显示变量的值:echo $hhh
设置全局变量:export hhh
4.1.1 PATH变量
和windows的相似(实际上就是win模仿的Linux),在shell中使用命令时,会首先查找PATH路径的可执行程序。
默认PATH为;
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
type和which命令
type
:会告知命令是内建还是外部的,如果是外部还会得知完整路径which
:只会查找外部的命令
修改PATH
PATH=$PATH:新的路径
4.2 提示符
bash有两层提示符,主提示符是等待命令输入时的提示符。缺省提示符是$,超级用户是#
4.2.1 PS1变量
-
PS1='$PWD>'
把当前路径作为提示符
-
PS1='\d>'
把当前日期作为提示符
-
PS1=\t>
把当前时间作为提示符
4.3 环境文件
-
/etc/profile
和/etc/bashrc
系统变量,由管理员维护 -
$HOME/.bash_profile
用户可修改 -
$HOME/.bashrc
由ENV定义,bash的特征
profile和bashrc区别
bashrc只在启动系统被读取一次
bashrc在系统启动时,或shell调用时都会被读取
4.4 更换目录快捷方式
HOME | 主目录(用户目录) |
---|---|
PWD | 当前目录 |
OLDPWD | 先前工作目录 |
4.5 扩展通配符
查询,匹配的字符,在数据库也经常用到
* | 匹配任意字符(包含0) |
---|---|
? | 匹配任意1个字符 |
[list] | 匹配其中之一的字符 |
[!list] | 匹配不在其中的字符 |
tips:
- []只会匹配一个字符
- 不可使用汉字做字符串(汉字俩字符)
- 定义一个范围,可以使用- ,例如[1-4]则是匹配1,2,3,4任意一个
4.6 shell别名/自定义命令
alias defineName=‘cmd’
4.7 输入输出流
流 | 作用 | 默认指向 | 编号 |
---|---|---|---|
stdin | 标准输入 | 键盘输入 | 0 |
stdout | 标准输出 | 终端屏幕 | 1 |
stderr | 标准错误输出 | 终端屏幕 | 2 |
4.7.1 重定向
和C++的流的重定向类似
-
stdout重定向
>file
这个符号用于将命令的输出重定向到一个文件。如果文件已经存在,它会被覆盖。例如,ls > file.txt
会将ls
命令的输出保存到file.txt
文件中。(还可以使用1>file) -
stdin重定向
< file
这个符号用于将文件的内容作为命令的输入。例如,sort < file.txt
会将file.txt
文件的内容作为sort命令的输入。 -
stderr重定向
2>file
这个符号用于将命令的错误输出重定向到一个文件。例如,ls /nonexistent 2> error.txt
会将错误信息保存到error.txt
文件中。 -
stdout和stderr重定向
&>
这个符号用于将命令的标准输出和错误输出都重定向到一个文件。例如,ls /nonexistent &> output.txt
会将所有输出(包括错误信息)保存到output.txt
文件中。(重定向是从左至右使用的) -
stdout/stderr追加重定向
>>file
这个符号也用于将命令的输出重定向到一个文件。但是,如果文件已经存在,新的输出会被追加到文件的末尾,而不是覆盖它。例如,ls >> file.txt
会将ls
命令的输出追加到file.txt
文件的末尾。(stderr为2>>file
)
4.7.2 管道
管道和重定向作用类似,但原理不同
管道如名字,命令的输出对准下一个命令的输入
eg:ls|less
此命令将ls的输出作为less的输入
可以多次连接
tips:
- 命令不知道输入输出是连接一起的
- 同步运行
- 不可操控标准错误输出流
- 可以多次连接
4.8 shell 脚本
shell类似于win的批处理文件
执行脚本
chmod +x file
sh file
. file
4.8.1 编写脚本
第一行
指定哪一种shell脚本解释shell程序
#! /bin/bash
或#! /bin/csh
还是#!/bin/tcsh
注解
用#开头的,表示注释
4.8.2 特殊参数
-
命令行参数
$1-$9
eg:假设这么运行脚本./myscript.sh arg1 arg2 arg3
其中,arg1等为变量
。那么在脚本内部
$1
将表示第一个参数,即arg1
$2
将表示第二个参数,即arg2
$3
将表示第三个参数,即arg3
$0
为保留段,$0
实则是脚本本身,可以使用超过$9
的参数。使用方法为{$11}
,{$12}
-
$#
传参数量 -
$@
表示所有的位置参数,作为一个列表 -
$$
当前shell的PID -
$?
上一个命令的返回状态
4.8.3 read 语句
类似于c++的std::cin
,接收标准输入并且赋予给变量,可以赋值给多个变量,中间用空格分隔
read $a $b $c
赋值给a,b,c三个变量
tips:
- 如果参数多于变量数,多余的参数合并起来赋予给最后一个变量
- 如果参数小于变量,则给多余的变量赋予空字符串
4.8.4 test语句
test
常用作判断,可判断字符,数值,文件三类,如果为真返回1,为假返回0。
test 判断句
num1=10
num2=20
if test $num1 -lt $num2; then
echo "$num1 is less than $num2"
fi
输出$num1 is less than $num2
-lt表示"less than"(小于)
4.8.5 expr语句
计算算术运算符
将其返回为标准输出
$ expr 4+5
9
$
tips:在*和/之前需要用反斜线,防止被解释
4.8.6 exit 结束脚本,可以带返回值
4.8.7 判断句
if [ 条件判断一 ] && (||) [ 条件判断二 ];
then 执行命令的语句序列1
elif [条件判断三] && (||) [ 条件判断四 ];
then 执行命令的语句序列2
else 执行命令的语句序列3
fi
4.8.8 循环
for ….do….done
while….do….done
until….do….done
4.8.9 shell脚本几个例子
下载系统
#!/bin/bash
if [$1 -eq -d]
then
wget 链接
else
wget 链接
fi
文件压缩系统
5 RPM管理文件
5.1 安装 -i
rpm -i/--install [options] file.rpm
可以使用wget
命令来下载rpm文件
5.1.1 options
-
-v
显示附加信息 -
-h/--hash
输出50个hash记号,可以在安装中,使用hash符号显示安装百分比 -
--nodeps
不检查依赖性 -
--replacepkgs
强制重新安装已经安装的安装包 -
replacefiles
替换属于其他软件包文件
5.2 卸载 -e
rpm -e/--erase [options] pkg
选项
--nodeps
: 不检查依赖性
5.3 升级 -U
rpm -U/--upgrade [options] file.rpm
5.3.1 选项
-
-v
显示附加信息 -
-h/--hash
输出50个hash记号,可以在安装中,使用hash符号显示安装百分比 -
--nodeps
不检查依赖性 -
--replacepkgs
强制重新安装已经安装的安装包 -
replacefiles
替换属于其他软件包文件
5.4 查询 -q
rpm -q/--query option pkg
5.4.1 选项
- -f:file
查询file属于哪个软件包 - -i
显示软件包的概要信息 - -l
显示软件包的文件列表 - -p
查询软件包的文件
5.5 验证 -V
rpm -V/--verify options pkg1
5.5.1 选项
- -f
验证特定文件 - -a
验证所有安装文件包 - -p
Package_file
验证package——file所属的软件包
5.5.2 验证后输出
. | 测试通过 |
---|---|
5 | MD5属性已经改变 |
S | 文件大小发生变化 |
L | 链接属性改变 |
T | 创建时间改变 |
D | 设备名称改变 |
U | 文件所有者改变 |
G | 所属组改变 |
M | 访问许可访问类型等文件属性改变 |
5.6 YUM
6 Linux GUI
远程X
host:display_number.screen_number
-
host
可以省略,表示本地系统
服务器端主机的名字和IP地址 -
display_number
设备ID号,一般为0 -
screen_number
屏幕ID号
两种办法远程X
-
软件名 -display ipaddress:screen_number
eg:xeyes -display 192.168.1.3:0
-
设置DISPLAY变量
DISPLAY=192.168.1.3:0 xeyes
DISPLAY=192.168.1.3:0
export DISPLAY
xeyes
安全控制
xhost +
允许任何人访问
xghost -
限制访问
在限制访问下:
xghost +主机名/IP
xghost -主机名/IP
7 用户管理
7.1 用户
用户名存储在/etc/passwd
密码/口令存储在/etc/shadow
工作环境包括:
- 用户家目录
用户登录后存在的目录,存放用户个人配置,在/etc/passwd
中设定 - 用户使用的shell
/etc/passwd
- 用户脚本
在用户家目录中,从/etc/skel
进行复制 - 登录欢迎信息
存放在/etc/motd
文件中
7.2 用户的数据库
7.2.1 /etc/passwd
用户可读,只有root可写
文件的每一行用于描述一个账号,按照以下格式
用户名:口令:UID:GID:注释信息:家目录:shell
7.2.2 /etc/shadow
口令从passwd分离到shadow内,减少字典攻击的可能性
shadow只有超级用户有权限
存储:
- 用户名
- 口令(加密)
- 从1970.1.1开始计算,修改口令已经多少天
- 需要多少天后才能修改口令
- 多少天后口令会被破解
- 多少天后向用户发出修改口令的警告
- 多少天后禁用用户
- 1970.1.1后,账号会被禁用
- 保留字段
- 每个用户占用一行
7.3 用户/组的增删改查
7.3.1 useradd
useradd [option] 用户名
增加用户,一般不使用选项etc/defaults/useradd内文件补充缺省值
useradd -D [选项]
已有用户修改属性
u uid | 指定uid |
---|---|
g group | 指定组 |
c comment | 注释用户 |
-d home | 用户家目录 |
-m | 不在自动创建家目录 |
-k skel | 指定用户模版,默认/etc/skel |
-s shell | 指定shell |
-e date | 账号停用日期 YYYY-MM-DD |
-f day | 账号多日后停权 |
7.3.2 usermod
修改用户属性 用法同上
usermod -G 组1,组2--- 用户名
编辑组成员
7.3.3 chage
chage [] 用户名
更改口令期限 一般为交互选项
7.3.4 userdel
userdel [-r] 用户名
删除一个用户,-r可以清楚用户的家目录
7.3.5 groupadd
groupadd -g gid
增加组的gid
7.3.6 groupdel
groupdel gid
7.3.7 gpasswd
gpasswd -a user 组名// 添加用户到指定组
gpasswd -d user 组名//指定组删除用户
7.3.8 groupmod
groupmod -g gid 组名 //修改组的gid
groupmod -n 组名 新组名 //修改组名
7.4 umask
umask是通过8进制数666减去后所描述的权限,默认
为022,即缺省权限为644。
n系统的umask在系统环境文件设置,用户可以用户环境
文件重新设置
8 进程管理
8.1进程和线程
进程:一个程序在数据集合上的一次执行。一个进程被分成三大部分:代码段、数据段和PCB(进程控制块)
线程:通过调度和分派合理利用资源实现多任务
8.1.1 区别
- 进程拥有资源,线程共享进程拥有的资源
- 进程间切换必须保存PCB,同进程不需要。
8.2 PCB
- 进程ID(PID)
- 父进程(PPID)
- 实际用户和组ID(UID和GID)
- 有效用户和组ID(EUID和EGID)
- 进程状态
- 信号状态
8.2.1 PID
PID是跟踪进程的唯一整形数
- 按次序分配
- 最大为32767
- 达到最大从1开始继续按次循环
8.2.2 PPID
父进程的PID。
每个进程都有一个唯一的进程 ID(PID),并且每个进程都知道其父进程的 ID,即 PPID。这种机制允许进程跟踪其创建者或父进程。
8.2.3 uid euid
uid:登录id
suid:有效id
使用su切换用户时,uid才和euid不同
8.2.4 ps 查看进程
选项
-e/-A | 显示所有进程 |
---|---|
-f | 全格式 |
a | 显示现在包括其它用户的所有程序 |
u | 以用户为主的格式显示程序状况 |
x | 显示所有程序,不以终端机区分 |
-H/f | 树状结构显示程序相互关系 |
-l | 长格式 |
e | 列出程序的环境变量 |
c | 显示每个程序的真正指令 |
最常见的参数组合是ps -ef和ps aux。对于一个系统管理员,掌握ps aux尤为重要,通过aux组合参数可以检查出进程的故障。ps -ef是用于了解当前进程的基本情况,对于处理系统故障用处不大
8.2.5 top
动态显示进程状态
8.2.6 nice/renice
niceness 静态优先级
以niceness为基础,CPU再根据实际情况分配资源(即内置动态优先级)。niceness越小,优先级更高
nice
运行一个程序并且改变优先级
nice [option] 运行程序命令
默认状态 niceness增加10
-n
值为-20~19.可以指定n
renice
改变运行中程序的niceness值
renice n [[-p]pid]
n为-20~19
8.2.7 jobs 查看后台运行任务
使用&
在命令后结束会使其在后台运行
8.2.8 fg
将后台任务至前台
只有一个后台任务可以直接fg
若有多个,则
8.2.9 bg
前台到后台
%任务号 &
或%命令名 &
ctrl-z挂起,再bg
也可以
8.2.10 nohup
当用户退出shell,后台进程也会终止。若不想终止后台,可以使用:
nohup ls -LR /&
输出到nohup.out
8.2.11 kill
信号
内核和进程之间通讯通过信号实现,如终止进程发送信号等。
有两种信号:
SIGSTOP
和SIGKILL
,是超级用户停止,杀死进程的后门
kill -l
获取所有信号名
kill -s 信号名/编号/信号名字去掉SIG
发出信号
killall 程序名
9 磁盘控制
9.1对目录的访问控制
9.2 粘滞位
使用粘滞位创建的文件说明用户是唯一可以删除他的用户
标识为t(最后一位),例如
drwxrwxrwt
9.2.1 设置
chmod +t 目录名
chmod 1777 目录名
大写T代表没有执行权限,但是又设置了t权限
9.3 文件系统
9.3.1 df(disk free)
检查文件磁盘占用情况。查看磁盘占用多少空间,还剩下多少空间。
- -k 以k字节显示
- -m 以m字节为显示
- T 文件系统类型
- t fstype 指定文件的分区报告
9.3.2 mkfs
在磁盘/分区上创建(格式化)文件系统。
mkfs [-V] [-t 文件系统类型] [fs-options] filesys[blocks]
- -V 显示详细模式
- -t 给定文件系统类型,默认为ext2
- -c 检查该分区是否坏轨
- filesys:硬盘名
- blocks:逻辑块大小
关于逻辑块:默认1024byte,逻辑块越大性能越好,但是磁盘空间越小
9.3.3 mount
挂载指定的文件系统
mount [选项] [设备名] [挂载点]
- -a 加载/etc/fstab中所有设备
使用mount时,fstab就会记录相关内容,也就是说mount加载设备的记录都在fstab内
umount就是卸载
9.4 Samba
实现Linux和windows设备和驱动的共享
9.4.1 SMB接口的监控进程
- smbd:SMB的监控进程
- nmbd:给客户机提供NetBIOS名字服务支持
10 调度与备份
10.1 调度
调度就是处理一堆任务时,预先或者是一次性发出任务的请求,相当于把所有命令组合到一起。
Linux实现调度方法是使用cron和at系统
10.2 cron
cron由:
- 守护进程(crond)
- 用户的配置文件(crontab)
组成
cron作用是记录系统状态日志,启动备份,轮换日志文件和开始允许系统清理脚本
10.2.1 cron的守护进程
-
cron由守护进程提供,叫crond/cron,由版本决定
-
crond在crond初始化只检查crontab文件,可以使用
crontab
命令更改文件,并且热更新到crond -
cron可以配置为运行或拒绝特定用户的调度事件
-
cron有一个调度池(spool),相当于crontab的容器,每个用户都有一个专属的文件。
/var/spool/cron
-
区别于上点,也有一个全局的crontab(
/etc/crontab
)。两者语法不同 -
以邮件形式发送给用户
crontab
-
crontab告诉cron,用户什么时候运行什么程序
-
crontab由两种类型条目:环境变量定义和事件
-
环境变量告诉cron,事件启动的环境和环境变量
是为了方便程序顺利执行而设置
为了特定目的而设置
crontab条目
-
crond每分钟自检,匹配则执行对应脚本
-
5个时间域,minute和weekday是逻辑或关系,其余时间都是逻辑与关系。(时间域与的关系需要全匹配,或仅需匹配其中一个)
-
使用
*
来表示匹配任意值。用-
表示范围,,
分割列表。使用\数字
表示表示数字的倍数。*\5
表示5的倍数
*crontab命令*
crontab [-u user] file
crontab [-u user] {-l|-r|-e}
- -u user指定用户,默认为当前用户,指定file到crontab表
- -i 列出crontab文件
- -r 删除crontab文件
- -e 编辑crontab文件
10.3 at/batch
10.3.1 与cron区别
at只执行一次,cron可重复执行