1,用户权限
[root@localhost ~]# ls -l
total 24
-rw-r--r--. 1 root root 12 Jul 29 15:29 10.txt
drwxrwxrwx. 2 root root 6 Jul 24 10:55 www
-rw-r--r--. 1 root root 10 Jul 31 10:25 z.txt
- /d 文件的类型
rw-r--r-- 权限
三种身份: rw- 属主 r-- 属组 r-- 陌生人 (每三个字符是一组)
User Group Others
u g o
每个角色对应三种权限:
r 可读 4
w 可写 2
x 可执行 1
- 权限占位符 没有权限 0
权限的执行过程:系统会判断这个用户是否是文件的属主,如果是就按照属主的权限执行;如果不是就判断用户是否是是文件的属组,是就按照属组的权限执行;如果不是就按照陌生人的权限执行
设置权限: chmod
选项: -R 递归设置针对当前目录及目录以下所有文件进行权限修改
+ 添加权限
- 收回权限
= 覆盖权限
设置权限的方法:
字母设置
[root@localhost ~]# ll
total 24
-rw-r--r--. 1 root root 12 Jul 29 15:29 10.txt
#属主增加执行权限
[root@localhost ~]# chmod u+x 10.txt
[root@localhost ~]# ll 10.txt
-rwxr--r--. 1 root root 12 Jul 29 15:29 10.txt
#属组减去可读权限
[root@localhost ~]# chmod g-r 10.txt
[root@localhost ~]# ll 10.txt
-rwx---r--. 1 root root 12 Jul 29 15:29 10.txt
#陌生人加上可读执行权限
[root@localhost ~]# chmod o+wx 10.txt
[root@localhost ~]# ll 10.txt
-rwx---rwx. 1 root root 12 Jul 29 15:29 10.txt
# 所有减去可读权限 , a代表所有
[root@localhost ~]# ll 10.txt
-rwx-wxrw-. 1 root root 12 Jul 29 15:29 10.txt
[root@localhost ~]# chmod a-w 10.txt
[root@localhost ~]# ll 10.txt
-r-x--xr--. 1 root root 12 Jul 29 15:29 10.txt
# 用逗号分隔,多次设置
[root@localhost ~]# chmod u+w,g+r 10.txt
[root@localhost ~]# ll 10.txt
-rwxr-xr--. 1 root root 12 Jul 29 15:29 10.txt
# 直接覆盖属主的权限为可写
[root@localhost ~]# chmod u=w 10.txt
[root@localhost ~]# ll 10.txt
--w-r-xr--. 1 root root 12 Jul 29 15:29 10.txt
数字设置
权限是使用八进制的数字进行标示权限 0-7
把每个角色的权限相加 rwx=7 rw=6 wx=3
[root@localhost ~]# ll file1
-rw-r--r--. 1 root root 58 Jul 30 14:43 file1
[root@localhost ~]# chmod 622 file1
[root@localhost ~]# ll file1
-rw--w--w-. 1 root root 58 Jul 30 14:43 file1
2,权限对文件及目录的影响
对文件的影响 (注意不能在root用户下创建文件)
r 可读 读取文件内容
w 可写 修改,编辑文件内容
x 可执行 执行文件 执行脚本
- 没有权限 没有任何操作权限
# r 权限 只能读取文件的内容,不能编辑追加,删除复制
[root@babysnow ~]# touch /opt/abc.txt
[root@babysnow ~]# echo '1235'>/opt/abc.txt
[root@babysnow ~]# cat /opt/abc.txt
1235
[root@babysnow ~]# su - snow001
[snow001@babysnow ~]$ cat /opt/abc.txt
1235
[snow001@babysnow ~]$ echo 'jjjjjj'>/opt/abc.txt
-bash: /opt/abc.txt: Permission denied
[snow001@babysnow ~]$ rm -f /opt/abc.txt
rm: cannot remove ‘/opt/abc.txt’: Permission denied
[snow001@babysnow ~]$ mv /opt/abc.txt ./abcc.txt
mv: cannot move ‘/opt/abc.txt’ to ‘./abcc.txt’: Permission denied
# w 权限 , 只能追加,或覆盖源文件,不能查看内容,复制
[root@babysnow ~]# chmod o=w /opt/abc.txt
[root@babysnow ~]# ll /opt/abc.txt
-rw-r---w-. 1 root root 5 Aug 2 19:33 /opt/abc.txt
[root@babysnow ~]# su - snow001
[snow001@babysnow ~]$ cat /opt/abc.txt
cat: /opt/abc.txt: Permission denied
[snow001@babysnow ~]$ echo '2222'>>/opt/abc.txt
[snow001@babysnow ~]$ cp /opt/abc.txt /etc/aaa.txt
cp: cannot open ‘/opt/abc.txt’ for reading: Permission denied
# x 权限 啥也做不了
[root@babysnow ~]# chmod o=x /opt/abc.txt
[root@babysnow ~]# ll /opt/abc.txt
-rw-r----x. 1 root root 10 Aug 2 19:38 /opt/abc.txt
[root@babysnow ~]# su - snow001
Last login: Sun Aug 2 19:38:22 CST 2020 on pts/0
[snow001@babysnow ~]$ cat /opt/abc.txt
cat: /opt/abc.txt: Permission denied
[snow001@babysnow ~]$ echo 'ddh'>/opt/abc.txt
-bash: /opt/abc.txt: Permission denied
[snow001@babysnow ~]$ cp /opt/abc.txt /etc/aaa.txt
cp: cannot open ‘/opt/abc.txt’ for reading: Permission denied
# rx 权限, 可以正常读取和执行文件,不能修改复制文件
[root@babysnow ~]# chmod o=rx /opt/abc.txt
[root@babysnow ~]# ll /opt/abc.txt
-rw-r--r-x. 1 root root 10 Aug 2 19:38 /opt/abc.txt
[root@babysnow ~]# su - snow001
[snow001@babysnow ~]$ cat /opt/abc.txt
1235
2222
[snow001@babysnow ~]$ echo 'hhhh'>>/opt/abc.txt
-bash: /opt/abc.txt: Permission denied
[snow001@babysnow ~]$ cp /opt/abc.txt /etc/acb.txt
cp: cannot create regular file ‘/etc/acb.txt’: Permission denied
[snow001@babysnow ~]$ /opt/abc.txt
/opt/abc.txt: line 1: 1235: command not found
/opt/abc.txt: line 2: 2222: command not found
# wx 权限,只能追加或者覆盖文件
[root@babysnow ~]# chmod o=wx /opt/abc.txt
[root@babysnow ~]# ll /opt/abc.txt
-rw-r---wx. 1 root root 10 Aug 2 19:38 /opt/abc.txt
[snow001@babysnow ~]$ cat /opt/abc.txt
cat: /opt/abc.txt: Permission denied
[snow001@babysnow ~]$ echo '222'>>/opt/abc.txt
[snow001@babysnow ~]$ cp /opt/abc.txt /etc/aaa.txt
cp: cannot open ‘/opt/abc.txt’ for reading: Permission denied
[snow001@babysnow ~]$ vim /opt/abc.txt
[snow001@babysnow ~]$ /opt/abc.txt
bash: /opt/abc.txt: Permission denied
# rw权限 可以正常读写,可以用vim
[root@babysnow ~]# chmod o=rw /opt/abc.txt
[root@babysnow ~]# ll /opt/abc.txt
-rw-r--rw-. 1 root root 14 Aug 2 19:50 /opt/abc.txt
[root@babysnow ~]# su - snow001
Last login: Sun Aug 2 19:49:53 CST 2020 on pts/0
[snow001@babysnow ~]$ cat /opt/abc.txt
1235
2222
222
[snow001@babysnow ~]$ echo 'pppp'>>/opt/abc.txt
[snow001@babysnow ~]$ cp /opt/abc.txt /etc/aaa.txt
对目录的影响
r 具有浏览目录下的列表及属性信息
w 拥有新建 删除 移动目录中文件的权利
x 拥有进入文件的权利 cd
- 没有权限
[root@babysnow ~]# mkdir /opt/test
[root@babysnow ~]# touch /opt/test/test{1,2}
[root@babysnow ~]# ll /opt/test/
total 0
-rw-r--r--. 1 root root 0 Aug 2 20:01 test1
-rw-r--r--. 1 root root 0 Aug 2 20:01 test2
# r 权限 ,只能读取目录下的文件名,看不到目录下文件的属性
其他什么都做不了
[root@babysnow ~]# chmod o=r /opt/test
[root@babysnow ~]# ll /opt/
drwxr-xr--. 2 root root 32 Aug 2 20:01 test
-rw-r--r--. 1 root root 0 Aug 2 19:30 test1
[snow001@babysnow ~]$ ll /opt/test
ls: cannot access /opt/test/test1: Permission denied
ls: cannot access /opt/test/test2: Permission denied
total 0
-????????? ? ? ? ? ? test1
-????????? ? ? ? ? ? test2
[snow001@babysnow ~]$ cd /opt/test/
-bash: cd: /opt/test/: Permission denied
[snow001@babysnow ~]$ cp /opt/test /root
cp: omitting directory ‘/opt/test’
# w 权限 啥也干不了
[root@babysnow ~]# chmod o=w /opt/test
[root@babysnow ~]# ll /opt/
drwxr-x-w-. 2 root root 32 Aug 2 20:01 test
-rw-r--r--. 1 root root 0 Aug 2 19:30 test1
[root@babysnow ~]# su - snow001
Last login: Sun Aug 2 20:17:08 CST 2020 on pts/0
[snow001@babysnow ~]$ ll /opt/test
ls: cannot open directory /opt/test: Permission denied
[snow001@babysnow ~]$ touch /opt/test/1.txt
touch: cannot touch ‘/opt/test/1.txt’: Permission denied
[snow001@babysnow ~]$ cd /opt/test/
-bash: cd: /opt/test/: Permission denied
# x 权限 ,可以cd,可以cp,其他什么都没有
[root@babysnow ~]# chmod o=x /opt/test/
[root@babysnow ~]# ll /opt/test
total 0
-rw-r--r--. 1 root root 0 Aug 2 20:01 test1
-rw-r--r--. 1 root root 0 Aug 2 20:01 test2
[root@babysnow ~]# ll /opt/test/
total 0
-rw-r--r--. 1 root root 0 Aug 2 20:01 test1
-rw-r--r--. 1 root root 0 Aug 2 20:01 test2
[root@babysnow ~]# ll /opt
drwxr-x--x. 2 root root 32 Aug 2 20:01 test
-rw-r--r--. 1 root root 0 Aug 2 19:30 test1
[root@babysnow ~]# su - snow001
[snow001@babysnow ~]$ ll /opt/test
ls: cannot open directory /opt/test: Permission denied
[snow001@babysnow ~]$ cd /opt/test/
[snow001@babysnow test]$ mv /opt/test /root/test11
mv: failed to access ‘/root/test11’: Permission denied
[snow001@babysnow test]$ cp /opt/test/test1 /tmp/
[snow001@babysnow test]$ ll /tmp/
total 0
-rw-r--r--. 1 snow001 snow001 0 Aug 2 20:12 test1
# wx 权限 可以cd到该目录下,可以删除,移动,创建该目录到文件
[root@babysnow ~]# chmod o=wx /opt/test
[root@babysnow ~]# ll /opt/
drwxr-x-wx. 2 root root 32 Aug 2 20:01 test
-rw-r--r--. 1 root root 0 Aug 2 19:30 test1
[root@babysnow ~]# su - snow001
[snow001@babysnow ~]$ ll /opt/test
ls: cannot open directory /opt/test: Permission denied
[snow001@babysnow ~]$ touch /opt/test/1.txt
[snow001@babysnow ~]$ cp /opt/test/1.txt /root/
cp: cannot stat ‘/root/1.txt’: Permission denied
[snow001@babysnow ~]$ rm -f /opt/test/1.txt
[snow001@babysnow ~]$ mv /opt/test/test1 ./
# rx 权限 可以正常查看目录下的文件及属性
[root@babysnow ~]# chmod o=rx /opt/test
[root@babysnow ~]# ll /opt/
drwxr-xr-x. 2 root root 19 Aug 2 20:27 test
-rw-r--r--. 1 root root 0 Aug 2 19:30 test1
[snow001@babysnow ~]$ ll /opt/
drwxr-xr-x. 2 root root 19 Aug 2 20:27 test
-rw-r--r--. 1 root root 0 Aug 2 19:30 test1
[snow001@babysnow ~]$ mv /opt/test/test2 ./
mv: cannot move ‘/opt/test/test2’ to ‘./test2’: Permission denied
3,属主属组设置
[root@localhost ~]# ll /root/test
total 0
-rw-r--r--. 1 test11 test11 0 Aug 3 15:10 test1
-rw-r--r--. 1 test11 test11 0 Aug 3 15:10 test2
# 默认改变属主
[root@localhost ~]# chown root /root/test/test1
[root@localhost ~]# ll /root/test/test1
-rw-r--r--. 1 root test11 0 Aug 3 15:10 /root/test/test1
#改变属组 .root
[root@localhost ~]# chown .root /root/test/test1
[root@localhost ~]# ll /root/test/test1
-rw-r--r--. 1 root root 0 Aug 3 15:10 /root/test/test1
#也可同时改变
[root@localhost ~]# chown test11.test11 /root/test/test1
[root@localhost ~]# ll /root/test/test1
-rw-r--r--. 1 test11 test11 0 Aug 3 15:10 /root/test/test1
-R 递归设置该目录下的所有文件
[root@localhost ~]# ll /root/test/
total 0
-rw-r--r--. 1 test11 test11 0 Aug 3 15:10 test1
-rw-r--r--. 1 test11 test11 0 Aug 3 15:10 test2
[root@localhost ~]# chown -R root.root /root/test/
[root@localhost ~]# ll /root/test/test2
-rw-r--r--. 1 root root 0 Aug 3 15:10 /root/test/test2
[root@localhost ~]# ll /root/test/test1
-rw-r--r--. 1 root root 0 Aug 3 15:10 /root/test/test1
# chgrp 只能修改属组
[root@localhost ~]# chgrp test11 /root/test/test1
[root@localhost ~]# ll /root/test/test1
-rw-r--r--. 1 root test11 0 Aug 3 15:10 /root/test/test1
4, umask控制权限
# 以下为默认创建的目录和文件,目录权限 drwxr-xr-x ;文件权限 -rw-r--r--
[root@localhost ~]# ll
total 0
drwxr-xr-x. 2 root root 6 Aug 3 15:52 test
-rw-r--r--. 1 root root 0 Aug 3 15:58 test1
-rw-r--r--. 1 root root 0 Aug 3 15:58 test2
[root@localhost ~]# umask 044
[root@localhost ~]# mkdir date
[root@localhost ~]# touch date1
[root@localhost ~]# ll
total 0
drwx-wx-wx. 2 root root 6 Aug 3 16:16 date
-rw--w--w-. 1 root root 0 Aug 3 16:17 date1
drwxr-xr-x. 2 root root 19 Aug 3 16:05 test
-rw-r--r--. 1 root root 0 Aug 3 15:58 test1
-rw-r--r--. 1 root root 0 Aug 3 15:58 test2
# 以上改变umask044.
创建出的目录权限为drwx-wx-wx,最大权限777-044=733,即drwx-wx-w
文件权限为 -rw--w--w,最大权限666-044=622 即 -rw--w--w
[root@localhost ~]# umask 333
[root@localhost ~]# touch 123.txt
[root@localhost ~]# ll
total 0
-r--r--r--. 1 root root 0 Aug 3 16:30 123.txt
注意:当文件遇奇数,需加1 666-333=333,加上1即444,所以-r--r--r--
系统默认umask值为022
5,特殊权限
# setuid 权限表示在属主的x位
[root@localhost ~]# ll /usr/bin/rm
-rwxr-xr-x. 1 root root 62872 Aug 20 2019 /usr/bin/rm
[root@localhost ~]# chmod u+s /usr/bin/rm
[root@localhost ~]# ll /usr/bin/rm
-rwsr-xr-x. 1 root root 62872 Aug 20 2019 /usr/bin/rm
执行这个命令,相当于这个命令的的所有者
[test11@localhost ~]$ rm -r /opt/
[test11@localhost ~]$ ll /opt
ls: cannot access /opt: No such file or directory
[test11@localhost ~]$ mv /etc/passwd ./
mv: cannot move ‘/etc/passwd’ to ‘./passwd’: Permission denied
[root@localhost ~]# chmod u+s /usr/bin/mv
[root@localhost ~]# su - test11
Last login: Tue Aug 4 10:08:15 CST 2020 on pts/0
[test11@localhost ~]$ mv /etc/passwd /opt/
[test11@localhost ~]$ cat /opt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
。。。。。。。
# setgid 权限表示在属组的x位
#先新建个目录,该目录下建个文件
[root@localhost ~]# mkdir /opt/test
[root@localhost ~]# touch /opt/test/test1
[root@localhost ~]# ll -d /opt/test
drwxr-xr-x. 2 root root 19 Aug 4 13:33 /opt/test
[root@localhost ~]# ll -d /opt/test/
drwxr-xr-x. 2 root root 19 Aug 4 13:33 /opt/test/
[root@localhost ~]# ll -d /opt/test/test1
-rw-r--r--. 1 root root 0 Aug 4 13:33 /opt/test/test1
# 用另一个用户在该目录下也建个文件
[root@localhost ~]# su - snow1
[snow1@localhost ~]$ touch /opt/test/test2
[root@localhost ~]# ll -d /opt/test/
drwxrwxrwx. 2 root root 32 Aug 4 13:36 /opt/test/
[root@localhost ~]# ll /opt/test
-rw-r--r--. 1 root root 0 Aug 4 13:33 test1
-rw-rw-r--. 1 snow1 snow1 0 Aug 4 13:36 test2
##这里注意属主和属组
# 加上stgid权限
[root@localhost ~]# chmod g+s /opt/test/
[root@localhost ~]# ll -d /opt/test/
drwxrwsrwx. 2 root root 32 Aug 4 13:36 /opt/test/
[root@localhost ~]# stat /opt/test/ --->这一步是查看该目录权限,4777中的4代表setgid
File: ‘/opt/test/’
Size: 40 Blocks: 0 IO Block: 4096 directory
Device: 803h/2051d Inode: 67765615 Links: 2
Access: (4777/drwsrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:usr_t:s0
Access: 2020-08-04 13:16:03.520573584 +0800
Modify: 2020-08-04 13:13:56.719578719 +0800
Change: 2020-08-04 13:16:47.649571797 +0800
Birth: -
# 新建qqq组,归属于test目录的组,然后新建文件的属组就是qqq
[root@localhost ~]# groupadd qqq
[root@localhost ~]# chgrp qqq /opt/test/
[root@localhost ~]# ll -d /opt/test/
drwxrwsrwx. 2 root qqq 32 Aug 4 13:36 /opt/test/
[root@localhost ~]# touch /opt/test/test4
[root@localhost ~]# ll /opt/test/
-rw-r--r--. 1 root root 0 Aug 4 13:33 test1
-rw-rw-r--. 1 snow1 snow1 0 Aug 4 13:36 test2
-rw-r--r--. 1 root qqq 0 Aug 4 13:41 test4
# 该目录权限改为770 显示删除其他用户创建的文件没有权限
[root@localhost ~]# chmod 770 /opt/test/
[root@localhost ~]# su - snow1
[snow1@localhost ~]$ rm -f /opt/test/test1
rm: cannot remove ‘/opt/test/test1’: Permission denied
# 把snow1用户加入到qqq组
[root@localhost ~]# usermod -aG qqq snow1
[root@localhost ~]# id snow1
uid=1009(snow1) gid=1009(snow1) groups=1009(snow1),6670(qqq)
# 再执行删除其他用户创建的文件就可以了
[snow1@localhost ~]$ ll /opt/test/
-rw-r--r--. 1 root root 0 Aug 4 13:33 test1
-rw-rw-r--. 1 snow1 snow1 0 Aug 4 13:36 test
[snow1@localhost ~]$ rm -f /opt/test/test1
[snow1@localhost ~]$ ll /opt/test/
total 0
-rw-rw-r--. 1 snow1 snow1 0 Aug 4 13:36 test2
# sticky t T(主要看有没有执行权限,有就是t,没有x就是T)
[root@localhost ~]# ll -d /tmp
drwxrwxrwt. 11 root root 218 Aug 4 12:08 /tmp
[root@localhost ~]# touch /tmp/a.txt
[root@localhost ~]# su - baby1
Last login: Tue Aug 4 12:04:48 CST 2020 on pts/2
[baby1@localhost ~]$ touch /tmp/b.txt
[baby1@localhost ~]$ su - baby2
Password:
[baby2@localhost ~]$ touch /tmp/c.txt
[baby2@localhost ~]$ ll /tmp/
total 4
-rw-r--r--. 1 root root 0 Aug 4 12:20 a.txt
-rw-r--r--. 1 baby1 babyy 0 Aug 4 12:20 b.txt
# 可以查看其他文件内容,删除自己创建的文件,不可以对其他文件进行删除
[baby2@localhost ~]$ rm -f /tmp/a.txt
rm: cannot remove ‘/tmp/a.txt’: Operation not permitted
[baby2@localhost ~]$ rm -f /tmp/c.txt
[baby2@localhost ~]$ ll /tmp/
total 4
-rw-r--r--. 1 root root 0 Aug 4 12:20 a.txt
-rw-r--r--. 1 baby1 babyy 0 Aug 4 12:20 b.txt
6,特殊属性
不受权限的控制
a #针对文件操作 只能对这个文件追加内容, 查看、复制内容,不能修改移动删除
i #无敌查看,复制可以,其他说明都不允许
lsattr 查看特殊属性
chattr 设置特殊属性
[root@localhost ~]# touch 123.txt
[root@localhost ~]# ll
total 0
-rw-r--r--. 1 root root 0 Aug 3 16:39 123.txt
[root@localhost ~]# echo '12345'>123.txt
[root@localhost ~]# cat 123.txt
12345
[root@localhost ~]# chattr +a test1
[root@localhost ~]# lsattr 123.txt
-----a---------- 123.txt
[root@localhost ~]# cat 123.txt
12345
[root@localhost ~]# chattr -a test1
[root@localhost ~]# chattr +a 123.txt
[root@localhost ~]# cat 123.txt
12345
[root@localhost ~]# echo '666'>>123.txt
[root@localhost ~]# cat 123.txt
12345
666
[root@localhost ~]# mv 123.txt /opt/333.txt
mv: cannot move ‘123.txt’ to ‘/opt/333.txt’: Operation not permitted
[root@localhost ~]# rm -f 123.txt
rm: cannot remove ‘123.txt’: Operation not permitted
[root@localhost ~]# touch date1
[root@localhost ~]# echo 'abcdefg'>date1
[root@localhost ~]# chattr +i date1
[root@localhost ~]# lsattr date1
----i----------- date1
[root@localhost ~]# echo '123' >>date1
-bash: date1: Permission denied
7,输入输出
stdin 0 # 标准输入 默认从键盘从读取内容
stdout 1 # 标准输出 默认将输出的内容输出到从屏幕上
stderr 2 # 错误输出 默认将错误的输出内容输出到从屏幕上
输出重定向
> 标准覆盖输出重定向 会覆盖源文件,源文件不存在时会自己创建
>>标准追加输出重定向 将内容追加刀片文件的底部 ,源文件不存在时会自己创建
2> 标准错误覆盖输出重定向 将错误的信息 覆盖源文件的内容 ,源文件不存在时会自己创建
2>>标准错误追加输出重定向 将错误的信息追加到文件底部,源文件不存在时会自己创建
[root@localhost ~]# touch bb
[root@localhost ~]# echo '12345' >bb
[root@localhost ~]# cat bb
12345
[root@localhost ~]# echo '666'>>bb
[root@localhost ~]# cat bb
12345
666
[root@localhost ~]# cat ee 2>cc
[root@localhost ~]# cat cc
cat: ee: No such file or directory
[root@localhost ~]# ll /ppt 2>>cc
[root@localhost ~]# cat cc
cat: ee: No such file or directory
ls: cannot access /ppt: No such file or directory
# 打开2.txt 输出的正确内容到a.txt 错误到输出到b.txt
[root@babysnow ~]# cat 2.txt>a.txt 2>b.txt
[root@babysnow ~]# cat a.txt
[root@babysnow ~]# cat b.txt
cat: 2.txt: 没有那个文件或目录
# 打开bbq这个文件的内容不管是否错误都输入到file2这个文件里
[root@babysnow ~]# cat bbq.txt >file2 2>&1
[root@babysnow ~]# cat file2
cat: bbq.txt: 没有那个文件或目录
< 标准输入重定向 默认从键盘中读取内容变成从指定的命令或文件中读取内容
<< 限定标识符重定向 直到遇到限定标识符的分节符为止
[root@babysnow ~]# cat 1.txt
Ip7GK[sG<1^(Q
[root@babysnow ~]# tr 'p' 'Q' <1.txt
IQ7GK[sG<1^(Q
# 可省略的<
[root@babysnow ~]# grep -r 'root' <./
.bash_history:locate -i /root
.bash_history:wget https://liunx.web3.xin/ -qO /root/aaa
.bash_history:grep -w 'root' passwd
==
[root@babysnow ~]# grep -r 'root' ./
./.bash_history:locate -i /root
./.bash_history:wget https://liunx.web3.xin/ -qO /root/aaa
./.bash_history:grep -w 'root' passwd
[root@babysnow ~]# cat >bbq.txt<
> 123
> 2324
> 333
> abc
[root@babysnow ~]# cat bbq.txt
123
2324
333
tee
-a 追加
[root@localhost ~]# echo $|md5sum|tee aa.txt
f21e02b3bdc1281addf2a73bde17f8fa -
[root@localhost ~]# cat aa.txt
f21e02b3bdc1281addf2a73bde17f8fa -
[root@localhost ~]# echo '122222'|tee -a aa.txt
122222
[root@localhost ~]# cat aa.txt
f21e02b3bdc1281addf2a73bde17f8fa -
122222
| 管道符,即把左边的命令执行作为一个标准输出,通过管道符交给右边的命令去执行
如果执行不了 加上xargs
[root@localhost ~]# ls|tee bbb.txt
10.txt
111.txt
aaa.txt
aa.txt
anaconda-ks.cfg
bbb.txt
file1
file2
passwd
www
z.txt
[root@localhost ~]# cat bbb.txt
10.txt
111.txt
aaa.txt
aa.txt
anaconda-ks.cfg
bbb.txt
file1
file2
passwd
www
z.txt
8,文件查找 find 命令
根本文件的名称 类型 权限 属主属组 目录层次 大小
语法: find 路径 选项 表达式 动作
根据名称进行查找:
-name :根据名称查找
-iname : 查找的时候不区分大小写
# -print 为默认可不加
[root@localhost ~]# find / -name "rm"
/usr/bin/rm
/usr/share/locale/rm
=
[root@localhost ~]# find / -name "rm" -print
/usr/bin/rm
/usr/share/locale/rm
#搜索以baby为开头的文件
[root@localhost ~]# find / -name "baby*"
/var/spool/mail/baby1
/var/spool/mail/baby2
/var/spool/mail/baby3
/home/baby1
/home/baby2
/home/baby3
#搜索以bash为结尾的文件
[root@localhost ~]# find / -name "*bash"
/usr/bin/bash
/usr/lib/dracut/modules.d/00bash
/usr/share/doc/util-linux-2.23.2/getopt-parse.bash
# 查找含有[root@localhost ~]# find / -name "*sbin*" 名字保护这个字符串的都满足
/usr/sbin
/usr/lib/debug/usr/sbin
/usr/lib/debug/sbin
/usr/lib/firmware/amd/amd_sev_fam17h_model0xh.sbin
/usr/local/sbin
/sbin
根据类型查找
-type
f 普通文件
d 目录
l 软连接
c 字符设备
b 快设备
s socket文件 套接字
p 管道文件
#查找普通文件a.txt名称的文件
[root@localhost ~]#
[root@localhost ~]# find / -type f -name "a.txt"
/tmp/a.txt
/home/baby2/a.txt
#查找opt路径下的目录文件
[root@localhost ~]# find /opt -type d
/opt
/opt/anaconda
/opt/audit
/opt/user04
/opt/test
#会默认把隐藏文件查找出来
[root@localhost ~]# find /root -type f
/root/.bash_logout
/root/.bash_profile
/root/.bashrc
/root/.cshrc
/root/.tcshrc
根据目录层级查找
-maxdepth
# 注意该选项要放在最前面
[root@localhost ~]# find -maxdepth 2 -type f -name "*txt*"
./aaa.txt
./10.txt
./z.txt
./111.txt
./aa.txt
./bbb.txt
根据文件大小查找
-size
b k M G
# 查找普通文件大小为200k的文件
[root@localhost ~]# find / -type f -size 200k
find: ‘/proc/73399/task/73399/fdinfo/6’: No such file or directory
find: ‘/proc/73399/fdinfo/5’: No such file or directory
/usr/lib/modules/3.10.0-1127.el7.x86_64/kernel/arch/x86/kvm/kvm.ko.xz
/usr/lib/python2.7/site-packages/yum/__init__.pyc
/usr/share/locale/sv/LC_MESSAGES/binutils.mo
#查找大于5k的普通文件 (会把文件大小进行凑整)
[root@localhost ~]# find /var/log -size +5k
/var/log/tallylog
/var/log/lastlog
/var/log/wtmp
/var/log/audit/audit.log
/var/log/anaconda/anaconda.log
/var/log/anaconda/syslog
# 查找小于1k的文件
[root@localhost ~]# find /var/log -size -1k
/var/log/anaconda/ks-script-vEWePy.log
/var/log/anaconda/ks-script-yKmYMu.log
/var/log/boot.log
/var/log/firewalld
/var/log/spooler-20200730
/var/log/spooler-20200723
/var/log/btmp
#查找空文件
[root@localhost ~]# find / -size 0b
根据文件权限进行查找
-perm
xxx:精确查找
-xxx :模糊匹配
/xxx :满足其中一个条件即可
# 精确查找
[root@localhost ~]# find -perm 644
./.bash_logout
./.bash_profile
./.bashrc
./.cshrc
根据时间进行查找
-mtime 根据时间属性查找
与网络时间同步
[root@localhost ~]# nptdate ntp.aliyun.com
# 3天以前的文件
[root@localhost ~]# find /root -type f -mtime +3
/root/.bash_logout
/root/.bash_profile
/root/.bashrc
/root/.cshrc
/root/.tcshrc
# 3天内的文件
[root@localhost ~]# find /root -type f -mtime -3
/root/.bash_history
/root/111.txt
/root/aa.txt
/root/bbb.txt
# 第三天的文件
[root@localhost ~]# find / -type f -mtime 3
find: ‘/proc/74299/task/74299/fdinfo/6’: No such file or directory
find: ‘/proc/74299/fdinfo/5’: No such file or directory
/run/sudo/ts/bb1
根据文件属主属组进行查找
-user 属主
-group 属组
-nouser 没有属主
-nogroup 没有属组
[root@localhost ~]# find / -nouser -ls
find: ‘/proc/74484/task/74484/fd/6’: No such file or directory
find: ‘/proc/74484/task/74484/fdinfo/6’: No such file or directory
find: ‘/proc/74484/fd/5’: No such file or directory
find: ‘/proc/74484/fdinfo/5’: No such file or directory
592023 0 -rw-rw---- 1 5455 mail 0 Jul 29 10:46 /var/spool/mail/user04
find的动作
-print 打印 默认动作
-ls 以长格式显示文件
-delete 删除文件 只能删除空目录
-exec 后面跟自定义shell命令
9,打包压缩
制作一个压缩包
减少磁盘空间
加快传输速度
windows: .zip .rar
Linux : .zip 不支持.rar
压缩包的类型:
.zip zip命令进行压缩
.gz gzip格式进行压缩
.tar.gz 使用tar命令进行打包,gzip进行压缩
zip压缩
选项
-r 递归压缩 压缩目录
-q 静默输出
[root@localhost ~]# zip -r etc.zip /etc
[root@localhost ~]# unzip passwd.zip
[root@localhost ~]# ll
-rw-r--r--. 1 root root 12576333 Aug 4 15:40 etc.zip
-rw-r--r--. 1 root root 525 Aug 4 15:39 passwd.zip
unzip
-l 下那是压缩包列表信息
-q 静默输出
-d 解压到指定的目录
# 列表信息
[root@localhost ~]# unzip -l passwd.zip
Archive: passwd.zip
Length Date Time Name
--------- ---------- ----- ----
835 07-30-2020 14:44 passwd
--------- -------
835 1 file
# 解压到指定目录etc目录
[root@localhost ~]# unzip etc.zip -d /etc
gzip 只能压缩文件 会删除源文件 不需要指定压缩包
-d 解压
[root@localhost ~]# gzip 10.txt
[root@localhost ~]# ll
-rw-r--r--. 1 root root 39 Jul 29 15:29 10.txt.gz
# 打开压缩包
[root@localhost ~]# zcat 10.txt.gz
e3e74e9f3ed
#解压压缩包
[root@localhost ~]# gzip -d 10.txt
[root@localhost ~]# ll
-rw-r--r--. 1 root root 12 Jul 29 15:29 10.txt
tar命令 归档打包
选项:
z 使用gzip格式打包
c 创建一个压缩包
f 指定压缩包名称
v 显示过程
zcf 打包组合
t 显示列表
tf 显示指定的压缩包的列表信息
x 解压
xf 解压指定的压缩包
-C 解压到指定的目录
h 打包软连接的真实路径
P 使用绝对路径打包
X 指定排除列表
--exclude= 指定排除文件
--exclude-from= 指定排除列表
[root@localhost ~]# tar zcf aaa.tar.gz aaa.txt
[root@localhost ~]# ll
-rw-r--r--. 1 root root 125 Aug 5 14:51 aaa.tar.gz
-rw-r--r--. 1 root root 9 Jul 29 15:25 aaa.txt
# 查看该压缩包的列表信息
[root@localhost ~]# tar tf aaa.tar.gz
aaa.txt
# 解压到指定opt目录下
[root@localhost ~]# tar xf aaa.tar.gz -C /opt/
[root@localhost ~]# ll /opt/
total 400
-rw-r--r--. 1 root root 9 Jul 29 15:25 aaa.txt
[root@localhost ~]# tar zcf opt.tar.gz --exclude=/opt/aaa.txt /opt/
[root@localhost ~]# cat file00
/opt/aaa.txt
/opt/yum.log
[root@localhost ~]# tar zcf opt.tar.gz --exclude-from=file00 /opt/
[root@localhost ~]# tar zcfX opt.tar.gz file00 /opt
以上三个都是一样的,压缩排除目录下的某个文件
10,时间命令
date 命令
[root@localhost ~]# date +%Y 年
2020
[root@localhost ~]# date +%y 年
20
[root@localhost ~]# date +%m 月
08
[root@localhost ~]# date +%d 日
05
[root@localhost ~]# date +%F
2020-08-05
[root@localhost ~]# date +%H 时
15
[root@localhost ~]# date +%M 分
47
[root@localhost ~]# date +%S 秒
35
[root@localhost ~]# date +%T
15:48:55
[root@localhost ~]# date +%j
218 今年过了多少天
## 按照指定时间进行显示
date -d
[root@localhost ~]# date -d "+1month" +%F
2020-09-05
[root@localhost ~]# date -d "-1year" +%F
2019-08-05
## 真正改变时间
date -s
[root@localhost ~]# date -s 2019
Wed Aug 5 20:19:00 CST 2020
[root@localhost ~]# date 15:30:20
date: invalid date ‘15:30:20’
[root@localhost ~]# date -s "20200502 15:20:30"
Sat May 2 15:20:30 CST 2020
[root@localhost ~]# date
Sat May 2 15:20:33 CST 2020
# 同步系统时间 yum install ntpdate -y
[root@localhost ~]# ntpdate ntp.aliyun.com
5 Aug 15:55:54 ntpdate[97506]: step time server 203.107.6.88 offset 8210072.486906 sec
[root@localhost ~]# date
Wed Aug 5 15:56:01 CST 2020
11,rpm软件包管理
选项:
-i 按照
-v 显示过程
-h 显示安装进度条
-e 卸载一个软件包
-U 升级
#本地安装的软件包,需要依赖,自己不会找依赖
#挂在光盘
[root@localhost ~]# ll /dev/sr0
brw-rw----. 1 root cdrom 11, 0 Jul 16 16:12 /dev/sr0
[root@localhost ~]# ll /mnt/
[root@localhost ~]# mount sr0 /mnt/
[root@localhost ~]# mount dev/sr0 /mnt/
[root@localhost ~]# rmp -ivh nss_wrapper-1.1.3-1.el7.x86_64.rpm
[root@localhost ~]# rpm -e tree
# 联网安装
-U 升级
[root@localhost ~]# rpm -ivh https://mirrors.aliyun.com/centos-vault/7.6.1810/dotnet/x86_64/Packages/
# 显示指定的软件包是否安装
[root@localhost ~]# rpm -q tree
tree-1.6.0-10.el7.x86_64
# 显示已安装的软件包
[root@localhost ~]# rpm -qa tree
#显示软件包的列表信息
[root@localhost ~]# rpm -ql tree
/usr/bin/tree
/usr/share/doc/tree-1.6.0
/usr/share/doc/tree-1.6.0/LICENSE
/usr/share/doc/tree-1.6.0/README
/usr/share/man/man1/tree.1.gz
# 显示软件的配置文件信息
[root@localhost ~]# rpm -qc tree
# 查询一个命令属于哪个软件包 -注意反引号
[root@localhost ~]# rpm -qf `which ntpdate`
ntpdate-4.2.6p5-29.el7.centos.2.x86_64
也可以先查到命令路径再执行
[root@localhost ~]# which ntpdate
/usr/sbin/ntpdate
[root@localhost ~]# rpm -qf /usr/sbin/ntpdate
ntpdate-4.2.6p5-29.el7.centos.2.x86_64
12,yum软件包管理器
软件包
yum源 yum仓库
公网的仓库 本地搭建的仓库
软件官方源: nginx php zabbix docker
源的提供者: 阿里云 清华源 中科大 163源
# 显示可用的仓库
yum repolist
# 显示所有源
yum repolist all
#显示系统中可安装的包
yum list
# 显示系统中已经安装的包
yum list installed
# 显示系统中可以更新的包
yum list updates
yum check-update
# 更新软件包
yum update -y
# 免交互安装
yum install -y
# 移除一个软件包
yum remove -y
yum erase -y
# 本地安装
yum localinstall -y /mnt/.....
#搜索
yum search sudo
# 查询一个命令属于哪个软件包
yum provides sudo
# 显示软件包的基本信息
yum info sudo
# 生成缓存
yum makecache
# 查看历史ID所操作
[root@localhost ~]# yum history list all
Loaded plugins: fastestmirror
ID | Login user | Date and time | Action(s) | Altered
-------------------------------------------------------------------------------
13 | root
| 2020-08-05 10:07 | Install | 1 12 | root
| 2020-08-04 15:39 | Install | 2 11 | root
| 2020-07-29 12:21 | Install | 2 10 | root
| 2020-07-29 12:01 | Install | 1 9 | root
| 2020-07-29 09:59 | Install | 21 8 | root
| 2020-07-29 09:53 | Install | 1 7 | root
| 2020-07-27 14:17 | Install | 1 6 | root
| 2020-07-27 11:37 | Install | 31 5 | root
| 2020-07-21 15:43 | Install | 1 4 | root
| 2020-07-21 15:13 | Install | 1 3 | root
| 2020-07-20 13:50 | Install | 1 2 | root
| 2020-07-20 13:50 | Install | 1 1 | System
| 2020-07-16 15:42 | Install | 305 history list
[root@localhost ~]# yum history info 4
Loaded plugins: fastestmirror
Transaction ID : 4
Begin time : Tue Jul 21 15:13:47 2020
Begin rpmdb : 307:9594609d7a17b772a7ad4275291cfe11f098f962
End time : 15:13:48 2020 (1 seconds)
End rpmdb : 308:c8edda8a7fcfd0227096d22385ade078e080a644
User : root
Return-Code : Success
Command Line : install -y mlocate
Transaction performed with:
Installed rpm-4.11.3-43.el7.x86_64 @anaconda
Installed yum-3.4.3-167.el7.centos.noarch @anaconda
Installed yum-plugin-fastestmirror-1.1.31-53.el7.noarch @anaconda
Packages Altered:
Install mlocate-0.26-8.el7.x86_64 @base
history info