centos下载地址:centos6.8centos7
书籍推荐: 鸟哥的linux私房菜-第四版


linux各目录的作用

目录名 目录作用
/bin/ 存放系统命令的目录,普通用户和超级用户都可以执行。不过放在/bin下的命令在单用户模式下也可以执行。
/sbin/ 保存和系统环境设置相关的命令,只有超级用户可以使用这些命令进行系统环境设置,但是有些命令可以允许普通用户查看。
/usr/bin/ 存放系统命令的目录,普通用户和超级用户都可以执行。这些命令和系统启动无关,在单用户模式下不能执行。
/usr/sbin/ 存放根文件系统不必要的系统管理命令,例如多数服务程序。只有超级用户可以使用。大家其实可以注意到Linux的系统,在所有sbin目录中保存的命令只有超级用户可以使用,bin目录中保存的命令所有用户都可以使用。
/boot/ 系统启动目录,保存系统启动相关的文件,如内核文件和启动引导程序(grub)文件等。
/dev/ 设备文件保存位置,Linux中所有内容以文件形式保存,包括硬件。这个目录是用来保存所有硬件设备文件的。
/etc/ 配置文件保存位置。系统内所有采用默认安装方式(rpm安装)的服务的配置文件全部都保存在这个目录当中,如用户账户和密码,服务的启动脚本,常用服务的配置文件等。
/home/ 普通用户的家目录。建立每个用户时,每个用户要有一个默认登录位置,这个位置就是这个用户的家目录,所有普通用户的家目录就是在/home下建立一个和用户名相同的目录。如用户user1的家目录就是/home/user1
/lib/ 系统调用的函数库保存位置。
/lost+found/ 当系统意外崩溃或机器意外关机,而产生一些文件碎片放在这里。当系统启动的过程中fsck工具会检查这里,并修复已经损坏的文件系统。这个目录只在每个分区中出现,例如/lost+found就是根分区的备份恢复目录,/boot/lost+found就是/boot分区的备份恢复目录。
/media/ 挂载目录。系统建议是用来挂载媒体设备的,例如软盘和光盘。
/mnt/ 挂载目录,早期 Linux中只有这一个挂载目录,并没有细分。现在这个目录系统建议挂载额外设备,如U盘,移动硬盘和其他操作系统的分区。
/misc/ 挂载目录。系统建议用来挂载NFS服务的共享目录。我们在刚刚已经解释了挂载,童鞋们应该知道只要是一个已经建立的空目录就可以作为挂载点。那么系统虽然准备了三个默认挂载目录/media、/mnt、/misc,但是到底在哪个目录中挂载什么设备都可以由管理员自己决定。例如老哥接触 Linux的时候,默认挂载目录只有/mnt一个,所以养成了在/mnt下建立不同目录挂载不同设备的习惯。如/mnt/cdrom挂载光盘,/mnt/usb挂载U盘,这都是可以的。
/opt/ 第三方安装的软件保存位置。这个目录就是放置和安装其他软件的位置,手工安装的源码包软件都可以安装到这个目录当中。不过还是更加习惯把软件放置到/usr/local/目录当中,也就是说/usr/local/目录也可以用来安装软件。
/proc/ 虚拟文件系统,该目录中的数据并不保存到硬盘当中,而是保存到内存当中。主要保存系统的内核,进程,外部设备状态和网络状态灯。如/proc/cpuinfo是保存CPU信息的, /proc/devices是保存设备驱动的列表的,/proc/filesystems是保存文件系统列表的, /proc/net是保存网络协议信息的。
/sys/ 虚拟文件系统。和/proc目录相似,都是保存在内存当中的,主要是保存于内核相关信息的。
/root/ 超级用户的家目录。普通用户家目录在/home下,超级用户家目录直接在/下。
/srv/ 服务数据目录。一些系统服务启动之后,可以在这个目录中保存所需要的数据。
/tmp/ 临时目录。系统存放临时文件的目录,该目录下所有用户都可以访问和写入。建议此目录中不能保存重要数据,最好每次开机都把该目录清空。
/usr/ 系统软件资源目录。注意usr不是user的缩写,而是Unix Softwre Resource的缩写,所以不是存放用户数据,而是存放系统软件资源的目录。系统中安装的软件大多数保存在这里。
/var/ 动态数据保存位置。主要保存缓存、日志以及软件运行所产生的文件。

服务器注意事项

  1. 远程服务器不允许关机,只能重启。
  2. 重启时应该关闭服务。
  3. 不要在服务器访问高峰运行高负载命令。
  4. 远程配置防火墙时不要把自己踢出服务器。
  5. 指定合理的密码规范并定期更新。
  6. 合理分配权限。
  7. 定期备份重要数据和日志。

命令格式

命令格式: 命令 [-选项] [参数] 例如: ls -la /etc

说明:

  1. 个别命令使用不遵循此格式
  2. 当有多个选项时,可以写在一起
  3. 简化选项与完整选项 -a 等于 –all

tab tab接在一串命令的第一个字段后面,则为【命令补全】。tab接在一串命令的第二个字段后面,则为【文件补全】。

ctrl+c 中断目前程序。

ctrl+d键盘输入结束,相当于exit

shift + page up向上翻页。

shift + page down向下翻页。

常用命令

rm

指令名称 语法 功能描述
rm rm -rf [文件或目录] 删除文件
-r 删除目录
-f 强制执行
[root@192 ~]# rm grub.conf               # 删除文件,会有提示,按y确认删除
rm:是否删除普通文件 "grub.conf"?y
[root@192 ~]# rm /root/test # 删除目录需要加 -r
rm: 无法删除"/root/test": 是一个目录
[root@192 ~]# rm -r /root/test # 目录下有多个目录时,会有多个提示
rm:是否进入目录"/root/test"? y
rm:是否删除目录 "/root/test/test02"?y
rm:是否删除目录 "/root/test/test01"?y
rm:是否删除目录 "/root/test"?y
[root@192 ~]# rm -f grub.conf # 强制删除文件,无提示
[root@192 ~]# rm -rf /root/you # 强制删除目录,无提示

cp

指令名称 语法 功能描述
cp cp -rp [原文件或目录] [目标目录] 复制文件或目录
-r 复制目录
-p 保留文件或属性
[root@192 /]# cp -r /tmp/test/test2 /root                            # 复制test2目录到/root目录下
[root@192 /]# cp /root/install.log /root/install.log.syslog /tmp # 同时复制2个文件到/tmp目录下
[root@192 /]# ls -l /root/install.log # 原目录时间是 12月 2 05:31
-rw-r--r--. 1 root root 46478 122 05:31 /root/install.log
[root@192 /]# ls -l /tmp/install.log # 新目录的时间是 12月 3 10:17 可以发现时间是当前时间,时间有变化
-rw-r--r--. 1 root root 46478 123 10:17 /tmp/install.log
[root@192 /]# cp -p /root/install.log /tmp # -p 保留原文件属性
[root@192 /]# ls -l /root/install.log # 原目录时间是 12月 2 05:31
-rw-r--r--. 1 root root 46478 122 05:31 /root/install.log
[root@192 /]# ls -l /tmp/install.log # 新目录时间是 12月 2 05:31 与原目录一致
-rw-r--r--. 1 root root 46478 122 05:31 /tmp/install.log
[root@192 /]# cp -r /tmp/test/test2 /root/mi # 复制的同时改名字

mv

指令名称 语法 功能描述
mv mv [原文件与目录] [目标目录] 剪切文件、改名
[root@192 /]# mv /tmp/test/test2 /root          # 移动(剪切)目录 test2 到 /root目录下
[root@192 /]# mv /tmp/test/test2 /root/shen # 移动目录的同时改名
[root@192 ~]# mv test test2 # 在同一个目录下移动就是改名,把test改为test2

ls

指令名称 语法 功能描述
ls ls 选项[-ald] [文件或目录] 显示目录文件
-a 显示所有文件,包括隐藏文件
-l 详细信息显示
-d 查看目录属性
-h 显示文件大小
-i 显示节点信息
[root@192 ~]# ls /         # 列出根目录文件
[root@192 ~]# ls # 不带任何参数运行 ls 命令将列出当前工作目录的内容
[root@192 ~]# ls -a # 显示所有文件,包括隐藏文件,隐藏文件是以点 . 开头的文件
[root@192 ~]# ls -l # 打印输出的每一个文件的详细信息,例如文件权限、链接数、所有者名称和组所有者、文件大小、最后修改的时间和文件/目录名称
-rw-------. 1 root root 1455 122 05:31 anaconda-ks.cfg
-rw-r--r--. 1 root root 46478 122 05:31 install.log
[root@192 ~]# ls -lh # -h 显示文件大小信息
-rw-------. 1 root root 1.5K 122 05:31 anaconda-ks.cfg
-rw-r--r--. 1 root root 46K 122 05:31 install.log
[root@localhost ~]# ls -l /tmp/yum.log # 列出yum.log文件的详细信息
-rw-------. 1 root root 0 823 06:31 /tmp/yum.log
[root@192 ~]# ls -ld /etc # -d 查看目录信息
drwxr-xr-x. 118 root root 12288 123 07:35 /etc
[root@192 ~]# ls -i # 显示节点信息
803911 anaconda-ks.cfg 786436 install.log.syslog 803987 模板 803991 图片 803986 下载 803985 桌面
786435 install.log 803988 公共的 803992 视频 803989 文档 803990 音乐

mkdir

指令名称 语法 功能描述
mkdir mkdir -p [目录名] 创建新目录
-p 递归创建
[root@192 ~]# mkdir /tmp/mysql            # 创建目录mysql
[root@192 ~]# mkdir /tmp/mysql/sbin # 创建目录mysql和sbin,创建多级目录需要加 -p
mkdir: 无法创建目录"/tmp/mysql/sbin": 没有那个文件或目录
[root@192 ~]# mkdir -p /tmp/mysql/sbin # -p 递归创建目录
[root@192 ~]# mkdir -p /tmp/nginx/sbin /tmp/oracle/sbin # 同时创建多个目录

cd

指令名称 语法 功能描述
cd cd [目录名] 切换目录
[root@192 ~]# cd /tmp/mysql/sbin   # 切换到指定目录
[root@192 test3]# cd /tmp/ # 切换到tmp目录
[root@192 tmp]# cd .. # 回到上一级目录
[root@192 tmp]# cd . # 一个点还是当前目录

pwd

指令名称 功能描述
pwd 显示当前目录
[root@192 ~]# pwd
/root

rmdir

指令名称 语法 功能描述
rmdir rmdir [目录名] 删除空目录
[root@192 /]# rmdir /tmp/mysql/sbin     # 删除空目录sbin
[root@192 /]# rmdir /tmp # 不能删除非空目录
rmdir: 删除 "/tmp" 失败: 目录非空

touch

指令名称 语法 功能描述
touch touch [文件名] 创建空文件
[root@192 tmp]# touch test.txt          # 没有加路径时表示在当前目录下操作
[root@192 tmp]# touch /tmp/test2.txt # 创建空文件test2.txt
[root@192 tmp]# touch program files # 当文件名带空格时,实际是创建了2个文件program和files
[root@192 tmp]# touch "program files" # 当文件名带空格时,用双引号引用起来【不建议文件名带空格】

cat

指令名称 语法 功能描述
cat cat [文件名] 显示文件内容
-n 显示行号
[root@192 ~]# clear              # 清屏 【ctrl+l】 也可以清屏
[root@192 tmp]# cat /etc/issue # 查看文件内容
CentOS release 6.8 (Final)
Kernel \r on an \m

[root@localhost tmp]# cat -n /etc/issue # 显示行号
1 CentOS release 6.8 (Final)
2 Kernel \r on an \m
3

tac

指令名称 语法 功能描述
tac tac [文件名] 显示文件内容(反向显示)
[root@localhost tmp]# tac /etc/issue  # 反向查看

Kernel \r on an \m
CentOS release 6.8 (Final)

more

指令名称 语法 功能描述
more more [文件名] 分页显示文件内容
  • (空格)或f翻页
  • Enter换行
  • q或Q退出
  • 回车键一行一行翻
  • 一页一页翻
[root@192 tmp]# more /etc/services

less

指令名称 语法 功能描述
less less [文件名] 分页显示文件内容
  • (空格)或f翻页
  • Enter换行
  • q或Q退出
  • page up上翻
  • page down下翻
  • / 搜索此时按
  • n 可以往下找
[root@192 tmp]# less /etc/services
指令名称 语法 功能描述
head head [文件名] 显示文件前面几行
-n 指定行数
[root@192 tmp]# head -n 7 /etc/services   # 显示前7行
[root@192 tmp]# head /etc/services # 不指定 -n 时 默认前10行

tail

指令名称 语法 功能描述
tail tail [文件名] 显示文件后面几行
-n 指定行数
-f 动态显示文件末尾内容

默认动态显示末尾10行,并没有回到命令行,常用来查看日志文件

[root@192 tmp]# tail -f /var/log/messages

链接命令

ln

