Shell_第二章_( tee、逻辑关系、通配符、文件权限rwx、组、umask)

一、tee

1、Linux tee命令用于tee前读取标准输入的数据,并将其内容输出成文件。

[root@localhost ~]# cat 1.txt 
NIHAO hello
NIHAO hello

[root@localhost ~]# cat 1.txt |tee 2.txt
NIHAO hello
NIHAO hello

[root@localhost ~]# cat 2.txt 
NIHAO hello
NIHAO hello
[root@localhost ~]# 

tee只管tee命令前的输入的数据,后的数据不管
[root@localhost ~]# cat 1.txt 
NIHAO hello
NIHAO hello
[root@localhost ~]# cat 1.txt |tee 3.txt|awk '{print $1}'
NIHAO
NIHAO
[root@localhost ~]# cat 3.txt 
NIHAO hello
NIHAO hello

2、tee 参数

-a或--append  附加到既有文件的后面,而非覆盖它,也就是追加
-i或--ignore-interrupts  忽略中断信号。
--help  在线帮助。
--version  显示版本信息。

二、逻辑关系(;|| & &&)

;和& 没有逻辑关系,无论分号前面的命令执行是否成功,都执行后者命令

[root@localhost ~]# mkdir /data/1;cd /home
mkdir: 无法创建目录"/data/1": 没有那个文件或目录
[root@localhost home]# 

&& 前面执行成功,才能执行后者

[root@localhost ~]# mkdir /data/1 && cd /home
mkdir: 无法创建目录"/data/1": 没有那个文件或目录
[root@localhost ~]# 

|| 前面执行不成功,则执行后者

[root@localhost ~]# mkdir /data/1 || cd /home
mkdir: 无法创建目录"/data/1": 没有那个文件或目录

[root@localhost home]# mkdir /data
[root@localhost home]# cd

[root@localhost ~]# mkdir /data/1 || cd /home
[root@localhost ~]# ll /data/
drwxr-xr-x 2 root root 6 1月  12 22:23 1

三、shell 通配符

 * 匹配任意多个字符
 ? 匹配任意一个字符
 [ ] 匹配括号中任意一个字符,比如a-z,A-Z,0-9

[root@localhost data]# ls
1  2  3  9  a  A  asdc  d  f  F  g  G

[root@localhost data]# ls |grep ^[1-3]
1
2
3

[root@localhost data]# ls |grep ^[1-9]
1
2
3
9

[root@localhost data]# ls |grep ^[a-z]
a
asdc
d
f
g

[root@localhost data]# ls |grep ^[A-Z]
A
F
G

[root@localhost data]# ls |grep ^[a-Z]   # 排序a-z A-Z 
a
A
asdc
d
f
F
g
G

 ( )  代表启动一个子shell ,在子shell 中执行,不影响当前shell

1、在子shell执行命令后,不影响当前的环境,所以并为cd /root
[root@localhost data]# (cd /root; ls)
1.txt  2.txt  3.txt  anaconda-ks.cfg  iptables_curl.sh  
[root@localhost data]# 

2、在子shell创建的文件会落盘到硬盘中,硬盘是硬件,不受软件限制,但是环境是不会变
[root@localhost data]# umask 
0022

[root@localhost data]# touch 123.txt
[root@localhost data]# mkdir 123
[root@localhost data]# ll
drwxr-xr-x 2 root root 6 1月  12 23:04 123
-rw-r--r-- 1 root root 0 1月  12 23:03 123.txt

[root@localhost data]# (umask 077; touch 456.txt ; mkdir 456)
[root@localhost data]# ll

drwxr-xr-x 2 root root 6 1月  12 23:04 123
-rw-r--r-- 1 root root 0 1月  12 23:03 123.txt
drwx------ 2 root root 6 1月  12 23:05 456
-rw------- 1 root root 0 1月  12 23:05 456.txt
[root@localhost data]# umask 
0022

 { } 代表集合touch file{1..9}

