命令替换

把字符串里面的命令先执行再把该字符串输出,与PHP的“”里面的变量被执行一样。

  • $(COMMAND)

  • `COMMAND`

[root@jiakang ~]# echo "The directory is $(pwd)"
The directory is /root
[root@jiakang ~]# touch ./file-$(date +%F-%H-%M-%S).txt
[root@jiakang ~]# ls
a                             install.log
anaconda-ks.cfg               install.log.syslog
file-2017-03-30-19-52-22.txt
[root@jiakang ~]# echo "The directory is `pwd`"        
The directory is /root

权限

文件:

  • r:可读,可以用类似cat等命令查看文件内容

  • w:可写,可以编辑或删除此文件

  • x:可执行,可以命令提示符下当作命令提交给内核运行

目录:

  • r:可以对此目录执行ls列出内部所有文件

  • w:可以在此目录创建文件

  • x:可以使用cd切换进此目录,也可以使用ls -l查看详细信息

用数字表示:

  • 0 000 ---:无权限

  • 1 001 --x:执行

  • 2 010 -w-:写

  • 3 011 -wx:写和执行

  • 4 100 r--:读

  • 5 101 r-x:读和执行

  • 6 110 rw-:读和写

  • 7 111 rwx:读写执行

chmod命令

修改文件的权限

修改三类用户的权限

chmod MODE file

  • -R

  • --reference=/path/somefile file 参考修改【修改和前面的somefile的权限一样】

[root@jiakang tmp]# chmod 057 yum.log

修改某类用户或某些类用户的权限

u,g,o,a

chmod 用户类别=MODE file,...

[root@jiakang tmp]# chmod u=rwx /tmp/yum.log
[root@jiakang tmp]# chmod g=r,o=r /tmp/yum.log
[root@jiakang tmp]# chmod go=r /tmp/yum.log 
[root@jiakang tmp]# ls -l /tmp/yum.log
-rwxr--r--. 1 tom root 0 3月  25 07:01 /tmp/yum.log

修改某类用户的某位或者某些位的权限

u,g,o,a

chmod 用户类别+|-MODE file

[root@jiakang tmp]# chmod go+w /tmp/yum.log
[root@jiakang tmp]# ls -l /tmp/yum.log     
-rwxrw-rw-. 1 tom root 0 3月  25 07:01 /tmp/yum.log
[root@jiakang tmp]# chmod +x /tmp/yum.log  
[root@jiakang tmp]# ls -l /tmp/yum.log   
-rwxrwxrwx. 1 tom root 0 3月  25 07:01 /tmp/yum.log

特殊权限(难)

SUID:运行某程序时,相应的进程的属主是文件自身的属主,而不是启动者;

  • chmod u+s FILE

  • chmod u-s FILE
    如果该FILE本身原来有执行权限则SUID显示为s,原来没有执行权限显示为S

注意:SUID用于二进制可执行文件,对目录和非二进制可执行文件没什么意义

【现在rm的权限】
[root@jiakang tmp]# ls -l /bin/rm
-rwxr-xr-x. 1 root root 58960 10月 15 2014 /bin/rm
[root@jiakang tmp]# ls -l abc
-rw-r--r--. 1 root root 0 4月   2 19:55 abc

【普通用户删除abc】
[jiakang@jiakang ~]$ rm /tmp/abc
rm:是否删除有写保护的普通空文件 "/tmp/abc"?y
rm: 无法删除"/tmp/abc": 不允许的操作

【给rm添加s权限,注意看我当前操作的用户】
[root@jiakang tmp]# ls -l /bin/rm
-rwsr-xr-x. 1 root root 58960 10月 15 2014 /bin/rm

【再次删除,没有abc文件了】
[jiakang@jiakang ~]$ rm /tmp/abc   
[jiakang@jiakang ~]$ ls /tmp
def             keyring-V2LdqH      rc.d
inittab         keyring-ydeVD8      rc.local

SGID:运行某程序时,相应的进程的属组是文件自身的属组,而不是启动者所属的基本组;

用法和上面的一样【g+s , g-s】,现在介绍一种常用的用法【用于目录】:

公司现在多个程序员开发一个网站,每个人都有自己登陆服务器的账号,要求是项目目录下的文件每个人都共享,就是在该目录下可以互相编辑每个文件,不管是谁开发的

解决方法:

  1. 每个用户的基本组都相同,这样创建的文件基本组也都一样【添加一个附加组是不行的,那样每个用户再创建文件时属组是不一样的】

    注意:用户有基本组和附加组usermod进行修改;文件和目录只有一个属组,默认是用户的基本组,chown进行修改,在这容易混淆

  2. 添加一个附加组【developteam】,把该目录【project】的GID加s权限,在该目录下创建的文件的基本组就会是该目录的基本组【developteam】而非用户本身的基本组,这样每个文件的组都相同了,文件可以相互访问

[root@jiakang tmp]# groupadd developteam
[root@jiakang tmp]# mkdir /tmp/project
[root@jiakang tmp]# chown -R :developteam /tmp/project【修改属组】
[root@jiakang tmp]# chmod g+s project【加SGID】
[root@jiakang tmp]# ls -ld project
drwxr-sr-x. 2 root developteam 4096 4月  11 13:04 project
[root@jiakang tmp]# usermod -a -G developteam jiakang【追加附加组developteam】
[root@jiakang tmp]# id jiakang
uid=500(jiakang) gid=500(jiakang) 组=500(jiakang),5001(developteam)
[root@jiakang tmp]# chmod g+w project【组内用户+w权限】
[jiakang@jiakang tmp]$ cd project
[jiakang@jiakang project]$ touch ss.txt
touch: 无法创建"ss.txt": 权限不够
[jiakang@jiakang project]$ exit【需要退出重新登陆才能生效】
logout
[root@jiakang ~]# su - jiakang
[jiakang@jiakang project]$ touch s.txt
[jiakang@jiakang project]$ ls -l s.txt
-rw-rw-r--. 1 jiakang developteam 0 4月  11 13:26 s.txt【属组自动就是developteam】

sticky:在上面创建的那个公共目录里,每个用户都能创建、删除自己的文件,但是不能删除他人的文件

  • chmod o+t DIR

  • chmod o-t DIR

这样权限修改的时候用数字表示就又多了一位:

  • 000

  • 001【o+t】

  • 011【g+s,o+t】
    ...

  • 111【u+s,g+s,o+t】

chmod 5755 /tmp/test【5代表:u+s,o+t】

umask 0022 也是同理


Big_fat_cat
207 声望10 粉丝