指令名称 语法 功能描述
ln ln -s [原文件] [目标文件] 生成链接文件
-s 创建软链接

软连接特征:类似windows快捷方式

  1. lrwxrwxrwx , l开头软链接, 3个rwx ,软链接权限不决定原文件权限,实际由原文件权限决定
  2. 文件很小,只是符号链接
  3. 箭头指向原文件

硬链接特征:

  1. 拷贝 cp -p +同步更新
  2. 通过 i 节点识别
  3. 不能跨分区
  4. 不能针对目录使用
[root@192 ~]# ln -s /etc/issue /tmp/issue.soft     # 创建软链接 issue.soft 
[root@192 ~]# ln /etc/issue /tmp/issue.hard # 创建硬链接 issue.hard
[root@192 ~]# ls -l /etc/issue
-rw-r--r--. 2 root root 47 519 2016 /etc/issue
[root@192 ~]# ls -l /tmp/issue.soft # 软链接 箭头指向原文件
lrwxrwxrwx. 1 root root 10 124 07:18 /tmp/issue.soft -> /etc/issue
[root@192 ~]# ls -l /tmp/issue.hard # 硬链接与原文件一样,原文件与硬链接文件同步更新
-rw-r--r--. 2 root root 47 519 2016 /tmp/issue.hard
[root@192 ~]# cat /etc/issue # 查看原文件(一共3行)
CentOS release 6.8 (Final)
Kernel \r on an \m

[root@192 ~]# echo "www.abc.com" >> /etc/issue # 对原文件写入一行
[root@192 ~]# cat /etc/issue # 原文件变为4行
CentOS release 6.8 (Final)
Kernel \r on an \m

www.abc.com
[root@192 ~]# cat /tmp/issue.hard # 硬链接文件也变为4行(硬链接文件与原文件同步更新)
CentOS release 6.8 (Final)
Kernel \r on an \m

www.abc.com
[root@192 ~]# cat /tmp/issue.soft # 软链接此时也更新,因为软链接最后是找的原文件,打开原文件内容
CentOS release 6.8 (Final)
Kernel \r on an \m

www.abc.com
[root@192 ~]# cp /etc/issue /tmp/issue.bank # 先备份一下
[root@192 ~]# rm /etc/issue # 删除原文件
rm:是否删除普通文件 "/etc/issue"?y
[root@192 ~]# cat /tmp/issue.soft # 原文件被删除,软链接自然也没有了
cat: /tmp/issue.soft: 没有那个文件或目录
[root@192 ~]# cat /tmp/issue.hard # 原文件被删除,硬链接还在
CentOS release 6.8 (Final)
Kernel \r on an \m

www.abc.com
[root@192 ~]# ls -l /tmp/issue.soft # 原文件被删除,查看软链接时,原文件变成红色/etc/issue会一直闪
lrwxrwxrwx. 1 root root 10 124 07:18 /tmp/issue.soft -> /etc/issue
[root@192 ~]# cd /tmp
[root@192 tmp]# ln issue.bank issue.bank.hard # 创建硬链接
[root@192 tmp]# ln -s issue.bank issue.bank.soft # 创建软链接
[root@192 tmp]# ls -i issue.bank issue.bank.hard issue.bank.soft # 此时发现原文件的i节点和硬链接的i节点一样,原文件的i节点和软链接的i节点不一样,说明硬链接通过i链接识别
787926 issue.bank 787926 issue.bank.hard 787927 issue.bank.soft
[root@192 tmp]# ln /tmp/issue.bank /boot/issue.bank.hard # 这里说明硬链接不能跨分区
ln: 创建硬链接"/boot/issue.bank.hard" => "/tmp/issue.bank": 无效的跨设备连接
[root@192 tmp]# ln -s /tmp/issue.bank /boot/issue.bank.soft # 这里说明软链接可以跨分区
[root@192 ~]# ln /tmp /root/tmp.hard # 这里说明硬链接不能针对目录操作
ln: "/tmp": 不允许将硬链接指向目录
[root@192 ~]# ln -s /tmp /root/tmp.soft # 这里说明软链接可以针对目录操作

权限管理命令

chmod

指令名称 语法 功能描述
chmod chmod [{ugoa}{+-=}{rwx}] [文件或目录] 改变文件或目录权限
-R 递归修改

数字类型改变文件权限

r:4 w:2 x:1 数字累加

chmod 777 test.txt ==>[-rwxrwxrwx] owner = rwx = 4+2+1 = 7 , group = rwx = 4+2+1 = 7, other = 4+2+1 = 7
chmod 770 test.txt ==>[-rwxrwx—] owner = rwx = 4+2+1 = 7 , group = rwx = 4+2+1 = 7, other = 0+0+0 = 0
chmod 664 test.txt ==>[-rw-rw-r–] owner = rwx = 4+2+0 = 6 , group = rwx = 4+2+0 = 6, other = 4+0+0 = 4
chmod 644 test.txt ==>[-rw-r–r–] owner = rwx = 4+2+0 = 6 , group = rwx = 4+0+0 = 4, other = 0+0+0 = 0
chmod 754 test.txt ==>[-rwxr-xr–] owner = rwx = 4+2+1 = 7 , group = rwx = 4+0+1 = 5, other = 4+0+0 = 4

符号类型改变文件权限

u = user 拥有者
g = group 用户组
o = other 其他人
a = all 全部

+ 加入

-移除

=设置

chmod u=rwx,go=rx test.txt ==>[-rwxr-xr-x]
chmod u=rwx,g=rx,o=r text.txt ==>[-rwxr-xr–]
chmod a+w text.txt ==>则[-rwxr-xr-x] 变为 [-rwxrwxrwx]
chmod a-x text.txt ==>则[-rwxr-xr-x] 变为 [-rw-rw-rw-]

文件目录权限总结:

代表字符 权限 对文件的含义 对目录的含义
r 读权限 可以查看文件内容 可以列出目录中的内容
w 写权限 可以修改文件内容 可以在目录中创建、删除文件
x 执行权限 可以执行文件 可以进入目录
[root@192 tmp]# ls -l lovestory.list
-rw-r--r--. 1 root root 0 123 10:57 Japanlovestory.list
[root@192 tmp]# chmod u+x lovestory.list # 给所有者添加执行权限
[root@192 tmp]# ls -l lovestory.list
-rwxr--r--. 1 root root 0 123 10:57 lovestory.list
[root@192 tmp]# chmod g+w,o-r lovestory.list # 同时给用户组添加写权限并删除其他人读的权限
[root@192 tmp]# ls -l lovestory.list
-rwxrw----. 1 root root 0 123 10:57 lovestory.list
[root@192 tmp]# chmod g=rwx lovestory.list # 给用户组添加读、写、执行的权限,不用考虑以前的权限是什么
[root@192 tmp]# ls -l lovestory.list
-rwxrwx---. 1 root root 0 123 10:57 lovestory.list
[root@192 tmp]# chmod 640 lovestory.list # 6=r+w,4=r,0
[root@192 tmp]# ls -l lovestory.list
-rw-r-----. 1 root root 0 123 10:57 lovestory.list
[root@192 tmp]# mkdir -p /tmp/a/b # 同时创建a和b两个目录
[root@192 tmp]# chmod -R 777 /tmp/a # -R 递归修改,把a目录下的所有目录都改为 rwxrwxrwx 权限
[root@192 tmp]# ls -ld /tmp/a
drwxrwxrwx. 3 root root 4096 124 11:36 /tmp/a # a目录是 rwxrwxrwx 权限po
[root@192 tmp]# ls -ld /tmp/a/b
drwxrwxrwx. 2 root root 4096 124 11:36 /tmp/a/b # b目录也是 rwxrwxrwx 权限

chown

指令名称 语法 功能描述
chown chown [用户] [文件或目录] 改变文件或目录的所有者
[root@localhost tmp]# touch test.log     # 创建文件
[root@localhost tmp]# useradd liming # 添加用户liming
[root@localhost tmp]# chown liming test.log # 改变文件所有者为liming这个用户
[root@localhost tmp]# ls -l test.log
-rw-r--r--. 1 liming root 0 824 02:41 test.log

chgrp

指令名称 语法 功能描述
chgrp chgrp [用户组] [文件或目录] 改变文件或目录的所属组
[root@localhost tmp]# groupadd lambrother        # 创建用户组
[root@localhost tmp]# chgrp lambrother test.log # 改变文件所属组
[root@localhost tmp]# ls -l test.log
-rw-r--r--. 1 liming lambrother 0 824 02:41 test.log

umask

指令名称 语法 功能描述
umask umask [-S] 显示、设置文件的缺省权限
-S 以rwx形式显示新建文件缺省权限

0022 默认访问权限
0特殊权限
022 — -w- -w-

777 rwx rwx rwx
022 — -w- -w- 逻辑与(减法)

755 rwx r-x r-x 目录
rw- r– r– 文件 (文件默认没有x权限)


umask 077

777 rwx rwx rwx
077 — rwx rwx 逻辑与(减法)

700 rwx — — 目录
rw- — — 文件

[root@192 tmp]# umask -S                          # 默认权限为 755
u=rwx,g=rx,o=rx
[root@192 tmp]# mkdir lamp # 创建目录
[root@192 tmp]# ls -ld lamp
drwxr-xr-x. 2 root root 4096 Dec 7 08:46 lamp # rwxr-xr-x
[root@192 tmp]# touch fanbingbing # 创建文件
[root@192 tmp]# ls -ld fanbingbing
-rw-r--r--. 1 root root 0 Dec 7 08:47 fanbingbing # rw-r--r-- 相比 rwxr-xr-x 缺少 x 权限,因为默认创建的文件不具有可执行权限
[root@192 tmp]# umask # 默认权限为 022
0022
[root@192 tmp]# umask 077 # 设置默认权限为077
[root@192 tmp]# touch ab # 创建文件
[root@192 tmp]# ls -ld ab # 777-077 逻辑与得到 700 rwx------ 由于文件不具有x权限 最终得到 rw-------
-rw-------. 1 root root 0 Dec 7 09:19 ab
[root@192 tmp]# mkdir bv # 创建目录
[root@192 tmp]# ls -ld bv # 777-077 逻辑与得到 700 rwx------
drwx------. 2 root root 4096 Dec 7 09:19 bv
[root@192 tmp]# umask -S
u=rwx,g=,o=

文件搜索命令

find

指令名称 语法 功能描述
find find [搜索范围] [匹配条件] 文件搜索

find /etc -name init
find / size +204800 在根目录下查找大于100MB的文件 +n大于 -n小于 n等于
find /home -user shenchao 在根目录下查询所有者为shencaho的文件 -group 根据所属组查找
find /etc -cname -5 在/etc 下查找5分钟内被修改过属性的文件和目录 【-amin 访问时间access】、【-cname 文件属性change】、【-mmin 文件内容modify】
find /etc -size +163840 -a -size -204800 在etc下查找大于80MB小于100MB的文件
-a 两个条件同时满足 -o 两个条件满足任意一个即可
find /etc -name inittab -exec ls -l {} ; 在/etc下查找inittab文件并显示其详细信息
-exec/-ok命令 {};对搜索结果执行操作
-type 根据文件类型查找 f文件,d目录,l软链接文件
-inum 根据i节点查找

[root@192 tmp]# find /etc -name init         # 在目录/etc中查找文件init , -name参数搜索文件名【精准搜索】
[root@192 tmp]# find /etc -iname init # 在目录/etc中查找文件init , -iname不区分大小写【精准搜索】
[root@192 tmp]# find /etc -name *init* # 在目录/etc中查找文件init,通配符 * 匹配任意字符【模糊搜索】
[root@192 tmp]# find /etc -name init* # 以init开头的文件【模糊搜索】
[root@192 tmp]# find /etc -name init??? # 单个字符匹配 ? 匹配三个则三个问号 ???
[root@192 tmp]# find /etc -iname init??? # 单个字符匹配 ?, -iname 搜索时不区分大小写
[root@192 tmp]# find / -size +204800 # 搜索大于100M的文件 其中 1数据块 = 512字节 = 0.5k 则 100MB=102400KM=204800 (乘以2)
[root@192 ~]# find /home -user chao # 根据所有者查找,查看chao用户的文件
[root@192 ~]# find /home -group lampbrother # 根据所属组查找,查看lampbrother用户组的文件
[root@192 ~]# find /etc -mmin -30 # 查看30分钟内文件内容被改变过的文件
[root@192 ~]# find /etc -name init* -a -type f # 查询以init开头的文件 -type 根据文件类型查找 f文件,d目录,l软链接文件
[root@192 ~]# find /etc -name init* -a -type d # 查询以init开头的目录 -type 根据文件类型查找 f文件,d目录,l软链接文件
[root@192 ~]# find /etc -name inittab -exec ls -l {} \;
[root@192 ~]# find /etc -name init* -a -type f -exec ls -l {} \; # 在etc目录下查找以init开头的文件并显示详细信息
[root@192 ~]# find /etc -name init* -a -type f -ok ls -l {} \; # -ok有一个询问的过程
[root@192 ~]# find /home -user shenchao -ok rm {} \;
[root@192 ~]# find . -inum 276998 -exec rm {} \; # 根据 i 节点查找并删除文件 .表示当前目录