[root@localhost data]# touch {2..9}
[root@localhost data]# touch {a..g}
[root@localhost data]# touch {A..G}
[root@localhost data]# ls
1  2  3  4  5  6  7  8  9  a  A  b  B  c  C  d  D  e  E  f  F  g  G
1  2  3  4  5  6  7  8  9

 \  转义符 :将命令的特殊字符,转移成常规字符。转移字符与命令符中间不能有空格

[root@localhost data]# test=123
[root@localhost data]# echo $test
123
[root@localhost data]# echo \$test
$test
[root@localhost data]# 

四、文件权限rwx

  1、概念

[root@localhost ]# ll
drwxrwxrwx 2 root root 6 1月  12 23:52 123
-rwxrwxrwx 1 root root 0 1月  12 23:52 123.txt

第一个字符表示文件类型,-表示为普通文件,d表示为目录,|为链接文件,b表示块设备文件,c表示字符设备文件,p表示管道文件。

rwx:
    x = 1  执行权限
    w = 2  写权限
    r = 4  读权限

   注:root 账户拥有最高权限,他不受rwx、所属等限制

 2、Linux中权限(r、w、x)对于目录与文件的意义

      一、权限对于目录的意义  

       1、首先要明白的是目录主要的内容是记录文件名列表和子目录列表,而不是实际存放数据的地方。

2、r权限:拥有此权限表示可以读取目录结构列表,也就是说可以查看目录下的文件名和子目录名,注意:仅仅指的是名字。

[jerry@localhost data]$ ll ./jerry/
ls: 无法访问./jerry/doc: 权限不够
ls: 无法访问./jerry/file: 权限不够
总用量 0
d????????? ? ? ? ?            ? doc
-????????? ? ? ? ?            ? file
3、w权限:拥有此权限表示具有更改该目录结构列表的权限,总之,目录的w权限与该目录下的文件名或子目录名的变动有关,注意:指的是名字。具体如下:          
  1)在该目录下新建新的文件或子目录。(注意:除了需要w权限,还需要x权限,没有x无法进入目录,无法操作目录。有x进入目录,有w才能修改)
  2)删除该目录下已经存在的文件或子目录(不论该文件或子目录的权限如何),注意:这点很重要,用户能否删除一个文件或目录,看的是该用户是否具有该文件或目录所在的目录的w权限。(注意:除了需要w权限,还需要r权限,没有x无法进入目录,没有r权限无法获取目录文件名,无法操作目录。有x跟r后,有w才能修改)(注:不管该目录下,是否有其他用户创建的文件、目录,就算是root所属主,他们都听上一层目录)
  3)将该目录下已经存在的文件或子目录进行重命名。(注意:除了需要w权限,还需要x权限,没有x无法进入目录,无法操作目录。有x进入目录,有w才能修改)
  4)转移该目录内的文件或子目录的位置。(注意:除了需要w权限,还需要x权限,没有x无法进入目录,无法操作目录。有x进入目录,有w才能修改)
4、x权限:拥有目录的x权限表示用户可以进入该目录成为工作目录,能不能进入一个目录,只与该目录的x权限有关,如果用户对于某个目录不具有x权限,则无法切换到该目录下,也就无法执行该目录下的任何命令,即使具有该目录的r权限。且如果用户对于某目录不具有x权限,则该用户不能查询该目录下的文件的内容,注意:指的是内容,如果有r 权限是可以查看该目录下的文件名列表或子目录列表的。所以要开放目录给任何人浏览时,应该至少要给与r及x权限。

 注意:

1、如何修改文件、文档的rwx-rwx-rwx权限、如何修改文件的所属主、所属组,只有所属主才有权限,修改
2、如果在跟目录,只有root账户才能创建文件、只有root才能删除文件,不管是不是空目录,无法移动目录
3、如果不是跟下,空目录不管什么用户,什么权限,都可删除

 二、权限对于文件的意义  

