命令替换
把字符串里面的命令先执行再把该字符串输出,与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】,现在介绍一种常用的用法【用于目录】:
公司现在多个程序员开发一个网站,每个人都有自己登陆服务器的账号,要求是项目目录下的文件每个人都共享,就是在该目录下可以互相编辑每个文件,不管是谁开发的
解决方法:
每个用户的基本组都相同,这样创建的文件基本组也都一样【添加一个附加组是不行的,那样每个用户再创建文件时属组是不一样的】
注意:用户有基本组和附加组usermod进行修改;文件和目录只有一个属组,默认是用户的基本组,chown进行修改,在这容易混淆
添加一个附加组【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 也是同理