locate

指令名称 语法 功能描述
locate locate 文件名 在文件资料库中查找文件
[root@192 ~]# locate inittab              # 在文件资料库中查找文件inittab
[root@192 ~]# locate locate
/var/lib/mlocate/mlocate.db # 资料库存放在这里
[root@192 ~]# touch /root/yangmi # 在/root目录下创建空文件yangmi
[root@192 ~]# updatedb # 更新文件资料库
[root@192 ~]# locate yangmi # 在文件资料库中查找文件yangmi
/root/yangmi
[root@192 ~]# touch /tmp/zhangbozhi # 在/tmp目录下创建空文件zhangbozhi
[root@192 ~]# updatedb # 更新文件资料库
[root@192 ~]# locate zhangbozhi # 存放在/tmp目录下的文件,locate无法找到
[root@192 ~]# locate -i yangmi # -i参数不区分大小写

which

指令名称 语法 功能描述
which which 命令 搜索命令所在目录及别名信息
[root@192 ~]# which cp   
alias cp='cp -i' # 此处可以看到 cp是 cp -i 的别名
/bin/cp # 别名所在的路径
[root@192 ~]# which useradd
/usr/sbin/useradd
[root@192 ~]# which rm
alias rm='rm -i'
/bin/rm

whereis

指令名称 语法 功能描述
whereis whereis [命令名称] 搜索命令所在目录及帮助文档路径
[root@192 ~]# whereis useradd
useradd: /usr/sbin/useradd /usr/share/man/man8/useradd.8.gz # 命令所在路径:/usr/sbin/useradd 帮助文件所在路径:/usr/share/man/man8/useradd.8.gz
[root@192 ~]# whereis rm
rm: /bin/rm /usr/share/man/man1p/rm.1p.gz /usr/share/man/man1/rm.1.gz

grep

指令名称 语法 功能描述
grep grep -iv [指定字串] [文件] 在文件中搜索字串匹配的行并输出
-i 不区分大小写
-v 排除指定字串
[root@192 ~]# grep multiuser /etc/inittab       # 在/etc/inittab目录下搜索关键字 multiuser 并输出所在的行
[root@192 ~]# grep -i multiuser /etc/inittab # -i 不区分大小写
[root@192 ~]# grep -v ^# /etc/inittab # 过滤掉以#开头的行 linux中#号表示注释

帮助命令

man

指令名称 语法 功能描述
man man [命令或配置文件] 获得帮助信息

whatis 命令 查看命令简短信息
apropos 配置文件 查看配置文件的信息
命令 –help
info

在man page中的一些常用的按键:

按键 进行工作
空格键页 向下翻一页
page down 向下翻一页
page up 向上翻一页
home 去到第一页
end 去到最后一页
/string 向下查找string这个字符串,如果要查找vbird的话,就输入 /vbird
?string 向上查找string这个字符串
n,N 利用n,N来查找字符串时,可以用 n 来继续下一个查找(不论是 / 或 ?),可以用 N 来进行反向查找
q 结束这次man page
[root@192 ~]# man date              # 查看date命令的帮助信息
[root@192 ~]# man services # 查看配置文件service的帮助信息
[root@192 ~]# whereis passwd # man 5 其中5表示配置文件的帮助 man 1 其中1表示命令的帮助
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man5/passwd.5.gz /usr/share/man/man1/passwd.1.gz
[root@192 ~]# man 5 passwd # 这里用5指定显示配置文件的帮助
[root@192 ~]# whatis ls # whatis 命令 查看命令简短信息
[root@192 ~]# apropos services # apropos 配置文件 查看配置文件的简短信息
[root@192 ~]# touch --help
[root@192 ~]# info

help

指令名称 语法 功能描述
help help 命令 获得Shell内置命令的帮助(Shell内置命令是用whereis找不到的命令)
[root@192 ~]# help umask

用户管理命令

useradd

指令名称 语法 功能描述
useradd useradd 用户名 添加新用户
[root@192 ~]# useradd yangmi  # 添加新用户yangmi

passwd

指令名称 语法 功能描述
passwd passwd 用户名 设置用户密码
[root@192 ~]# passwd yangmi  # 给用户yangmi设置密码
[yangmi@192 ~]$ passwd # 使用yangmi用户登录,使用passwd修改密码

who

指令名称 语法 功能描述
who who 查看登录用户信息
[root@192 ~]# who     # 登录用户名,登录终端 tty本地终端  pts远程终端 ,登录时间,登录Ip地址 
root tty1 2020-12-08 07:40 (:0)
root pts/0 2020-12-08 07:40 (192.168.XX.1)
yangmi pts/1 2020-12-08 08:56 (192.168.XX.1)

w

指令名称 语法 功能描述
w w 查看登录用户详细信息
[root@192 ~]# w    # 09:06:40登录时间, up  1:26 连续运行时间,3 users当前一共3个用户登录,load average: 0.00, 0.04, 0.05 负载均衡的情况
09:06:40 up 1:26, 3 users, load average: 0.00, 0.04, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT # IDLE表示用户登录空闲多久 PCPU表示当前用户执行操作占用cpu的时间 WHAT当前执行什么操作
root tty1 :0 07:40 1:26m 1.85s 1.85s /usr/bin/Xorg :0 -br -verbose -audit 4 -auth /var/run/gdm/auth-for-gdm-MTkNaE/database -no
root pts/0 192.168.XX.1 07:40 0.00s 0.26s 0.10s w
yangmi pts/1 192.168.XX.1 08:56 4:57 0.02s 0.02s -bash
[root@192 ~]# uptime
09:08:44 up 1:28, 3 users, load average: 0.02, 0.05, 0.05

压缩解压命令

gzip

指令名称 语法 功能描述
gzip gzip 文件 压缩文件,压缩后文件格式:.gz
[root@192 ~]# cd /tmp
[root@192 tmp]# touch test.txt
[root@192 tmp]# gzip test.txt # 不保留原文件
[root@192 tmp]# ls -l
总用量 128
-rw-r--r--. 1 root root 127220 128 09:19 test.gz
[root@192 tmp]# mkdir a
[root@192 tmp]# mkdir a/b a/c a/d # 创建目录
[root@192 tmp]# gzip a # 报错表示gzip只能压缩文件,不能压缩目录
gzip: a is a directory -- ignored

gunzip

指令名称 语法 功能描述
gunzip gunzip [压缩文件] 解压缩.gz的压缩文件
[root@192 tmp]# gunzip test.gz
[root@192 tmp]# ls -l
总用量 628
-rw-r--r--. 1 root root 641020 128 09:19 test.txt
[root@192 tmp]# gzip -d test.gz # 或者使用gzip -d命令
[root@192 tmp]# ls -l
总用量 628
-rw-r--r--. 1 root root 641020 128 09:19 test

tar

指令名称 语法 功能描述
tar tar 选项[-zcf] [压缩后的文件名] [目录] 打包目录
-c 打包
-v 显示详细信息
-f 指定文件名
-z 打包同时压缩

tar命令解压缩语法:
-x 解包
-v 显示详细信息
-f 指定压缩文件
-z 解压缩

压缩后文件格式: .tar .gz

[root@192 tmp]# mkdir test
[root@192 tmp]# mkdir test/test3 test/test4 test/test5
[root@192 tmp]# tar -cvf test.tar test # 先打包
test/
test2/test3/
test2/test4/
test2/test5/
[root@192 tmp]# ls
a boduo japan japan.tar
[root@192 tmp]# gzip japan.tar #再压缩
[root@192 tmp]# ls
a boduo japan japan.tar.gz
[root@192 tmp]# mkdir abc
[root@192 tmp]# mkdir abc/yangmi abc/zhang
[root@192 tmp]# tar -zcf abc.tar.gz abc #打包的同时压缩
[root@192 tmp]# ls
a abc abc.tar.gz boduo japan japan.tar.gz
[root@192 tmp]# tar -acf etc.tar.gz /etc
tar: 从成员名中删除开头的“/”
[root@192 tmp]# ls
a abc abc.tar.gz boduo etc.tar.gz japan japan.tar.gz


[root@192 tmp]# rm -rf abc
[root@192 tmp]# ls
a abc.tar.gz boduo etc.tar.gz japan japan.tar.gz
[root@192 tmp]# tar -zxvf abc.tar.gz #解压
abc/
abc/yangmi/
abc/zhang/
[root@192 tmp]# ls
a abc abc.tar.gz boduo etc.tar.gz japan japan.tar.gz

zip

指令名称 命令英文原意 指令所在路径 执行权限 语法 功能描述
zip /usr/bin/zip 所有用户 zip选项[-r] [压缩后文件名] [文件或目录] 压缩文件或目录
-r 压缩目录
[root@192 tmp]# cp /etc/cas.conf /tmp/cas
[root@192 tmp]# ls
a abc abc.tar.gz boduo boduo.zip cas etc.tar.gz japan japan.tar.gz
[root@192 tmp]# zip cas.zip cas # 压缩文件,保留原文件
adding: cas (deflated 44%)
[root@192 tmp]# ls
a abc abc.tar.gz boduo boduo.zip cas cas.zip etc.tar.gz japan japan.tar.gz
[root@192 tmp]# zip -r abc.zip abc # 压缩目录
adding: abc/ (stored 0%)
adding: abc/yangmi/ (stored 0%)
adding: abc/zhang/ (stored 0%)
[root@192 tmp]# ls
a abc abc.tar.gz abc.zip boduo boduo.zip cas cas.zip etc.tar.gz japan japan.tar.gz

bzip2

指令名称 命令英文原意 指令所在路径 执行权限 语法 功能描述
bzip2 /usr/bin/bzip2 所有用户 bzip2 选项[-k] [文件] 压缩文件。压缩后文件格式 .bz2
-k 产生压缩文件后保留原文件
[root@192 tmp]# bzip2 -k boduo
[root@192 tmp]# ls
a abc abc.tar.gz abc.zip boduo boduo.bz2 boduo.zip cas cas.zip etc.tar.gz japan japan.tar.gz
[root@192 tmp]# tar -cjf boduo.tar.bz2 boduo
[root@192 tmp]# ls
a abc abc.tar.gz abc.zip boduo boduo.bz2 boduo.tar.bz2 boduo.zip cas cas.zip etc.tar.gz japan japan.tar.gz

bunzip2

指令名称 命令英文原意 指令所在路径 执行权限 语法 功能描述
bunzip2 /usr/bin/bunzip2 所有用户 bunzip2 选项[-k] [压缩文件] 解压缩
-k 产生压缩文件后保留原文件
[root@192 tmp]# bzip2 -k boduo
[root@192 tmp]# ls
a abc abc.tar.gz abc.zip boduo boduo.bz2 boduo.zip cas cas.zip etc.tar.gz japan japan.tar.gz
[root@192 tmp]# tar -cjf boduo.tar.bz2 boduo
[root@192 tmp]# ls
a abc abc.tar.gz abc.zip boduo boduo.bz2 boduo.tar.bz2 boduo.zip cas cas.zip etc.tar.gz japan japan.tar.gz
[root@192 tmp]# tar -xjf boduo.tar.bz2
[root@192 tmp]# ls
a abc.tar.gz abc.zip boduo boduo.tar.bz2 boduo.zip cas cas.zip etc.tar.gz japan.tar.gz

网络命令

write

指令名称 指令所在路径 执行权限 语法 功能描述
write /usr/bin/write 所有用户 write <用户名> 给用户发信息,以crtl+d保存结束
[root@192 ~]# write yangmi    # 给用户yangmi发信息,如果写错需要删除按 ctrl+← 退格键
ni hao yang
mi aaaaa
[root@192 ~]#


[yangmi@192 ~]$ #这里用 yangmi 用户登录可以收到root用户发送过来的信息(用户在线才可以收到)
Message from root@192.168.88.128 on pts/0 at 08:29 ...
ni hao yang
mi aaa
EOF

wall

指令名称 命令英文原意 指令所在路径 执行权限 语法 功能描述
wall write all /usr/bin/wall 所有用户 wall [message] 发广播信息
[root@192 ~]# wall yangmi nihao!     #使用root用户发广播信息,root自己也可以收到
[root@192 ~]#
Broadcast message from root@192.168.88.128 (pts/0) (Wed Dec 9 08:37:34 2020):

yangmi nihao!



[yangmi@192 ~]$ #这里是yangmi用户登录,可以接收到广播

Broadcast message from root@192.168.88.128 (pts/0) (Wed Dec 9 08:37:34 2020):

yangmi nihao!

ping

指令名称 指令所在路径 执行权限 语法 功能描述
ping /bin/ping 所有用户 ping 选项[-c指定发送次数] IP地址 测试网络连通性
[root@192 ~]# ping 112.80.248.75        # 需要按ctrl+c才能停下来
[root@192 ~]# ping -c 3 112.80.248.75 # ping 3次后返回