1、也应该明白的是文件是实际含有数据的地方,所以r、w、x权限对文件来说是与其内容有关的。
2、r权限:用于此权限表示可以读取此文件的实际内容。比如cat,vi能编辑,但是不能:wq保存提示readonly,强制也不行
3、w权限:拥有此权限表示可以编辑、添加或者是修改该文件的内容。
注意:如果只有w权限,不能cat查看,导致vi后,文件内容是空白的,可以编写内容,保存:wq提示readonly,
通过:wq!强制保存,但是会把之前的内容覆盖。所以如要解决休要rw权限。

4、x权限:表示该文件具有可以被系统执行的权限。文件是否能被执行就是由该权限来决定的,跟文件名没有绝对的关系。其中说sh jerry.txt能执行,sh 就是给后文件加上执行权限,然后运行

注意:

1、文件不管是否有无内容,什么用户,什么权限,都可删除、重命名、移动
2、跟目录无法创建文件、删除。可以修改,权限够的情况下,可以移动文件

五、什么是组,有什么权限

 1、什么是组、如何创建、如何授权组
  1.1、组的概念

1、组字面意思,组中可以存放多个用户,一个用户可以始于那个组

2、用户和组的关系:用户和用户组的对应关系有:一对一、一对多、多对一和多对多;下图展示了这种关系:
  一对一:即一个用户可以存在一个组中,也可以是组中的唯一成员。
  一对多:即一个用户可以存在多个用户组中。那么此用户具有多个组的共同权限。
  多对一:多个用户可以存在一个组中,这些用户具有和组相同的权限。
  多对多:多个用户可以存在多个组中。其实就是上面三个对应关系的扩展。

 1.2 如何创建

1、创建组
groupadd 组名

2、给用户添加组
usermod -G groupname username (这种会把用户从其他组中去掉,只属于该组)
如:usermod -G 组名 用户名

usermod -a -G groupname username (把用户添加到这个组,之前所属组不影响)
如:usermod -a -G 组名 用户名

2、组与权限的结合对文件、目录的的影响

   用户jerry建一个目录,此目录所属主、所属组都为jerry

[jerry@localhost data]$ mkdir 123;ll -d ./123
[jerry@localhost data]$ drwxrwxr-x 2 jerry jerry 6 1月  24 18:18 ./123

    查看jerry的所属组,并查看对应的所属组的其他用户

[jerry@localhost data]$ cat /etc/group |grep jerry
jerry:x:1000:
zu1:x:1001:jerry,jerry2     #能看到jerry的所属组就一个为zu1,而同组zu1下还有jerry2用户
jerry2:x:1004:
jerry3:x:1005:
[jerry@localhost data]$ 

    如何把刚创建的文件,所属主为zu1

[jerry@localhost data]$ chown jerry.zu1 123     注:修改所属主、组必须是当前所属主用户才能修改
[jerry@localhost data]$ ll
drwxrwxr-x 2 jerry zu1 6 1月  24 18:18 123
[jerry@localhost data]$

此时切换到同为zu1组的用户jerry2,他对此目录的权限,仅限于drwxrwxr-x   rwx权限(上文介绍rwx--rwx  -rwx  分别是所属主、所属组、其他)。而如果你登陆的用户,不是zu1组的用户(既不是所属主也不是所属组用户),你只能进行drwxrwxr-x  操作 

文件的影响也是一样,结合组+权限的影响

六、umask 通配符

umask值用于设置用户在创建文件时的默认权限,当我们在系统中创建目录或文件时,目录或文件所具有的默认权限就是由umask值决定的。

对于root用户,系统默认的umask值是0022;对于普通用户,系统默认的umask值是0002。执行umask命令可以查看当前用户的umask值。

[root@localhost data]# umask 
0022
[root@localhost data]# su jerry
[jerry@localhost data]$ umask
0002
[jerry@localhost data]$ 

umask值一共有4组数字,其中第1组数字用于定义特殊权限,我们一般不予考虑,与一般权限有关的是后3组数字。

默认情况下,对于目录,用户所能拥有的最大权限是777;对于文件,用户所能拥有的最大权限是目录的最大权限去掉执行权限,即666。因为x执行权限对于目录是必须的,没有执行权限就无法进入目录,而对于文件则不必默认赋予x执行权限。(解释:为了系统安全的原因,普通文件默认没有执行权限。因此,即使 umask 设置为0000,没有禁止任何权限,当文件被创建时,文件还是不会有执行权限。当然,创建文件夹时,文件夹有执行权限。)

