相对路径:路径的写法不是由根目录 ‘/’写起,例如,首先用户进入到/, 然后再进入到home ,命令为 cd /home 然后 cd test 此时用户所在的路径为 /home/test 第一个cd命令后跟 ‘/home’ 第二个cd命令后跟 ‘test’, 并没有斜杠,这个 ‘test’ 是相对于 ‘/home’ 目录来讲的,所以叫做相对路径。
命令:cd
这个命令是用来变更用户所在目录的,后面如果什么都不跟,就会直接到当前用户的根目录下,我们做实验用的是 ‘root’ 账户,所以运行 cd 后,会进入root账户的根目录 ‘/root’. 后面跟目录名,则会直接切换到指定目录下:
[root@localhost ~]# cd /tmp/ [root@localhost tmp]# pwd /tmp [root@localhost tmp]# cd [root@localhost ~]# pwd /root
[root@localhost ~]# cd /etc/passwd -bash: cd: /etc/passwd: 不是目录./ 表示当前目录,../ 表示当前目录的上一级目录:
[root@localhost ~]# cd /usr/local/lib/ [root@localhost lib]# pwd /usr/local/lib [root@localhost lib]# cd ./ [root@localhost lib]# pwd /usr/local/lib [root@localhost lib]# cd ../ [root@localhost local]# pwd /usr/local当我们想创建 /tmp/test/123 目录,可是提示不能创建,原因是 /tmp/test 目录不存在,你会说,这个Linux怎么这样傻,/tmp/test 目录不存在就自动创建不就OK了嘛,的确Linux确实很傻,如果它发现要创建的目录的上一级目录不存在就会报错。然而Linux并不是那么傻,因为它也为我们想好了解决办法,即 ‘-p’ 选项,这个选项可以帮我们创建一大串级联目录,这个选项还有一个好处,那就是当你创建一个已经存在的目录时,不会报错:
root@localhost ~]# ls -ld /tmp/test/123 drwxr-xr-x. 2 root root 4096 5月 9 19:10 /tmp/test/123 [root@localhost ~]# mkdir /tmp/test/123 mkdir: 无法创建目录 '/tmp/test/123': 文件已存在 [root@localhost ~]# mkdir -p /tmp/test/123 [root@localhost ~]# ls -ld /tmp/test/123 drwxr-xr-x. 2 root root 4096 5月 9 19:10 /tmp/test/123命令:rmdir
用来删除空目录,后面可以是一个也可以是多少,多个的话用空格分隔。该命令很少使用,因为它只能删除目录,不能删除文件,还有一个命令 rm 既可以删除目录又可以删除文件,用的比较多。rmdir 有一个和mkdir一样的选项 ‘-p’, 同样可以级联删除一大串目录,但是级联的目录中其中一个目录里还有目录或者文件时就不好用了。
[root@localhost ~]# ls /tmp/test 123 [root@localhost ~]# rmdir /tmp/test/ rmdir: 删除 '/tmp/test/' 失败: 目录非空 [root@localhost ~]# rmdir /tmp/test/123 [root@localhost ~]# ls /tmp/test [root@localhost ~]#
这个命令是最常用的, ‘rm’ 同样也有很多选项。你可以通过 man rm 来获得详细帮助信息。在这里只介绍最常用的两个选项。
‘-r’ : 删除目录用的选项,等同于rmdir.
[root@localhost ~]# mkdir -p /tmp/test/123 [root@localhost ~]# rm -r /tmp/test/123 rm:是否删除目录 '/tmp/test/123'? y但是和rmdir不同的是,使用 rm -r 删除目录时,会问一下是否删除,如果输入 ‘y’ 则会删除,输入 ‘n’ 则不删除。当然 rm -r 也不会向rmdir不能删除非空目录,它是可以删除非空目录的。
‘-f’ : 表示强制删除,不再提示是否要删除,而是直接就删除了,而后面跟一个不存在的文件或者目录时,也不会报错,如果不加 ‘-f’ 选项会报错。
[root@localhost ~]# rm /tmp/test/123/123 rm: 无法删除 '/tmp/test/123/123': 没有那个文件或目录 [root@localhost ~]# rm -f /tmp/test/123/123要删除一个目录时,即使加上 ‘-f’ 选项也会报错,所以删除目录一定要加 ‘-r’ 选项。
[root@localhost ~]# rm -f /tmp/test/123 rm: 无法删除 '/tmp/test/123': 是一个目录 [root@localhost ~]# rm -rf /tmp/test/123
关于rm,使用最多便是 ‘-rf’ 两个选项合用了。不管删除文件还是目录都可以。但是方便的同时也要多注意,万一你的手太快后边跟了/那样就会把你的系统文件全部删除的,切记切记。
环境变量PATH
在讲环境变量之前先介绍一个命令 which, 它用来查找某个命令的绝对路径。
[root@localhost ~]# which rmdir /bin/rmdir [root@localhost ~]# which rm alias rm='rm -i' /bin/rm [root@localhost ~]# which ls alias ls='ls --color=auto' /bin/lsrm’ 和 ‘ls’ 是两个特殊的命令,使用alias命令做了别名。我们用的 ‘rm’ 实际上是 ‘rm -i’ 加上 ‘-i’ 选项后,删除文件或者命令时都会问一下是否确定要删除,这样做比较安全。 ‘alias’ 可以设置命令的别名也可以设置文件的别名,会在以后章节中详细介绍。 ‘which’ 这个命令平时只用来查询某个命令的绝对路径,不常使用。
[root@localhost ~]# echo $PATH /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin因为/bin 在PATH的设定中,所以自然就可以找到ls了。如果你将 ls 移动到 /root 底下的话,然后你自己本身也在 /root 底下,但是当你执行 ls 的时候,他就是不理你?怎么办?这是因为 PATH 没有 /root 这个目录,而你又将 ls 移动到 /root 底下了,自然系统就找不到可执行文件了,因此就会告诉你 ‘command not found!’
[root@localhost ~]# mv /bin/ls /root/ [root@localhost ~]# ls -bash: /bin/ls: 没有那个文件或目录
‘mv’ 用来移动目录或者文件,还可以重命名,稍后讲解。
那么该怎么克服这种问题呢?有两个方法,一种方法是直接将 /root 的路径加入 $PATH 当中!如何增加?可以使用命令PATH=$PATH:/root:
[root@localhost ~]# PATH=$PATH:/root [root@localhost ~]# echo $PATH /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/root [root@localhost ~]# ls anaconda-ks.cfg install.log install.log.syslog ls
另一种方法就是使用绝对路径:
[root@localhost ~]# /root/ls anaconda-ks.cfg install.log install.log.syslog ls
命令: cp
copy的简写,即拷贝。格式为cp [选项] [ 来源文件 ] [目的文件],例如我想把test1 拷贝成test2 ,这样即可 cp test1 test2,以下介绍几个常用的选项:
-r : 如果你要拷贝一个目录,必须要加-r选项,否则你是拷贝不了目录的, 和 ‘rm’ 类似。
[root@localhost ~]# mkdir 123 [root@localhost ~]# cp 123 456 cp: 略过目录'123' [root@localhost ~]# cp -r 123 456 [root@localhost ~]# ls -l 总用量 44 drwxr-xr-x. 2 root root 4096 5月 10 04:05 123 drwxr-xr-x. 2 root root 4096 5月 10 04:05 456
-i : 安全选项,和 ‘rm’ 类似,如果遇到一个存在的文件,会问是否覆盖。在Redhat/CentOS系统中,我们使用的cp其实是cp -i
[root@localhost ~]# which cp alias cp='cp -i' /bin/cp
[root@localhost ~]# cd 123 [root@localhost 123]# ls [root@localhost 123]# touch 111 [root@localhost 123]# touch 222 [root@localhost 123]# cp -i 111 222 cp:是否覆盖 '222'? n [root@localhost 123]# echo 'abc' > 111 [root@localhost 123]# echo 'def' > 222 [root@localhost 123]# cat 111 222 abc def [root@localhost 123]# /bin/cp 111 222 [root@localhost 123]# cat 111 abc [root@localhost 123]# cat 222 abc
命令: mv
‘mv’ 是move的简写。格式为mv [ 选项 ] [源文件] [目标文件]下面介绍几个常用的选项。
-i : 和cp的-i 一样,当目标文件存在时会问用户是否要覆盖。在Redhat/CentOS系统中,我们使用的mv其实是mv -i
该命令有几种情况:
1) 目标文件是目录,而且目标文件不存在;
2) 目标文件是目录,而且目标文件存在;
3) 目标文件不是目录不存在;
4) 目标文件不是目录存在;
目标文件是目录,存在和不存在,移动的结果是不一样的,如果存在,则会把源文件移动到目标文件目录中。不存在的话移动完后,目标文件是一个文件。这样说也许你会觉得有点不好理解,看例子吧。
[root@localhost ~]# mkdir dira dirb [root@localhost ~]# ls anaconda-ks.cfg dira dirb install.log install.log.syslog [root@localhost ~]# mv dira dirc [root@localhost ~]# ls anaconda-ks.cfg dirb dirc install.log install.log.syslog
目标文件为目录,并且目标目录不存在,相当于把 ‘dira’ 重命名为 ‘dirc’.
[root@localhost ~]# mv dirc dirb [root@localhost ~]# ls anaconda-ks.cfg dirb install.log install.log.syslog [root@localhost ~]# ls dirb dirc
目标文件为目录,且目标目录存在,则会把 ‘dirc’ 移动到 ‘dirb’ 目录里。
[root@localhost ~]# touch filed [root@localhost ~]# ls anaconda-ks.cfg dirb filed install.log install.log.syslog [root@localhost ~]# mv filed filee [root@localhost ~]# ls anaconda-ks.cfg dirb filee install.log install.log.syslog [root@localhost ~]# mv filee dirb [root@localhost ~]# ls anaconda-ks.cfg dirb install.log install.log.syslog [root@localhost ~]# ls dirb dirc filee
目标文件不是目录,且不存在,则会重命名文件。
几个和文档相关的命令
命令: cat
比较常用的一个命令,即查看一个文件的内容并显示在屏幕上, 后面可以不加任何选项直接跟文件名,介绍两个常用的选项:
-n : 查看文件时,把行号也显示到屏幕上。
[root@localhost ~]# echo '111111111' > dirb/filee [root@localhost ~]# echo '222222222' >> dirb/filee [root@localhost ~]# cat dirb/filee 111111111 222222222 [root@localhost ~]# cat -n dirb/filee 1 111111111 2 222222222
上例中出现了一个 ‘>>’ 这个符号跟前面介绍的 ‘>’ 的作用都是重定向,即把前面输出的东西输入到后边的文件中,只是 ‘>>’ 是追加的意思,而用 ‘>’ 如果文件中有内容则会删除文件中内容,而 ‘>>’ 则不会。
-A : 显示所有东西出来,包括特殊字符
[root@localhost ~]# cat -A dirb/filee 111111111$ 222222222$
命令: tac
和 ‘cat’ 一样,用来把文件的内容显示在屏幕上,只不过是先显示最后一行,然后是倒数第二行,最后显示的是第一行。
[root@localhost ~]# tac dirb/filee 222222222 111111111
命令: more
也是用来查看一个文件的内容,后面直接跟文件名,当文件内容太多,一屏幕不能占下,而你用 ‘cat’ 肯定是看不前面的内容的,那么使用 ‘more’ 就可以解决这个问题了。当看完一屏后按空格键继续看下一屏。但看完所有内容后就会退出。如果你想提前退出,只需按 ‘q’ 键即可。
命令: less
作用跟more一样,后面直接跟文件名,但比more好在可以上翻,下翻。空格键同样可以翻页,而按 ‘j’ 键可以向下移动(按一下就向下移动一行),按 ‘k’ 键向上移动。在使用more和less查看某个文件时,你可以按一下 ‘/’ 键,然后输入一个word回车,这样就可以查找这个word了。如果是多个该word可以按 ‘n’ 键显示下一个。另外你也可以不按 ‘/’ 而是按 ‘?’ 后边同样跟word来搜索这个word,唯一不同的是, ‘/’ 是在当前行向下搜索,而 ‘?’ 是在当前行向上搜索。
命令: head
‘head’后直接跟文件名,则显示文件的前十行。如果加 -n 选项则显示文件前n行。
[root@localhost ~]# head /etc/passwd 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 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin [root@localhost ~]# head -n 1 /etc/passwd root:x:0:0:root:/root:/bin/bash [root@localhost ~]# head -n2 /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin
‘-n’后可以有空格也可以无空格。
命令: tail
和head一样,后面直接跟文件名,则显示文件最后十行。如果加-n 选项则显示文件最后n行。
[root@localhost ~]# head -n2 /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin [root@localhost ~]# tail /etc/passwd nobody:x:99:99:Nobody:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin haldaemon:x:68:68:HAL daemon:/:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin saslauth:x:499:76:'Saslauthd user':/var/empty/saslauth:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin abrt:x:173:173::/etc/abrt:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin [root@localhost ~]# tail -n2 /etc/passwd sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin
文件的所属主以及所属组
一个linux目录或者文件,都会有一个所属主和所属组。所属主,即文件的拥有者,而所属组,即该文件所属主所在的一个组。Linux这样设置文件属性的目的是为了文件的安全。例如,test文件的所属主是user0 而test1文件的所属主是user1,那么user1是不能查看test文件的,相应的user0也不能查看test1文件。有时我们也会有这样的需求,让一个文件同时让user0和user1来查看,这怎么实现呢?
这时 ‘所属组’ 就派上用场了。即,创建一个群组users,让user0和user1同属于users组,然后建立一个文件test2,且其所属组为users,那么user0和user1都可以访问test2文件。Linux文件属性不仅规定了所属主和所属组,还规定了所属主(user)、所属组(group)以及其他用户(others)对该文件的权限。你可以通过ls -l 来查看这些属性。
[root@localhost ~]# ls -l 总用量 40 -rw-------. 1 root root 980 5月 7 18:00 anaconda-ks.cfg drwxr-xr-x. 3 root root 4096 5月 10 05:10 dirb
linux文件属性
上例中,用ls –l 查看当前目录下的文件时,共显示了9列内容(用空格划分列),都代表了什么含义呢?
第1列,包含的东西有该文件类型和所属主、所属组以及其他用户对该文件的权限。第一列共11位有的文件是10位,没有最后面的一位。 其中第一位用来描述该文件的类型。上例中,我们看到的类型有 ‘d’, ‘-‘ ,其实除了这两种外还有 ‘l’, ‘b’, ‘c’, ‘s’ 等。
‘d’ 表示该文件为目录;
‘-‘ 表示该文件为普通文件;
‘l’ 表示该文件为链接文件(linux file),上边提到的软链接即为该类型;
[root@localhost ~]# ls -l /etc/rc.local lrwxrwxrwx. 1 root root 13 5月 7 17:54 /etc/rc.local -> rc.d/rc.local
上例中,第一列第一位是 ‘l’ 表示该文件为链接文件,稍后详细介绍。
‘b’ 表示该文件为块设备,比如 /dev/sda 就是这样的文件。
‘c’ 表示该文件为串行端口设备,例如键盘、鼠标。
‘s’ 表示该文件为套接字文件(socket),用于进程间通信。
后边的9位,每三个为一组。均为rwx 三个参数的组合。其中r 代表可读,w代表可写,x代表可执行。前三位为所属主(user)的权限,中间三位为所属组(group)的权限,最后三位为其他非本群组(others)的权限。下面拿一个具体的例子来述说一下。
一个文件的属性为 ‘-rwxr-xr–.’ ,它代表的意思是,该文件为普通文件,文件拥有者可读可写可执行,文件所属组对其可读不可写可执行,其他用户对其只可读。对于一个目录来讲,打开这个目录即为执行这个目录,所以任何一个目录必须要有x权限才能打开并查看该目录。例如一个目录的属性为 ‘drwxr–r–.’ 其所属主为root,那么除了root外的其他用户是不能打开这个目录的。
关于第一列的最后一位的.,要说一下,之前的CentOS 5 是没有这个点的,这主要是因为新版本的ls把selinux或者acl的属性加进来了,当文件或者目录只使用了selinux context的属性,这里是一个点。如果设置了acl,后面将是一个加号 ‘+’. 关于selinux 和 acl 不再详细介绍,你只要了解是怎么回事即可,如果你感兴趣可以网上搜索相关知识也可以通过在本章后面提供的扩展学习链接进行学习。
第2列,表示为链接占用的节点(inode), [1] 为目录时,通常与该目录底下还有多少目录有关系。
第3列,表示该文件的所属主。
第4列,表示该文件的所属组。
第5列,表示该文件的大小。
第6列、第7列和第8列为该文件的最近的修改日期,分别为月份日期以及时间,也就是所谓的mtime.
第9列,文件名。
更改文件的权限
- 更改所属组 chgrp
语法:chgrp [组名] [文件名]
[root@localhost ~]# groupadd testgroup [root@localhost ~]# touch test1 [root@localhost ~]# ls -l test1 -rw-r--r-- 1 root root 0 5月 10 08:41 test1 [root@localhost ~]# chgrp testgroup test1 [root@localhost ~]# ls -l test1 -rw-r--r-- 1 root testgroup 0 5月 10 08:41 test1
这里用到了 ‘groupadd’ 命令,其含义为增加一个用户组。该命令在以后章节中做详细介绍,你只要知道它是用来增加用户组的即可。除了更改文件的所属组,还可以更改目录的所属组。
[root@localhost ~]# ls -l dirb/ 总用量 8 drwxr-xr-x. 2 root root 4096 5月 10 05:08 dirc -rw-r--r--. 1 root root 20 5月 10 05:37 filee [root@localhost ~]# ls -ld dirb/ drwxr-xr-x. 3 root root 4096 5月 10 05:10 dirb/ [root@localhost ~]# chgrp testgroup dirb [root@localhost ~]# ls -ld dirb/ drwxr-xr-x. 3 root testgroup 4096 5月 10 05:10 dirb/ [root@localhost ~]# ls -l dirb/ 总用量 8 drwxr-xr-x. 2 root root 4096 5月 10 05:08 dirc -rw-r--r--. 1 root root 20 5月 10 05:37 filee
‘chgrp’命令也可以更改目录的所属组,但是只能更改目录本身,而目录下面的目录或者文件没有更改,要想级联更改子目录以及子文件,有个选项可以实现:
[root@localhost ~]# chgrp -R testgroup dirb [root@localhost ~]# ls -l dirb 总用量 8 drwxr-xr-x. 2 root testgroup 4096 5月 10 05:08 dirc -rw-r--r--. 1 root testgroup 20 5月 10 05:37 filee
‘chgroup’ 命令使用的不多,因为还有一个命令可以替代。
- 更改文件的所属主 chown
语法:chown [ -R ] 账户名 文件名chown [ -R ] 账户名:组名 文件名
这里的-R选项只作用于目录,作用是级联更改,即不仅更改当前目录,连目录里的目录或者文件全部更改。
[root@localhost ~]# mkdir test // 创建 'test' 目录 [root@localhost ~]# useradd user1 // 创建用户 'user1', 关于 'useradd' 命令会在后续章节介绍。 [root@localhost ~]# touch test/test2 // 在test目录下创建test2文件 [root@localhost ~]# chown user1 test [root@localhost ~]# ls -l test 总用量 0 -rw-r--r-- 1 root root 0 5月 10 09:00 test2 [root@localhost ~]# ls -ld test // test目录所属主已经由 'root' 改为 'user1'. drwxr-xr-x 2 user1 root 4096 5月 10 09:00 test [root@localhost ~]# ls -l test // 但是test目录下的test2文件所属主依旧是 'root'. 总用量 0 -rw-r--r-- 1 root root 0 5月 10 09:00 test2 [root@localhost ~]# chown -R user1:testgroup test [root@localhost ~]# ls -l test 总用量 0 -rw-r--r-- 1 user1 testgroup 0 5月 10 09:00 test2
- 改变用户对文件的读写执行权限 chmod
在linux中为了方便更改这些权限,linux使用数字去代替rwx, 具体规则为 ‘r’ 等于4, ‘w’ 等于2, ‘x’ 等于1, ‘-‘ 等于0. 举个例子: ‘-rwxrwx—’ 用数字表示就是 ‘770’, 具体是这样来的: ‘rwx’ = 4+2+1=7; ‘rwx’ = 4+2+1=7; ‘- - -‘ = 0+0+0=0.
chmod 语法: chmod [-R] xyz 文件名(这里的xyz,表示数字)
‘-R’ 选项作用同chown,级联更改。
值得提一下的是,在linux系统中,默认一个目录的权限为 755,而一个文件的默认权限为644.
[root@localhost ~]# ls -ld test drwxr-xr-x 2 user1 testgroup 4096 5月 10 09:00 test [root@localhost ~]# ls -l test 总用量 0 -rw-r--r-- 1 user1 testgroup 0 5月 10 09:00 test2 [root@localhost ~]# chmod 750 test [root@localhost ~]# ls -ld test drwxr-x--- 2 user1 testgroup 4096 5月 10 09:00 test [root@localhost ~]# ls -l test/test2 -rw-r--r-- 1 user1 testgroup 0 5月 10 09:00 test/test2 [root@localhost ~]# chmod 700 test/test2 [root@localhost ~]# chmod -R 700 test [root@localhost ~]# ls -ld test drwx------ 2 user1 testgroup 4096 5月 10 09:00 test [root@localhost ~]# ls -l test 总用量 0 -rwx------ 1 user1 testgroup 0 5月 10 09:00 test2
[root@localhost ~]# chmod u=rwx,og=rx test/test2 [root@localhost ~]# ls -l test/test2 -rwxr-xr-x 1 user1 testgroup 0 5月 10 09:00 test/test2
这样可以把 ‘test/test2’ 文件权限修改为 ‘rwxr-xr-x’. 另外还可以针对u, g, o, a增加或者减少某个权限(读,写,执行),例如:
[root@localhost ~]# chmod u-x test/test2 [root@localhost ~]# ls -l test 总用量 0 -rw-r-xr-x 1 user1 testgroup 0 5月 10 09:00 test2 [root@localhost ~]# chmod a-x test/test2 [root@localhost ~]# ls -l test/test2 -rw-r--r-- 1 user1 testgroup 0 5月 10 09:00 test/test2 [root@localhost ~]# chmod u+x test/test2 [root@localhost ~]# ls -l test/test2 -rwxr--r-- 1 user1 testgroup 0 5月 10 09:00 test/test2
上边也提到了默认情况下,目录权限值为755, 普通文件权限值为644, 那么这个值是由谁规定呢?追究其原因就涉及到了 ‘umask’.
umask语法:umask xxx(这里的xxx代表三个数字)
查看umask值只要输入 ‘umask’ 然后回车。
[root@localhost ~]# umask 0022
umask预设是0022,其代表什么含义?先看一下下面的规则:
1)若用户建立为普通文件,则预设 ‘没有可执行权限’, 只有’rw’两个权限。最大为666 (‘-rw-rw-rw-‘).
2)若用户建立为目录,则预设所有权限均开放,即777 (‘drwxrwxrwx’).
umask数值代表的含义为,上边两条规则中的默认值(文件为666,目录为777)需要减掉的权限。所以目录的权限为'rwxrwxrwx' - '----w--w-' = 'rwxr-xr-x',普通文件的权限为'rw-rw-rw-' - '----w--w-' = 'rw-r--r--'. umask的值是可以自定义的,比如设定umask 为 002,你再创建目录或者文件时,默认权限分别为'rwxrwxrwx' - '-------w-' = 'rwxrwxr-x'和'rw-rw-rw-' - '-------w-' = 'rw-rw-r--'.
[root@localhost ~]# umask 002 [root@localhost ~]# mkdir test2 [root@localhost ~]# ls -ld test2 drwxrwxr-x 2 root root 4096 5月 10 09:44 test2 [root@localhost ~]# touch test3 [root@localhost ~]# ls -l test3 -rw-rw-r-- 1 root root 0 5月 10 09:45 test3
[root@localhost ~]# umask 022 [root@localhost ~]# touch test4 [root@localhost ~]# ls -l test4 -rw-r--r-- 1 root root 0 5月 10 09:45 test4
umask 可以在/etc/bashrc里面更改,预设情况下,root的umask为022,而一般使用者则为002,因为可写的权限非常重要,因此预设会去掉写权限。