ifconfig

指令名称 命令英文原意 指令所在路径 执行权限 语法 功能描述
ifconfig interfate configure /sbin/ifconfig root ifconfig 网卡名称 IP地址 查看和设置网卡信息
[root@192 ~]# ifconfig

last

指令名称 指令所在路径 执行权限 语法 功能描述
last /usr/bin/last 所有用户 last 列出目前与过去登录系统的用户信息
[root@192 ~]# last

lastlog

指令名称 指令所在路径 执行权限 语法 功能描述
lastlog /usr/bin/lastlog 所有用户 lastlog 检查某特定用户上次登录的时间
[root@192 ~]# lastlog     #用户最后一次登录过的信息   【lastlog -u 用户id】  指定用户上次登录的时间

traceroute

指令名称 指令所在路径 执行权限 语法 功能描述
traceroute /bin/traceroute 所有用户 traceroute 显示数据包到主机间的路径
[yangmi@192 ~]$ traceroute www.baidu.com

netstat

指令名称 指令所在路径 执行权限 语法 功能描述
netstat /bin/netstat 所有用户 netstat[选项] 显示网络相关信息
-t TCP协议
-u UDP协议
-l 监听
-r 路由
-n 显示IP地址和端口号
[root@192 ~]# netstat -tlun   # 查看本机监听的端口                                 
[root@192 ~]# netstat -an # 查看本机所有的网络连接
[root@192 ~]# netstat -rn # 查看本机路由表

setup

指令名称 指令所在路径 执行权限 语法 功能描述
setup /usr/bin/setup root setup 配置网络
[root@192 ~]# setup
您更改了主机名。
应该现在为系统设置主机名吗?
这样可能会造成有些 X 应用程序无法正常工作。

您可能必须重新登录。
[root@192 ~]# service network restart # 重启服务
正在关闭接口 eth0:
....

选择网络配置

选择设备配置

选择第一个网卡

设置网络信息

mount

指令名称 指令所在路径 执行权限 语法 功能描述
mount /bin/mount 所有用户 mount[-t文件系统]设备文件名挂载点 挂载命令
[root@localhost ~]# mkdir /mnt/cdrom   # 创建挂载点
[root@localhost ~]# ll /dev/cdrom # 设备文件名默认sr0
lrwxrwxrwx. 1 root root 3 129 08:18 /dev/cdrom -> sr0
[root@localhost ~]# mount /dev/sr0 /mnt/cdrom
mount: block device /dev/sr0 is write-protected, mounting read-only
mount: /dev/sr0 already mounted or /mnt/cdrom busy
mount: according to mtab, /dev/sr0 is already mounted on /mnt/cdrom
[root@localhost ~]# umount /dev/sr0 #上面发现/dev/sr0已经挂载,需要卸载
[root@localhost ~]# mount /dev/sr0 /mnt/cdrom
mount: block device /dev/sr0 is write-protected, mounting read-only
[root@localhost ~]# cd /mnt/cdrom/
[root@localhost cdrom]# ls
CentOS_BuildTag EULA images Packages repodata RPM-GPG-KEY-CentOS-Debug-6 RPM-GPG-KEY-CentOS-Testing-6
EFI GPL isolinux RELEASE-NOTES-en-US.html RPM-GPG-KEY-CentOS-6 RPM-GPG-KEY-CentOS-Security-6 TRANS.TBL
[root@localhost cdrom]# umount /dev/sr0 #这里注意,不能再光盘挂载点卸载,需要退出目录
umount: /mnt/cdrom: device is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
[root@localhost cdrom]# cd
[root@localhost ~]# umount /dev/sr0

关机重启命令

shuttdown

指令名称 指令所在路径 执行权限 语法 功能描述
shutdown shutdown [选项] 时间 关机命令
-c 取消前一个关机命令
-h 关机
-r 重启
[root@localhost ~]# shutdown -h now     # 立刻关机
[root@localhost ~]# shutdown -h 21:30 # 系统在今天的 21:30 分会关机
[root@localhost ~]# shutdown -h +10 # 系统再过十分钟后自动关机
[root@localhost ~]# shutdown -r now # 系统立刻重新开机
[root@localhost ~]# shutdown -c # 取消关机指令

其他关机命令

[root@localhost ~]# halt  # 系统关机
[root@localhost ~]# poweroff
[root@localhost ~]# init 0

其他重启命令

[root@localhost ~]# reboot  # 重新开机
[root@localhost ~]# init 6

系统运行级别

指令名称 指令描述
0 关机
1 单用户
2 不完全多用户,不含NFS服务
3 完全多用户
4 未分配
5 图形界面
6 重启
[root@localhost ~]# cat /etc/inittab   #   id:5:initdefault:  当前虚拟机默认系统运行级别是5,可以修改比如:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
id:5:initdefault:
[root@localhost ~]# runlevel # 查询系统运行级别
N 5
[root@localhost ~]# init 3 #切换到3

logout

[root@localhost ~]# logout   # 退出登录
Connection closing...Socket close.

Connection closed by foreign host.

Disconnected from remote host(192.168.88.128) at 22:24:14.