实验:

1、假如umask是022,因为系统安全的原因,普通文件默认是不给x权限的,所以文件的最大权限为rw-rw-rw-  666,所以如果umask 是022,创建一个文件,默认的权限为6-0 6-2 6-2 = 644

[root@localhost data]# (umask 022;touch 111.txt)
[root@localhost data]# ll
-rw-r--r-- 1 root  root 0 1月  24 19:19 111.txt
[root@localhost data]# 

2、假如umask是022,因为目录所能拥有的最大权限是777,所以目录的最大权限为rwxrwxrwx  777,所以如果umask 是022,创建一个目录,默认的权限为7-0 7-2 7-2 = 755

[root@localhost data]# (umask 022;mkdir 111)
[root@localhost data]# ll
drwxr-xr-x 2 root  root 6 1月  24 19:47 111
[root@localhost data]# 

3、如果umsk 为000,是否文件会有x权限,答案是:否

[root@localhost data]# (umask 000;touch 123.txt)
[root@localhost data]# ll
-rw-rw-rw- 1 root root 0 1月  24 19:53 123.txt

ll  目录/链接个数:

对于目录文件,表示它的第一级子目录的个数。注意此处看到的值要减2才等于该目录下的子目录的实际个数。

[root@localhost data]# mkdir 123
[root@localhost data]# ll             # 显示2,2-2代表当前目录下没有任何目录
drwxr-xr-x 2 root root 6 1月  24 20:15 123

[root@localhost data]# touch 123/1 123/2 123/3
[root@localhost data]# ll 123/       
-rw-r--r-- 1 root root 0 1月  24 20:15 1
-rw-r--r-- 1 root root 0 1月  24 20:15 2
-rw-r--r-- 1 root root 0 1月  24 20:15 3
[root@localhost data]# ll            # 显示2,2-2代表当前目录下没有任何目录
drwxr-xr-x 2 root root 33 1月  24 20:15 123
[root@localhost data]# 

[root@localhost data]# mkdir ./123/mulu
[root@localhost data]# ll            # 显示3,3-2代表当前目录下有1个目录           
drwxr-xr-x 3 root root 45 1月  24 20:19 123
[root@localhost data]# 

对于其他文件,表示这个文件所具有的硬链接数。

[root@localhost data]# ll
-rw-r--r-- 1 root root 0 1月  24 20:21 123.txt

[root@localhost data]# ln 123.txt 123.txt.hardlink
[root@localhost data]# ll
-rw-r--r-- 2 root root 0 1月  24 20:21 123.txt
-rw-r--r-- 2 root root 0 1月  24 20:21 123.txt.hardlink

此时, 123.txt和 123.txt.hardlink 称为互为硬链接.他们指向同一个文件,无论是修改哪一个文件,另一个里也做相应的变化,因为实际上他们指向同一个文件。(存储到磁盘中是块,系统层需要一个东西来承载这个块,需要这个承载才能打开这个块的大门,以前是一个门,现在又安装了一个门,所以修改一个直接把块修改了。而软连接是对系统层面的这个门做了一个连接,修改软连接的文件,软连接连接这个门,门在进入块,在进行修改。区别是,如果是硬链接删除后,门删除后,这个块就在也打不开了。但是软连接无所谓)

用ls -i123.txt可以查看它的文件节点(inode),互为硬链接的文件具有相同的文件节点.

[root@localhost data]# ls -i 123.txt
67222368 123.txt
[root@localhost data]# ls -i 123.txt.hardlink 
67222368 123.txt.hardlink
[root@localhost data]# 

如果你知道一个文件有多个文件名, 如何查找他的其他文件名分布在什么地方呢?

[root@localhost data]# find / -inum 67222368
/data/123.txt
/data/123.txt.hardlink
[root@localhost data]# 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值