Type `help' to learn how to use Xshell prompt.

文本编辑器vim

常用操作

Vim是一个功能强大的全屏幕文本编辑器,是Linux/UNIX上最常用的文本编辑器,他的作用是建立、编辑、显示文本文件。Vim没有菜单,只有命令。

工作模式

插入

命令 作用 命令 作用
a 在光标所在字符后插入 A 在光标所在行尾插入
i 在光标所在字符前插入 I 在光标所在行行首插入
o 在光标下插入新行 O 在光标上插入新行

定位

命令 作用 命令 作用
:set nu 设置行号 :set nonu 取消行号
gg 到第一行 G 到最后一行
nG 到第n行 :n 到第n行
$ 移至行位 0 移至行首

删除

命令 作用 命令 作用
x 删除光标所在处字符 nx 删除光标所在处后n个字符
dd 删除光标所在行,ndd删除n行 dG 删除光标所在行到文件末尾内容
D 删除光标所在处到行尾内容 :n1,n2d 删除指定范围的行

复制和剪切

命令 作用 命令 作用
yy 复制当前行 nyy 复制当前行以下n行
dd 剪切当前行 ndd 剪切当前行以下n行
p 粘贴在当前光标所在行下(小写p) P 粘贴在当前光标所在行上(大写p)

替换和取消

命令 作用 命令 作用
r 取代光标所在处字符 R 从光标所在处开始替换字符,按ESC取消
u 取消上一步操作

搜索和搜索替换

命令 作用 命令 作用
/string 搜索指定字符串,搜索时忽略大小写:set ic n 搜索指定字符串的下一个出现位置
:%s/old/new/g 全文替换指定字符串 :n1,n2s/old/new/g 在指定范围内替换指定字符串,/c 替换时有询问操作,/g替换时无询问操作

保存和退出

命令 作用 命令 作用
:w 保存修改 :w new_filename 另存为指定文件
:wq 保存修改并退出 ZZ 快捷键,保存修改并退出
:q! 不保存修改退出 :wq! 保存修改并退出(文件所有者及root可使用)

使用技巧

命令 作用
:r 文件名 导入指定文件内容到当前所编辑的文件之中(光标所在处),例如导入/etc/issue文件内容到当前所编辑的文件中 :r /etc/issue
:!which 命令 在不退出vim的情况下找到命令所在路径,按Enter继续
:r !命令 把一个命令的执行结果导入到当前编辑的文件中(光标所在处),例如导入当前时间 :r !date
:map 快捷键 触发命令 定义快捷键,例如当按快捷键ctrl+p的时候在一行的行首添加注释,可以这样写 :map ^P I#<ESC>,其中 ^P 需要同时按CTRL+V+PI#表示在行首插入#,<ESC>表示按ESC结束,
快捷键:map ^B 0x 表示定义快捷键ctrl+B删除行首的第一个字符,其中 ^B 需要同时按ctrl+V+B,快捷键:map ^H test@cntaiping.com<ESC> 表示定义快捷键CTRL+H,在光标所在处插入邮箱地址
:n1,n2s/^/#/g 连续行注释,例如注释1-4行可以这样写:1,4s/^/#/g ,去掉1-4行注释可以这样写:1,4s/^#//g,在1-4行行首添加//双斜杠注释可以这样写:1,4s/^/\/\//g,其中\/表示转义字符
替换ab ab mymail test@test.com 当输入mymail时按回车会自动替换为 test@test.com,重启之后快捷键会失效,可以在.vimrc下定义快捷键,永久有效,普通用户路径:/home/username/.vimrc,root用户路径/root/.vimrc

软件包管理

  1. 软件包分类
  • 源码包:脚本安装包
  • 二进制包(RPM包、系统默认包)
  1. 源码包
  • 源码包的优点
    • 开源,如果有足够的能力,可以修改源代码。
    • 可以自由选择所需的功能。
    • 软件是编译安装,所以更加适合自己的系统,更加稳定,效率也更高。
    • 卸载方便。
  • 源码包的缺点
    • 安装过程步骤较多,尤其安装较大的软件集合时(如LAMP环境搭建),容易出现拼写错误。
    • 编译过程时间较长,安装比二进制安装时间长。
    • 因为是编译安装,安装过程中一旦报错新手很难解决。
  1. RPM包
  • 二进制包的优点
    • 包管理系统简单,只通过几个命令就可以实现包的安装、升级、查询和卸载。
    • 安装速度比源码包安装快的多。
  • 二进制包的缺点
    • 经过编译,不再可以看到源代码。
    • 功能选择不如源码包灵活。
    • 依赖性。

rpm命令

rpm包命名规则

httpd-2.2.15-15.el6.centos.l.i686.rpm 包全名
httpd 软件包名
2.2.15 软件版本
15 软件发布的次数
el6.centos 适合的linux平台
i686 适合的硬件平台
rpm rpm包扩展名

rpm包路径:CentOS-6.3-i386-bin-DVD1.iso\Packages 目录下

rpm包依赖性

  • 树形依赖:a–>b–>c
  • 环形依赖:a–>b–>c–>a
  • 模块依赖:模块依赖查询网站www.rpmfind.net

rpm安装升级与卸载

包名与包全名
  • 包全名:操作的包是没有安装的软件包时,使用包全名。而且要注意路径。
  • 包名:操作已经安装的软件包时,使用包名。是搜索/var/lib/rpm中的数据库
RPM安装
命令 作用 选项 作用
rpm -ivh 包全名 rpm安装 -i(install) 安装
-v(verbose) 显示详细信息
-h(hash) 显示进度
--nodeps 不检测依赖性
[root@localhost ~]# mkdir /mnt/cdrom          # 创建光盘挂载点
[root@localhost ~]# mount /dev/sr0 /mnt/cdrom # 挂载光盘
[root@localhost ~]# cd /mnt/cdrom/Packages/ # rpm包均是在Packages目录下
[root@localhost Packages]# rpm -ivh httpd-2.2.15-15.el6.centos.1.i686.rpm # 使用rpm安装httpd
RPM包升级
命令 作用 选项 作用
rpm -Uvh 包全名 rpm升级 -U 升级
RPM包卸载
命令 作用 选项 作用
rpm -e 包全名 rpm卸载 -e(erase) 卸载
--nodeps 不检测依赖性
查询是否安装
命令 作用 选项 作用
rpm -q 包名 查询包是否安装 -q 查询(query)
-a 所有(all)
[root@localhost Packages]# rpm -q httpd
httpd-2.2.15-53.el6.centos.x86_64 # 已经安装
[root@localhost Packages]# rpm -q httpdfda #随意写的包名
package httpdfda is not installed # 未安装
[root@localhost Packages]# rpm -qa # 列出所有已经安装的包名
cdrdao-1.2.3-4.el6.x86_64
ibus-table-additional-1.2.0.20100111-5.el6.noarch
.....
查询软件包详细信息
命令 作用 选项 作用
rpm -qi 包名 查询软件包详细信息 -i 查询软件信息(information)
-p 查询未安装包信息(package包全名)
[root@localhost Packages]# rpm -qi httpd
[root@localhost Packages]# rpm -qip zip-3.0-1.el6_7.1.x86_64.rpm # -p参数加包全名,可以看到未安装包的详细信息
查询包中文件安装位置
命令 作用 选项 作用
rpm -ql 包名 查询包中文件安装位置 -l 列表(list)
-p 查询未安装包信息(package包全名)
[root@localhost Packages]# rpm -ql httpd
[root@localhost Packages]# rpm -qlp zip-3.0-1.el6_7.1.x86_64.rpm
# -p 查询未安装的包信息,如果安装,则会装到查询出来的位置中
查询文件系统属于哪个RPM包
命令 作用 选项 作用
rpm -qf 系统文件名 查询文件系统属于哪个RPM包 -f 查询系统文件属于哪个软件包(file)
[root@localhost Packages]# rpm -qf /var/www/icons/small/tar.gif
httpd-2.2.15-53.el6.centos.x86_64
查询软件包的依赖性
命令 作用 选项 作用
rpm -qR 包名 查询软件包的依赖性 -R 查询软件包的依赖性(requires)
-p 查询未安装包信息(package包全名)
[root@localhost Packages]# rpm -qR httpd  # 以下包必须全部安装完才能安装httpd包
[root@localhost Packages]# rpm -qRp zip-3.0-1.el6_7.1.x86_64.rpm # -p查询未安装包信息,如果安装,则需要安装以下包
RPM包校验
命令 作用 选项 作用
rpm -V 已安装的包名 RPM包校验 -V 校验指定RPM包中的文件(verify)

验证内容中的8个信息的具体内容如下:

选项 作用 选项 作用
S 文件大小是否改变 M 文件的类型或文件的权限(rwx)是否被改变
5 文件MD5校验和是否改变(可以看成文件内容是否改变) D 设备的中,从代码是否改变
L 文件路径是否改变 U 文件的属主(所有者)是否改变
G 文件的属组是否改变 T 文件的修改时间是否改变

文件类型:

选项 作用 选项 作用
c 配置文件( config file) d 普通文档( documentation)
g “鬼”文件( ghost file),很少见,就是该文件不应该被这个RPM包包含 l 授权文件( license file
r 描述文件( read me)
[root@localhost ~]# rpm -V httpd   # 无任何提示说明是初始安装,无任何的修改
RPM包中文件提取

rpm2cpio 全包名 | cpio -idv . 文件绝对路径

rpm2cpio 将rmp包转换为cpio格式的命令

cpio是一个标准工具,他用于创建软件档案文件和从档案文件中提取文件

命令 作用 选项 作用
cpio 选项<文件或设备> -i copy-in模式,还原
-d 还原时自动新建目录
-v 显示还原过程
[root@localhost ~]# rpm -qf /bin/ls  #查询ls命令属于哪个软件包
coreutils-8.4-43.el6.x86_64
[root@localhost ~]# mv /bin/ls /tmp/ # 造成ls命令误删除假象
[root@localhost ~]# ls
-bash: ls: command not found
[root@localhost ~]# rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-43.el6.x86_64.rpm | cpio -idv ./bin/ls #提取rpm包中ls命令到当前目录的/bin/ls下
./bin/ls
25240
[root@localhost ~]# cp /root/bin/ls /bin/ # 把ls命令复制到/bin/目录,修复文件丢失

yum在线管理

IP地址配置和网络yum源
[root@192 ~]# setup
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
HWADDR=00:0c:29:b3:fb:29
TYPE=Ethernet
UUID=742f9267-2297-45d1-b7ad-cd00f88779d6
ONBOOT=yes #这里将ONBOOT改为yes
NM_CONTROLLED=yes
BOOTPROTO=none
IPADDR=192.168.88.128
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=202.106.0.20
USERCTL=no
PEERDNS=yes
IPV6INIT=no

[root@localhost ~]# service network restart # 重启服务
[root@localhost ~]# ifconfig
[root@192 ~]# ping www.baidu.com

选择网络配置

选择设备配置

选择第一个网卡

设置网络信息

网络yum源
选项 作用
[base] 容器名称,一定要放在[]中
name 容器说明,可以自己随便写
mirrorlist 镜像站点,这个可以注释掉
baseurl 我们的yum源服务器的地址。默认是CentOS的官方的yum源服务器,是可以使用的,如果觉得慢可以改成你喜欢的yum镜像源地址
enabled 此容器是否生效,如果不写或者写成enable=1都是生效的,写成enable=0就是不生效
gpgcheck 如果1是指RPM的数字证书生效,如果是0则不生效
gpgkey 数字证书的公钥文件保存位置。不用修改
[root@192 ~]# cd /etc/yum.repos.d/
[root@192 yum.repos.d]# ls
CentOs-Base.repo CentOS-Base.repo CentOS-Debuginfo.repo CentOS-fasttrack.repo CentOS-Media.repo CentOS-Vault.repo
[root@192 yum.repos.d]# vi CentOs-Base.repo # CentOS-Base.repo为网络yum源 CentOS-Media.repo为本地磁盘yum源
[base]
name=CentOS-$releasever
enabled=1
failovermethod=priority
baseurl=http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.cloud.aliyuncs.com/centos/RPM-GPG-KEY-CentOS-7

[updates]
name=CentOS-$releasever
enabled=1
failovermethod=priority
baseurl=http://mirrors.cloud.aliyuncs.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.cloud.aliyuncs.com/centos/RPM-GPG-KEY-CentOS-7

[extras]
name=CentOS-$releasever
enabled=1
failovermethod=priority
baseurl=http://mirrors.cloud.aliyuncs.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.cloud.aliyuncs.com/centos/RPM-GPG-KEY-CentOS-7
[root@192 yum.repos.d]# less CentOs-Base.repo

[1]+ Stopped less CentOs-Base.repo
查询所有可用软件包列表
命令 作用
yum list 查询所有可用软件包列表
[root@iZuf64m2pjj5o9ggzbg1wxZ yum.repos.d]# yum list   
搜索软件包
命令 作用
yum search [关键字(包名)] 搜索服务器上所有和关键字相关的包
[root@iZuf64m2pjj5o9ggzbg1wxZ yum.repos.d]# yum search httpd
安装软件包
命令 作用 选项 作用
yum -y install [包名] install 安装软件包
-y 自动回答yes
[root@iZuf64m2pjj5o9ggzbg1wxZ yum.repos.d]# yum -y install gcc
[root@iZuf64m2pjj5o9ggzbg1wxZ yum.repos.d]# rpm -q gcc
升级软件包
命令 作用 选项 作用
yum -y update [包名] update 升级软件包
-y 自动回答yes
卸载软件包
命令 作用 选项 作用
yum -y remove [包名] remove 卸载软件包
-y 自动回答yes
软件包列表
命令 作用
yum grouplist 列出所有可用的软件组列表
yum groupinstall 软件组名 安装指定软件组,组名可以由grouplist查询出来,如果组名之间有空格,用双引号扩起来
yum groupmove 软件组名 卸载指定软件组
[root@iZuf64m2pjj5o9ggzbg1wxZ ~]# yum grouplist
光盘yum源搭建
[root@localhost ~]# mount /dev/sr0 /mnt/cdrom  # 挂载光盘
mount: block device /dev/sr0 is write-protected, mounting read-only
[root@192 ~]# cd /etc/yum.repos.d/ # 进入目录
[root@192 yum.repos.d]# ls
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-fasttrack.repo CentOS-Media.repo CentOS-Vault.repo
[root@192 yum.repos.d]# mv CentOS-Base.repo CentOS-Base.repo.bak # 让网络yum源失效,把repo扩展名名字改了,只要不是以repo结尾就行
[root@192 yum.repos.d]# mv CentOS-Debuginfo.repo CentOS-Debuginfo.repo.bak
[root@192 yum.repos.d]# mv CentOS-fasttrack.repo CentOS-fasttrack.repo.bak
[root@192 yum.repos.d]# mv CentOS-Vault.repo CentOS-Vault.repo.bak
[root@192 yum.repos.d]# ls # 目前只有光盘yum源CentOS-Media.repo生效
CentOS-Base.repo.bak CentOS-Debuginfo.repo.bak CentOS-fasttrack.repo.bak CentOS-Media.repo CentOS-Vault.repo.bak
[root@192 yum.repos.d]# vim CentOS-Media.repo #修改光盘yum源文件
[c6-media]
name=CentOS-$releasever - Media
baseurl=file:///mnt/cdrom/ #这里改为 mnt/cdrom 地址为你自己的光盘挂载地址
# file:///media/cdrom/ # 注释掉这个不存在的地址
# file:///media/cdrecorder/ # 注释掉这个不存在的地址
gpgcheck=1
enabled=1 # 把enabled=0改为enabled=1,让这个yum源配置文件生效
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

源码包管理

源码包和RPM包的区别

  1. 区别
    安装之前的区别:概念上的区别
    安装之后的区别:安装位置不同

  2. RPM包默认安装路径,是安装在默认位置中

    RPM包默认安装路径
    /etc/ 配置文件安装目录
    /usr/bin/ 可执行的命令安装目录
    /usr/lib/ 程序所使用的函数库保存位置
    /usr/share/doc/ 基本的软件使用手册保存位置
    /usr/share/man/ 帮助文件保存位置
  3. 源码包安装位置
    安装在指定位置当中,一般是/usr/local/软件名/

  4. 安装位置不同带来的影响
    RPM包安装的服务可以使用系统服务管理命令(service)来管理,而源码包安装的服务则不能被服务管理命令管理,因为没有安装到默认路径中。所以只能用绝对路径进行服务的管理,例如RPM包安装的Apache的启动方法是:

[root@192 ~]# cd /etc/rc.d/init.d/
[root@192 init.d]# ls
abrt-ccpp certmonger httpd messagebus oddjobd rpcgssd snmptrapd
abrtd cpuspeed ip6tables netconsole portreserve rpcidmapd spice-vdagentd
abrt-oops crond iptables netfs postfix rpcsvcgssd sshd
acpid cups irqbalance network psacct rsyslog sssd
atd dnsmasq kdump NetworkManager quota_nld sandbox sysstat
auditd firstboot killall nfs rdisc saslauthd udev-post
autofs functions lvm2-lvmetad nfslock restorecond single wdaemon
avahi-daemon haldaemon lvm2-monitor ntpd rngd smartd wpa_supplicant
bluetooth halt mdmonitor ntpdate rpcbind snmpd ypbind
[root@192 init.d]# /etc/rc.d/init.d/httpd start #使用绝对路径启动apache
正在启动 httpd:
[root@192 init.d]# service httpd restart #使用service启动apache
停止 httpd: [确定]
正在启动 httpd: [确定]

源码包安装过程

  1. 安装准备
  • 安装C语言编译器
[root@iZuf6fhk4slpwaz2668zqyZ ~]# yum -y install gcc # 安装gcc
[root@iZuf6fhk4slpwaz2668zqyZ ~]# rpm -q gcc
gcc-4.8.5-44.el7.x86_64
  • 下载源码包http://mirror.bit.edu.cn/apache/httpd/,下载httpd-2.4.46.tar.gz
  1. 安装注意事项
  • 源码包保存位置:/usr/local/src
  • 软件安装位置:/usr/local
  • 如何确定安装过程报错:安装过程停止,并出现error,warning或者no提示,即发生错误
  1. 安装
  • 使用winscp上传httpd-2.4.46.tar.gz
  • 解压下载到源码包
[root@iZuf6fhk4slpwaz2668zqyZ ~]# tar -axvf httpd-2.4.46.tar.gz  # 解压缩
[root@iZuf6fhk4slpwaz2668zqyZ ~]# cd httpd-2.4.46 # 进入解压目录
[root@iZuf6fhk4slpwaz2668zqyZ httpd-2.4.46]# ls
ABOUT_APACHE BuildAll.dsp configure.in include LICENSE README test
acinclude.m4 BuildBin.dsp docs INSTALL Makefile.in README.cmake VERSIONING
Apache-apr2.dsw buildconf emacs-style InstallBin.dsp Makefile.win README.platforms
Apache.dsw CHANGES httpd.dep LAYOUT modules ROADMAP
apache_probes.d CMakeLists.txt httpd.dsp libhttpd.dep NOTICE server
ap.d config.layout httpd.mak libhttpd.dsp NWGNUmakefile srclib
build configure httpd.spec libhttpd.mak os support
  1. ./config软件配置与检测
  • 定义需要的功能选项。
  • 检测系统环境是否符合安装要求
  • 把定义好的功能选项和检测系统环境的信息都写入Makefile文件,用于后续的编辑。
[root@iZuf6fhk4slpwaz2668zqyZ httpd-2.4.46]# ./configure --prefix=/usr/local/apache2.4 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/pcre
[root@iZuf6fhk4slpwaz2668zqyZ httpd-2.4.46]# make # 编译
[root@iZuf6fhk4slpwaz2668zqyZ httpd-2.4.46]# make install #编译安装
[root@iZuf6fhk4slpwaz2668zqyZ httpd-2.4.46]# /usr/local/apache2.4/bin/apachectl start #启动

启动后访问:

  1. 安装报错APR not found解决办法
[root@iZuf6fhk4slpwaz2668zqyZ ~]# wget http://archive.apache.org/dist/apr/apr-1.4.5.tar.gz #下载包
[root@iZuf6fhk4slpwaz2668zqyZ ~]# tar -zxf apr-1.4.5.tar.gz
[root@iZuf6fhk4slpwaz2668zqyZ ~]# cd apr-1.4.5
[root@iZuf6fhk4slpwaz2668zqyZ apr-1.4.5]# ./configure --prefix=/usr/local/apr
[root@iZuf6fhk4slpwaz2668zqyZ apr-1.4.5]# make
[root@iZuf6fhk4slpwaz2668zqyZ apr-1.4.5]# make install


[root@iZuf6fhk4slpwaz2668zqyZ ~]# wget http://archive.apache.org/dist/apr/apr-util-1.3.12.tar.gz
[root@iZuf6fhk4slpwaz2668zqyZ ~]# tar -zxf apr-util-1.3.12.tar.gz
[root@iZuf6fhk4slpwaz2668zqyZ ~]# cd apr-util-1.3.12
[root@iZuf6fhk4slpwaz2668zqyZ apr-util-1.3.12]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
[root@iZuf6fhk4slpwaz2668zqyZ apr-util-1.3.12]# make
[root@iZuf6fhk4slpwaz2668zqyZ apr-util-1.3.12]# make install

[root@iZuf6fhk4slpwaz2668zqyZ ~]# wget http://jaist.dl.sourceforge.net/project/pcre/pcre/8.10/pcre-8.10.zip
[root@iZuf6fhk4slpwaz2668zqyZ ~]# unzip -o pcre-8.10.zip
[root@iZuf6fhk4slpwaz2668zqyZ ~]# cd pcre-8.10
[root@iZuf6fhk4slpwaz2668zqyZ pcre-8.10]# ./configure --prefix=/usr/local/pcre
[root@iZuf6fhk4slpwaz2668zqyZ pcre-8.10]# make
[root@iZuf6fhk4slpwaz2668zqyZ pcre-8.10]# make install
  1. 安装报错pcre-config for libpcre not found
    执行以下命令:
[root@iZuf6fhk4slpwaz2668zqyZ ~]# yum -y install pcre-devel
  1. 此次安装的文件如下

脚本安装包与软件包选择

  1. 脚本安装包
  • 脚本安装包并不是独立的软件包类型,常见安装的是源码包。
  • 是人为把安装过程写成了自动安装的脚本,只要执行脚本,定义简单的参数,就可以完成安装。
  • 非常类似于Windows下软件的安装方式
  1. Webmin的作用
    Webmin是一个基于Web的 Linux系统管理界面。您就可以通过图形化的方式设置用户帐号、 Apache、DNS、文件共享等服务。
  2. Webmin安装过程
  • 下载地址:https://sourceforge.net/projects/webadmin/files/webmin/,下载webmin-1.962.tar.gz
  • 使用winscp上传到/root/目录下
  • 安装
[root@iZuf6fhk4slpwaz2668zqyZ ~]# tar -zxvf webmin-1.962.tar.gz
[root@iZuf6fhk4slpwaz2668zqyZ ~]# cd webmin-1.962
[root@iZuf6fhk4slpwaz2668zqyZ webmin-1.962]# ./setup.sh #一路回车即可
Web server port (default 10000):
Login name (default admin): admin #这里admin
Login password: #密码这里设置123
Password again:
The Perl SSLeay library is not installed. SSL not available.
  1. 阿里云安全组规则中新增入方向为10000/10000
  2. 登录


用户管理

用户信息文件/etc/passwd

  1. 越是对服务器安全性要求高的服务器,越需要建立合理的用户权限登记制度和服务器操作规范,在Linux中主要是通过用户配置文件来查看和修改用户信息

  2. /etc/passwd

    [root@192 ~]# man 5 passwd    # 查看passwd配置文件帮助信息 5代表配置文件
    [root@192 ~]# vim /etc/passwd # 查看passwd文件内容
    root:x:0:0:root:/root:/bin/bash
    vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
    tcpdump:x:72:72::/:/sbin/nologin

    passwd配置文件分为七个字段:root:x:0:0:root:/root:/bin/bash

    • 第一个字段:用户名称

    • 第二个字段:密码标志 x代表用户有密码,真正的密码放在/etc/shadow里,它里面进行了SHA512加密,如果没有x,代表没有密码,只能进行本地登陆,远程登陆会被禁止,SHA协议禁止

    • 第三个字段:UID(用户ID)

      用户id 说明
      0 超级用户
      1-499 系统用户(伪用户)
      500-65535 普通用户
    • 第四个字段:GID(用户初始组ID)

      初始组:就是指用户一登陆就立刻拥有这个用户组的相关权限,每个用户的初始组只能有一个,一般就是和这个用户的用户名相同的组名作为这个用户的初始组
      附加组:指用户可以加入多个其他的用户组,并拥有这些组的权限,附加组可以有多个

    • 第五个字段:用户说明

    • 第六个字段:家目录

      普通用户:/home/用户名/
      超级用户:/root/

    • 第七个字段:登陆之后的Shell

      Shell就是Linux的命令解释器,在/etc/passwd当中,除了标准Shell是/bin/bash之外。还可以写如/sbin/nologin,普通用户全为/sbin/nologin。/bin/bash为可以登陆,/sbin/nologin为禁止登陆,修改之后便可以禁止普通用户登陆

影子文件/etc/shadow

[root@192 ~]# vim /etc/shadow
root:$6$fSPFTuqP4WOQ2DKs$BYsNI13/ZsDqCm9/qy9rVb4LUCBD7Ur7gzpBT5Ei3iP5ZqjZZiIu4NdBLlV1Ac4wUcIqizy1qPKQe3HAQjBiB/:18597:0:99999:7:::
bin:*:15980:0:99999:7:::
daemon:*:15980:0:99999:7:::
pulse:!!:18597::::::

Shadow配置文件分为个字段:

  • 第一个字段:用户名

  • 第二个字段:加密算法
    加密算法升级为SHA512散列加密算法,如果密码是!!或者0代表没有密码,不能登陆,可以用感叹号禁用用户密码

  • 第三个字段:密码最后一次修改日期
    使用1970年1月1日作为标准时间,每过一天时间戳加1

    时间戳换算:date -d “1970-01-01 [时间戳] days”

    日期换算时间戳:echo $(($(date –date=“年/月/日” +%s)/[时间戳]+1))

    [root@192 ~]# date -d "1970-01-01 16066 days"  #时间戳换算日期 16066是时间戳
    2013年 12月 27日 星期五 00:00:00 CST
    [root@192 ~]# echo $(($(date --date="2014/01/06" +%s)/86400+1)) # 日期换算时间戳
    16076
  • 第四个字段:两次密码的修改时间间隔时间(和第三个字段相比)

  • 第五个字段:密码有效期(和第三个字段相比)

  • 第六个字段:密码修改到期前的警告天数(和第五个字段相比)

  • 第七个字段:密码过期后的宽限天数(和第五个字段相比)
    0:代表密码过期后立即失效
    -1:代表密码永远不会失效

  • 第八个字段:账号失效时间
    要用时间戳表示

  • 第九个字段:保留

组信息文件/etc/group

[root@192 ~]# vim /etc/group
root:x:0:
bin:x:1:bin,daemon
daemon:x:2:bin,daemon
sys:x:3:bin,adm
adm:x:4:adm,daemon

组文件信息配置文件分4个字段:

第一个字段:组名
第二个字段:组密码标志
第三个字段:GID
第四个字段:组中附加用户

组密码文件/etc/gshadow

[root@192 ~]# vim /etc/gshadow
root:::
bin:::bin,daemon
daemon:::bin,daemon
sys:::bin,adm
adm:::adm,daemon
tty:::

组密码文件配置文件分4个字段:

第一个字段:组名
第二个字段:组密码
第三个字段:组管理员用户名
第四个字段:组中附加用户

用户管理相关文件

用户的家目录/home/

[root@192 ~]# ll /home/
总用量 24
drwx------. 2 root root 16384 122 05:14 lost+found
drwx------. 4 yangmi yangmi 4096 128 10:13 yangmi
[root@192 ~]# ll -d /root/
dr-xr-x---. 34 root root 4096 1221 08:52 /root/

普通用户:/home/用户名/,所有者和所属组都是此用户,权限是700
超级用户:/root/,所有者和所属组都是root用户,权限是550
普通用户变为超级用户家目录不会变

用户的邮箱/var/spool/mail/

[root@192 ~]# cd /var/spool/mail/
[root@192 mail]# ls #/var/spool/mail/用户名/
root rpc yangmi

用户模板目录/etc/skel

[root@192 yangmi]# cd /etc/skel/ #进入用户模板目录
[root@192 skel]# vi warning.txt #在用户模板目录里面新加一个文件warning.txt
[root@192 skel]# ls -a #用户模板目录里面有warning.txt文件
. .. .bash_logout .bash_profile .bashrc .gnome2 .mozilla warning.txt
[root@192 skel]# useradd user1 #添加新用户user1
[root@192 skel]# passwd user1 #给用户user1设置密码
[root@192 skel]# cd /home/user1/
[root@192 user1]# ls -a #用户user1的家目录中也有warning.txt文件
. .. .bash_logout .bash_profile .bashrc .gnome2 .mozilla warning.txt

在/etc/skel里创建了文件的话,在创建新用户时会自动出现在新用户家目录的默认隐藏信息里(用于写警告信息)

用户管理

添加新用户useradd

语法 说明 选项 选项说明
useradd [选项] 用户名 添加新用户 -u UID 手工指定用户的UID号
-d 家目录 手工指定用户的家目录
-c 用户说明 手工指定用户的说明
-g 组名 手工指定用户的初始组
-G 组名 指定用户的附加组
-s shell 手工指定

用户的登陆shell。默认是/bin/bash,passwd,shadow,group,gshadow,home,mail里面都有新用户信息

[root@192 ~]# useradd user # 添加新用户user
[root@192 ~]# passwd user # 设置密码
[root@192 ~]# grep user /etc/passwd
user:x:503:504::/home/user:/bin/bash
[root@192 ~]# grep user /etc/shadow
user:$6$XSmOILya$2F0UXlwx54wJerNRNz6xY0quG5ou2gGocowLGli71Dqy1N.4iGJDMa/XfiFxQrV1.MVSsweHOVStQug3pgeg60:18617:0:99999:7:::
[root@192 ~]# grep user /etc/group
user:x:504:
[root@192 ~]# grep user /etc/gshadow
user:!::
[root@192 ~]# ll -d /home/user/
drwx------. 4 user user 4096 1221 10:27 /home/user/
[root@192 ~]# ll -d /var/spool/mail/user
-rw-rw----. 1 user mail 0 1221 10:27 /var/spool/mail/user
[root@192 ~]# useradd -u 666 -G root,bin -c "test user" -d /liming -s /bin/bash liming
[root@192 ~]# grep liming /etc/passwd
liming:x:666:666:test user:/liming:/bin/bash
[root@192 ~]# ll -d /liming
drwx------. 4 liming liming 4096 1224 04:04 /liming

/etc/default/useradd里面定义了建立用户的默认信息

说明
GROUP=100 用户默认组
HOME=/home 用户家目录
INACTIVE=-1 密码过期宽限天数(shadow文件第七个字段)
EXPIRE= 密码失效时间(shadow文件第八个字段)
SHELL=/bin/bash 默认shell
SKEL=/etc/skel 模板目录
CREATE_MALL_SPOOL=yes 是否建立邮箱
[root@192 ~]# vim /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

/etc/login.defs

说明
PASS_MAX_DAYS 99999 密码有效期(shadow文件第五个字段)
PASS_MIN_DAYS 0 密码修改间隔(shadow文件第四个字段)
PASS_MIN_LEN 5 密码最小5位(PAM)现在为PAM生效,5位密码不生效
PASS_WARN_AGE 7 密码到期警告(shadow文件第六个字段)
UID_MIN 500 最小UID范围
GID_MAX 60000 最大UID范围
ENCRYPT_METHOD SHA512 加密模式

修改用户密码passwd

语法 说明 选项 说明
passwd [选项] 用户名 修改用户密码 -S 查询用户密码的密码状态。仅root用户可以
-l 暂时锁定用户。仅root用户可用
-u 解锁用户。仅root用户可用
–stdin 可以通过管道符(|)输出的数据作为用户的密码

passwd 用户名 root用户给普通用户修改密码

passwd liming

普通用户自己修改密码,例如使用liming用户登录修改密码,直接使用passwd,需要先确认密码后才能修改密码

passwd

passwd -S 用户名 查询用户密码的密码状态,例如下面的查询,用户密码设定时间(2020-12-23),密码修改时间间隔(0),密码有效期(99999),警告时间(7),密码不失效(-1),实际显示的就是/etc/shadow文件信息

[root@192 ~]# passwd -S liming
liming PS 2020-12-23 0 99999 7 -1 (密码已设置,使用 SHA512 加密。)
[root@192 ~]# cat /etc/shadow | grep liming
liming:$6$0w2tQQRH$Eyjew7YZWX/s5s3XDrjpxkbbsnVBbulByFaZ7bfkSuuC/uPH9HfR.2lfmvRymMa3Z6vdvNTxsp8isr.0ip6.c/:18619:0:99999:7:::

passwd -l 用户名 锁定用户,查看shadow文件可以看出密码前有!!,表示这个用户被锁定了

[root@192 ~]# passwd -l liming #
锁定用户 liming 的密码 。
passwd: 操作成功
[root@192 ~]# vim /etc/shadow
liming:!!$6$0w2tQQRH$Eyjew7YZWX/s5s3XDrjpxkbbsnVBbulByFaZ7bfkSuuC/uPH9HfR.2lfmvRymMa3Z6vdvNTxsp8isr.0ip6.c/:18619:0:99999:7:::

passwd -u 用户名 解锁用户,查看shadow文件可以看出密码前的!!被删除了,表示这个用户被解锁了

[root@192 ~]# passwd -u  liming
解锁用户 liming 的密码 。
passwd: 操作成功
[root@192 ~]# vim /etc/shadow
liming:$6$0w2tQQRH$Eyjew7YZWX/s5s3XDrjpxkbbsnVBbulByFaZ7bfkSuuC/uPH9HfR.2lfmvRymMa3Z6vdvNTxsp8isr.0ip6.c/:18619:0:99999:7:::

echo "123" | passwd —stdin [用户名] 使用字符串作为用户的密码

echo "123" | passwd —stdin liming

修改用户信息usermod

语法 说明 选项 说明
usermod [选项] 用户名 修改用户信息 -u UID 修改用户的UID号
-c 用户说明 修改用户的说明信息
-G 组名 修改用户的附加组
-L 临时锁定用户(Lock)
-U 解锁用户锁定(Unlock)

以下例子修改用户liming的用户说明为my user,加入root附加组,修改的uid号为550

[root@192 ~]# cat /etc/passwd
liming:x:666:666:test user:/liming:/bin/bash
[root@192 ~]# usermod -c "my user" -G root -u 550 liming
[root@192 ~]# cat /etc/passwd
liming:x:550:666:my user:/liming:/bin/bash

锁定liming用户,此时/etc/shadow 文件liming用户密码前多一个!

[root@192 ~]# usermod -L liming
[root@192 ~]# vim /etc/shadow
liming:!$6$0w2tQQRH$Eyjew7YZWX/s5s3XDrjpxkbbsnVBbulByFaZ7bfkSuuC/uPH9HfR.2lfmvRymMa3Z6vdvNTxsp8isr.0ip6.c/:18619:0:99999:7:::

解锁liming用户,此时/etc/shadow 文件liming用户密码前的!被删除

[root@192 ~]# usermod -U liming
[root@192 ~]# vim /etc/shadow
liming:$6$0w2tQQRH$Eyjew7YZWX/s5s3XDrjpxkbbsnVBbulByFaZ7bfkSuuC/uPH9HfR.2lfmvRymMa3Z6vdvNTxsp8isr.0ip6.c/:18619:0:99999:7:::

修改用户密码状态chage

语法 说明 选项 说明
chage [选项] 用户名 修改用户密码状态 -l 列出用户的详细密码状态
-d 日期 修改密码最后一次更新时间(shadow文件第三个字段)
-m 天数 两次修改密码间隔(shadow文件第四个字段)
-M 天数 密码有效期(shadow文件第五个字段)
-W 天数 密码过期前警告天数(shadow文件第六个字段)
-I 天数 密码过期后宽限天数(shadow文件第七个字段)
-E 日期 账号失效时间(shadow文件第八 个字段)

例子重要用法:
chage -d 0 [用户名]这个命令其实是把密码修改日期归0了,这样用户一登陆就要修改密码(学校,公司身份系统修改初始密码)

删除用户userdel

语法 说明 选项 说明
userdel [-r] 用户名 删除用户 -r 删除用户的同时删除用户家目录

查看用户ID

id 用户名 以下例子查询liming用户的用户ID

[root@192 ~]# id liming
uid=550(liming) gid=666(liming) 组=666(liming),0(root)

用户切换命令su

语法 说明 选项 说明
su [选项] 用户 用户切换命令 - 选项只使用“-”代表连带用户的环境变量一起切换
-c 仅执行一次命令,而不切换用户身份

env查看用户环境变量

普通用户liming切换成超级用户root

[liming@192 ~]$ su - root

不切换成root,但是执行useradd命令添加user1用户

[root@192 ~]# su - root -c "useradd user1" 

用户组管理命令

添加用户组

语法 说明 选项 说明
groupadd [选项] 组名 添加用户组 -g GID 指定组ID

添加用户组tg,可以在/etc/group下查看组信息

[root@quan ~]# groupadd tg
[root@quan ~]# vi /etc/group
tg:x:1000:

修改用户组

语法 说明 选项 说明
groupmod [选项] 组名 修改用户组 -g GID 修改组ID
-n 新组名 修改组名

把用户组tg修改为新组名lampgroup,可以在/etc/group下查看组名被修改了

[root@quan ~]# groupmod -n lampgroup tg
[root@quan ~]# vi /etc/group
lampgroup:x:1000:

删除用户组

语法 说明 选项 说明
groupdel 组名 删除用户组

删除组lampgroup,如果用户组有初始用户,需要先删除初始用户,然后才能删除用户组

[root@quan ~]# groupdel lampgroup

用户添加入组、从组中删除

语法 说明 选项 说明
gpasswd 选项 组名 把用户添加入组或者从组中删除 -a 用户名 把用户加入组
-d 用户名 把用户从组中删除

把用户user1和user2添加进root组,在/etc/group中可以看到用户user1和user被加入了root组

[root@iZuf6fhk4slpwaz2668zqyZ ~]# gpasswd -a user1 root
Adding user user1 to group root
[root@iZuf6fhk4slpwaz2668zqyZ ~]# gpasswd -a user2 root
Adding user user2 to group root
[root@quan ~]# vi /etc/group
root:x:0:user1,user2

把用户user1从root用户组中删除,在/etc/group中可看到只剩下user2用户

[root@iZuf6fhk4slpwaz2668zqyZ ~]# gpasswd -d user1 root
Removing user user1 from group root
[root@quan ~]# vi /etc/group
root:x:0:user2

ACL权限

ACL权限简介与开启

  • ACL权限是为了解决所有者,所属组,其他人三个权限用户身份分配不足的问题

  • 查看分区ACL权限是否开启

    dumpe2fs命令是查询指定分区详细文件系统信息的命令

    语法 说明 选项 说明
    dumpe2fs -h [分区] 查看分区ACL权限是否开启 -h 仅显示超级块中信息,而不显示磁盘块组的详细信息

    先使用df命令来检查linux服务器的文件系统的磁盘空间占用情况

    [root@192 ~]# df -h
    文件系统 容量 已用 可用 已用%% 挂载点
    /dev/sda5 17G 3.0G 13G 19% /
    tmpfs 504M 100K 504M 1% /dev/shm
    /dev/sda1 194M 27M 158M 15% /boot
    /dev/sda2 2.0G 35M 1.8G 2% /home
    /dev/sr0 3.5G 3.5G 0 100% /media/CentOS_6.3_Final

    可以看到Default mount options: user_xattr acl 选项默认开启ACL权限

    [root@192 ~]# dumpe2fs -h /dev/sda5
    dumpe2fs 1.41.12 (17-May-2010)
    Filesystem volume name: <none>
    Last mounted on: /
    Filesystem UUID: c366cfac-a7b2-4c81-821e-0cdb30c41189
    Filesystem magic number: 0xEF53
    Filesystem revision #: 1 (dynamic)
    Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
    Filesystem flags: signed_directory_hash
    Default mount options: user_xattr acl
    Filesystem state: clean
    Errors behavior: Continue
    Filesystem OS type: Linux
    Inode count: 1105920
    Block count: 4423168
    Reserved block count: 221158
    Free blocks: 3579940
    Free inodes: 1010371
    First block: 0
    Block size: 4096
    Fragment size: 4096
    Reserved GDT blocks: 1022
    Blocks per group: 32768
    Fragments per group: 32768
    Inodes per group: 8192
    Inode blocks per group: 512
    Flex block group size: 16
    Filesystem created: Sat Dec 19 03:08:34 2020
    Last mount time: Fri Dec 25 03:05:23 2020
    Last write time: Thu Dec 24 03:57:47 2020
    Mount count: 7
    Maximum mount count: -1
    Last checked: Sat Dec 19 03:08:34 2020
    Check interval: 0 (<none>)
    Lifetime writes: 4944 MB
    Reserved blocks uid: 0 (user root)
    Reserved blocks gid: 0 (group root)
    First inode: 11
    Inode size: 256
    Required extra isize: 28
    Desired extra isize: 28
    Journal inode: 8
    First orphan inode: 262644
    Default directory hash: half_md4
    Directory Hash Seed: 1d093332-fd3e-4c87-9037-c6723db0036e
    Journal backup: inode blocks
    Journal features: journal_incompat_revoke
    日志大小: 128M
    Journal length: 32768
    Journal sequence: 0x00000dc1
    Journal start: 1
  • 临时开启分区ACL权限
    mount -o remount,acl / 重新挂载根分区,并挂载加入acl权限

  • 永久开启分区ACL权限

    UUID=c366cfac-a7b2-4c81-821e-0cdb30c41189 / ext4 defaults 1 1在defaults加,acl 成为

    UUID=c366cfac-a7b2-4c81-821e-0cdb30c41189 / ext4 defaults,acl 1 1

    然后输入:mount -o remount / 重新挂载文件系统或重启系统,使修改生效。.Linux现在一般所有分区全部默认开启ACL,不用修改配置

    [root@192 ~]# vim /etc/fstab
    UUID=c366cfac-a7b2-4c81-821e-0cdb30c41189 / ext4 defaults 1 1
    UUID=3e401044-f7fb-4d49-82db-407777070199 /boot ext4 defaults 1 2
    UUID=dc8ad216-0bf7-43ee-8ec4-b72f355b8b3b /home ext4 defaults 1 2
    UUID=89afb8d7-db25-4bd2-9ffe-8df3df50bf21 swap swap defaults 0 0
    tmpfs /dev/shm tmpfs defaults 0 0
    devpts /dev/pts devpts gid=5,mode=620 0 0
    sysfs /sys sysfs defaults 0 0
    proc /proc proc defaults 0 0

ACL权限查看与设定

查看ACL权限

语法 说明 选项 说明
getfacl 文件名 查看ACL权限

设定ACL权限

语法 说明 选项 说明
setfacl [选项] 文件名 设定ACL权限 -m 设定ACL权限
-x 删除指定的ACL权限
-b 删除所有的ACL权限
-d 设定默认的ACL权限
-k 删除默认ACL权限
-R 递归设定ACL权限
  • 给用户设置acl权限

    [root@192 ~]# mkdir /project                                 # 创建目录/project
    [root@192 ~]# useradd bimm # 添加用户bimm
    [root@192 ~]# useradd cangls # 添加用户cangls
    [root@192 ~]# groupadd tgroup # 创建组tgroup
    [root@192 ~]# gpasswd -a bimm tgroup # 把用户bimm添加进组tgroup
    Adding user bimm to group tgroup
    [root@192 ~]# gpasswd -a cangls tgroup # 把用户cangls添加进组tgroup
    Adding user cangls to group tgroup
    [root@192 ~]# cat /etc/group # 查看组中用户是否添加成功
    tgroup:x:667:bimm,cangls
    [root@192 ~]# chown root:tgroup /project # 改变目录/project所有者为root用户,所属组为tgroup
    [root@192 ~]# chmod 770 /project/ # 改变文件权限为770 rwxrwx---
    [root@192 ~]# ll -d /project/
    drwxrwx---. 2 root tgroup 4096 12月 25 04:27 /project/
    [root@192 ~]# useradd st # 创建用户st,用户st是一个临时用户,在所有者,所属组,其他人之外的临时用户
    [root@192 ~]# passwd st # 设置用户st 密码
    [root@192 ~]# setfacl -m u:st:rx /project/ # 设置用户st的acl权限为rx
    [root@192 ~]# ll -d /project/ # 这里可以看到权限后面多了一个+号 rwxrwx---+
    drwxrwx---+ 2 root tgroup 4096 12月 25 04:27 /project/
    [root@192 ~]# getfacl /project/ # 查看目录的acl权限
    getfacl: Removing leading '/' from absolute path names
    # file: project/ # 文件
    # owner: root # 所有者
    # group: tgroup # 所属组
    user::rwx # 文件所有者权限 rwx
    user:st:r-x # 用户st的acl权限 r-x
    group::rwx # 文件所属组权限 rwx
    mask::rwx
    other::--- # 其他人权限 rwx
  • 给用户组设定ACL权限

    [root@192 ~]# groupadd tgroup2                             # 创建用户组tgroup2     
    [root@192 ~]# setfacl -m g:tgroup2:rwx /project # 给用户组设置rwx权限
    [root@192 ~]# getfacl /project/ # 查看目录的acl权限
    getfacl: Removing leading '/' from absolute path names
    # file: project/
    # owner: root
    # group: tgroup
    user::rwx
    user:st:r-x
    group::rwx
    group:tgroup2:rwx # 用户组 tgroup2 的 acl 权限
    mask::rwx
    other::---

最大有效权限

mask是用来指定最大有效权限的。如果给用户赋予了ACL权限,是需要和mask 的权限“相与”才能得到用户的真正权限

A B and
r r r
r - -
- r -
- - -

以下例子设定mask最大有效权限为rx,加注释的effective表示现在拥有的权限

[root@192 ~]# setfacl -m m:rx /project
[root@192 ~]# getfacl /project/
getfacl: Removing leading '/' from absolute path names
# file: project/
# owner: root
# group: tgroup
user::rwx
user:st:r-x
group::rwx #effective:r-x
group:tgroup2:rwx #effective:r-x
mask::r-x
other::---

删除ACL权限

[root@192 ~]# setfacl -x g:tgroup2 /project/               # 删除tgroup2的acl权限,setfacl -x u:用户名 文件名 删除指定用户的ACL权限
[root@192 ~]# getfacl /project/
getfacl: Removing leading '/' from absolute path names
# file: project/
# owner: root
# group: tgroup
user::rwx
user:st:r-x
group::rwx
mask::rwx
other::---
[root@192 ~]# setfacl -b /project/ # 删除目录下所有acL权限
[root@192 ~]# getfacl /project/
getfacl: Removing leading '/' from absolute path names
# file: project/
# owner: root
# group: tgroup
user::rwx
group::rwx
other::---
[root@192 ~]# ll -d /project/
drwxrwx---. 2 root tgroup 4096 12月 25 04:27 /project/

递归ACL权限

递归ACL权限,递归是父目录在设定ACL权限时,所有的子文件和子目录也会拥有相同的ACL权限。
命令:setfacl -m u:用户名:权限 -R 目录名

[root@192 ~]# setfacl -m u:st:rx /project
[root@192 ~]# cd /project/
[root@192 project]# touch abc
[root@192 project]# touch bcd
[root@192 project]# setfacl -m u:st:rx /project/
[root@192 project]# ll -d /project/
drwxrwx---+ 2 root tgroup 4096 12月 27 04:38 /project/
[root@192 project]# setfacl -m u:st:rx -R /project/ #给project目录下的所有文件都设置acl权限
[root@192 project]# ll
总用量 8
-rw-r-xr--+ 1 root root 0 12月 27 04:38 abc
-rw-r-xr--+ 1 root root 0 12月 27 04:38 bcd

默认ACL权限

默认ACL权限的作用是如果给父目录设定默认ACL权限,那么父目录中所有新建的子文件和子目录都会继承父目录的ACL权限
命令:setfacl -m d:u:用户名:权限 目录名 可以在权限后面加-R来进行递归

[root@192 project]# setfacl -m d:u:st:rx -R /project/       # 设置默认acl权限
[root@192 project]# touch cde # 新创建的文件也具备了acl权限
[root@192 project]# ll
总用量 12
-rw-r-xr--+ 1 root root 0 12月 27 04:38 abc
-rw-r-xr--+ 1 root root 0 12月 27 04:38 bcd
-rw-rw----+ 1 root root 0 12月 27 04:45 cde

文件特殊权限

SetUID

  1. 只有可以执行的二进制程序才能设定SUID权限,普通文件或者目录没有意义

  2. 命令执行者要对该程序拥有x(执行)权限

  3. 命令执行者在执行该程序时获得该程序文件属主的身份(在执行程序的过程中灵魂附体为文件的属主)

  4. SetUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效

passwd命令拥有SetUID权限,所以普通用户可以修改自己的密码

[root@192 ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 25980 2月 22 2012 /usr/bin/passwd

cat命令没有SetUID权限,所以普通用户不能查看/etc/shadow文件内容

[root@192 ~]# ll /bin/cat
-rwxr-xr-x. 1 root root 47976 6月 22 2012 /bin/cat

设定SetUID的方法

4代表SUID权限

chmod 4755 文件名 7代表所有者权限,5代表所属组权限,5代表其他人

[root@192 tmp]# touch test                      # 创建空文件test
[root@192 tmp]# ll test # test文件默认权限 rw-r--r--
-rw-r--r--. 1 root root 0 12月 29 05:35 test
[root@192 tmp]# chmod 4755 test # 设定SUID权限
[root@192 tmp]# ll test # 文件权限变为rwsr-xr-x,其中s代表SUID权限
-rwsr-xr-x. 1 root root 0 12月 29 05:35 test

chmod u+s 文件名 如果用户对文件没有执行权限,就会报错,此时给他加特殊权限,就会显示大S

[root@192 tmp]# chmod u+s test                   # 设定SUID权限
[root@192 tmp]# ll test # 注意:这里大S代表没有可执行权限,因为test是一个空文件,不具备x(执行)权限
-rwSr--r--. 1 root root 0 12月 29 05:35 test
取消SetUID的方法

chmod 755 文件名
chmod u-s 文件名

[root@192 tmp]# chmod 644 test                #取消SetUID权限,把权限指回去就行
[root@192 tmp]# ll test
-rw-r--r--. 1 root root 0 12月 29 05:35 test
危险的SetUID
  1. 关键目录应当严格控制写权限。比如:“/”,“/usr”等
  2. 用户的密码设置要严格遵守密码三原则
  3. 对系统中默认应该具有SetUID权限的文件作一列表,定时检查有没有这之外的文件被设置了SetUID权限

SetGID

  1. SetGID针对文件的作用

    • 只有可以执行的二进制程序才能设定SGID权限

    • 命令执行者要对该程序拥有x(执行)权限

    • 命令执行在执行程序的时候,组身份升级为该程序文件的所属组

    • SetGID权限同样只在该程序执行过程中有效,也就是说组身份改变只在程序执行过程中有效

      locate 命令拥有SetGID权限,所以普通用户可以使用locate来查询。

      • /usr/bin/locate是可执行二进制程序,可以赋予SGID
      • 执行用户lamp对/usr/bin/locate命令拥有执行权限
      • 执行/usr/bin/locate命令时,组身份会升级为 slocate组,而 slocate对/var/lib/mlocate/mlocate.db数据库拥有r权限,所以普通用户可以使用 locate命令查询 locate.db数据库
      • 命令结束,lamp用户的组身份返回为lamp组
      [root@192 tmp]# whereis locate                                              # 查找locate命令所在位置
      locate: /usr/bin/locate /usr/share/man/man1/locate.1.gz
      [root@192 tmp]# ll /usr/bin/locate # 组中s代表SetGID权限
      -rwx--s--x. 1 root slocate 35612 8月 24 2010 /usr/bin/locate
      [root@192 tmp]# ll /var/lib/mlocate/mlocate.db
      -rw-r-----. 1 root slocate 2435463 12月 27 05:24 /var/lib/mlocate/mlocate.db
  2. SetGID针对目录的作用

    • 普通用户必须对此目录拥有r和x权限,才能进入此目录
    • 普通用户在此目录中的有效组会变成此目录的所属组
    • 若普通用户对此目录拥有w权限时,新建的文件的默认所属组是这个目录的所属组
设定SetGID的方法

2代表SGID权限

chmod 2755 文件名
chmod g+s 文件名

[root@192 tmp]# mkdir test                          # 在/tmp目录下创建目录test
[root@192 tmp]# chmod 2777 test # 设定SGID权限
[root@192 tmp]# ll -d test # s代表SGID权限
drwxrwsrwx. 2 root root 4096 12月 29 06:08 test
[root@192 tmp]# su - sc # 切换为普通用户sc
[sc@192 tmp]$ touch bv # 普通用户创建文件bv,文件的所属组是sc
[sc@192 tmp]$ ll
总用量 68
-rw-rw-r--. 1 sc sc 0 12月 29 06:14 bv
[sc@192 ~]$ cd /tmp/test/
[sc@192 test]$ touch abc # 使用普通用户创建的文件在/tmp/test目录下所属组是root
[sc@192 test]$ ll
总用量 0
-rw-rw-r--. 1 sc root 0 12月 29 06:10 abc
取消SetUID的方法

chmod 755 文件名
chmod g-s 文件名

Sticky BIT

SBIT粘着位作用
  • 粘着位目前只对目录有效

  • 普通用户对该目录拥有w和x权限,即普通用户可以在此目录拥有写入权限

  • 如果没有粘着位,因为普通用户拥有w权限,所以可以删除此目录下所有文件,包括其他用户建立的文件。一旦赋予了粘着位,除了root可以删除所有文件,普通用户就算拥有了w权限,也只能删除自己建立的文件,但是不能删除其他用户建立的文件

    [root@192 ~]# ll -d /tmp/                         # /tmp/目录其他人的权限是rwt,其中t是SBIT权限
    drwxrwxrwt. 22 root root 4096 12月 29 06:14 /tmp/
    [root@192 ~]# su - sc # 切换为 su 用户
    [sc@192 ~]$ cd /tmp/
    [sc@192 tmp]$ touch sc-test # 使用su用户创建文件sc-test
    [sc@192 tmp]$ ls
    sc-test
    [sc@192 ~]$ su - user1 # 切换为 usr1 用户
    [user1@192 ~]$ cd /tmp/
    [user1@192 tmp]$ ll
    总用量 68
    -rw-rw-r--. 1 sc sc 0 12月 29 06:28 sc-test
    [user1@192 tmp]$ rm -rf /tmp/ # 删除的时候报错,虽然其他人对/tmp目录有删除权限,由于SBIT的作用,其他人依然不能删除/tmp,只允许创建目录的用户sc删除
    rm: 无法删除"/tmp/sc-test": 不允许的操作
设定粘着位的方法

1代表粘着位

chmod 1755 目录名
chmod o+t 目录名

[root@192 ~]# mkdir /test
[root@192 ~]# ll -d /test/
drwxr-xr-x. 2 root root 4096 12月 29 06:41 /test/
[root@192 ~]# chmod 1755 /test/
[root@192 ~]# ll -d /test/ # t代表SBIT
drwxr-xr-t. 2 root root 4096 12月 29 06:41 /test/
取消粘着位的方法

chmod 755 目录名
chmod o-t 目录名

文件系统属性chattr权限

  1. 命令:chattr [+ - =] [选项] 文件名或者目录名

    • +增加权限 -删除权限 =等于某权限
    • i: 如果对文件设置i属性,那么不允许对文件进行删除,改名,也不能添加和修改数据;如果对目录设置i属性,那么只能修改目录下文件的数据,但是不允许建立和删除文件
    • a:如果对文件设置a属性,那么只能在文件中增加数据,但是不能删除或者修改数据;如果对目录设置a属性,那么只允许在目录中建立和修改文件,但是不允许删除文件
  2. 查看文件系统属性

    lsattr [选项] 文件名

    • -a:显示所有文件和目录
    • -d:若目标是目录,仅列出目录本身的属性,而不是子文件的
[root@192 tmp]# touch test.txt          # 创建test.txt空文件
[root@192 tmp]# chattr +i test.txt # 给test.txt文件增加i权限
[root@192 tmp]# lsattr -a test.txt # 查看test.txt文件权限
----i--------e- test.txt
[root@192 tmp]# echo 111 >> test.txt # root超级管理员也不能写入内容
-bash: test.txt: 权限不够
[root@192 tmp]# rm -rf test.txt # root超级管理员也不能删除文件
rm: 无法删除"test.txt": 不允许的操作

[root@192 tmp]# mkdir test # 创建test目录
[root@192 tmp]# touch /test/test.text # 在test目录目录下创建test.text文件
[root@192 tmp]# chattr +i /test/ # 给test目录增加i权限
[root@192 tmp]# lsattr -a /test/ # 查看test目前权限
-------------e- /test/test.text
--------------- /test/..
----i--------e- /test/.
[root@192 tmp]# echo 222 >> /test/test.text # 可以在test.text文件中写入内容
[root@192 tmp]# rm -rf /test/test.text # 不能删除test目录下的内容
rm: 无法删除"/test/test.text": 权限不够
[root@192 tmp]# touch /test/test.yml # 不能在test目录下新增文件
touch: 无法创建"/test/test.yml": 权限不够

[root@192 tmp]# chattr -i /test/ # 删除test目录i权限
[root@192 tmp]# rm -rf test # test目录此时可以删除

系统命令sudo权限

  1. sudo权限
    • root把本来只能超级用户执行的命令赋予普通用户执行
    • sudo的操作对象是系统命令
  2. sudo使用
    • visudo 实际修改的是/etc/sudoers文件
    • root ALL=(ALL) ALL 用户名 被管理主机的地址=(可使用身份) 授权命令(绝对路径)
    • %wheel ALL=(ALL) ALL %组名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
    • 被管理主机的地址:本机IP或者ALL,限制的不是来源IP,而是访问IP
[root@192 tmp]# visudo             # 授权用户sc可以可以重启服务器
sc ALL=/sbin/shutdown -r now
[root@192 ~]# su - sc # 切换为sc用户
[sc@192 ~]$ sudo -l # 查看可用的sudo命令
[sudo] password for sc:
Matching Defaults entries for sc on this host:
requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC
KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME
LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET
XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

User sc may run the following commands on this host:
(root) /sbin/shutdown -r now
[sc@192 ~]$ sudo /sbin/shutdown -r now # 普通用户sc执行sudo赋予的重启命令