【注】:本文使用的是xshell远程登录主机
目录
[1. ls指令](#1. ls指令)
rmdir是一个与mkdir相对应的命令。mkdir是建立目录,而rmdir是删除命令。
[22.uname -r 指令](#22.uname -r 指令)
23.重要的几个热键【Tab】,【ctrl】-c,【ctrl】-d
Linux下基本指令
1. ls指令
语法:ls 【选项】【目录或文件】
功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。
常用选项:
-a :列出目录下的所有文件,包括以.开头的隐藏文件。
-d:将目录像文件一样显示,而不是显示其下的文件。如 ls -d 指定目录。
-i:输出文件的i节点的索引信息。如 ls -ai 指定文件。
-k:以k字节的形式表示文件的大小。如 ls -alk 指定文件。
-l:列出文件的详细信息。
-n:用数字的UID,GID代替名称。
-F:在每个文件名后附上一个字符说明文件的类型,"*"表示可执行的普通文件。"/"表示目录。"@"表示符号链接。"|"表示FIFOs。"="表示套接字(socket)。(目录类型识别)
-r:对目录反向排序。
-t:以时间排序。
-s:在I文件名后输出该文件的大小。(大小排序,如何找到目录下最大的文件)
-R:列出所有子目录下的文件。(递归)
-1:一行只输出一个文件。
使用方式例如:ls -l
2.pwd命令
语法:pwd
功能:显示用户当前所在的目录。
3.cd命令
在Linux系统中,磁盘上的文件和目录被组成一棵目录树,每个节点都是目录或者文件。
Linux下,一切皆文件。
Linux的目录实际上就是一棵多叉树,所以我们所有对文件或者目录的增删查改,本质上都是对这棵多叉树的增删查改。

语法:cd 目录名
功能:改变工作目录。将当前工作目录改变到指定的目录下。
使用说明如下:
cd ..:返回上次目录。
cd /home/hxh/:绝对路径。
cd ../day01/ :相对路径。
cd ~:进入用户家目录。
cd -:返回最近访问目录。
cd /:进入根目录。
说明:Linux下以 .开头的是隐藏文件 。Linux下任何一个目录都有两个自带的隐藏文件,分别是**.** 和**..** 。. :表示当前路径,.. :表示当前路径的上一级路径。. 存在的意义:帮用户定位当前目录下的一个文件。
4.touch指令
语法:touch 【选型】...文件...
功能:touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件。
常用选项:
-a:或--time=atime或者--time=use只更改存取时间。
-c:或--no-create 不建立任何文档。
-d:使用指定的日期时间,而非现在的时间。
-f:此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题。
-m:或--time=mtime或者--time=modify 只更改变动时间。
-r:把指定文档或目录的日期时间,统统设置成参考文档或目录的日期时间相同。
-t:使用指定的日期时间,而非现在的时间。
5.mkdir指令(重要)
语法:mkdir 【选项】dirname...
功能:在当前目录下创建一个名为"dirname"的目录。
常用选项:
-p:,--parents可以是一个路径名字。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录。
使用例子:
mkdir -p test/test1 :递归建立多个目录。
6.rmdir指令与rm指令(重要)
rmdir是一个与mkdir相对应的命令。mkdir是建立目录,而rmdir是删除命令。
语法:rmdir 【-p】【dirname】
适用对象:具有当前目录操作权限的所有使用者。
功能 :(只能)删除空目录。
常用选项:
-p 当子目录删除后如果父目录页变成空目录的话,就连带父目录一起删除。
rm命令可以同时删除文件或者目录。
语法:rm 【-f -i -r -v】【dirName/dir】
适用对象:所有使用者。
功能 :删除文件或者目录。
常用选项:
-f:即使文件属性为只读(即写保护),可直接删除。
-i:删除前逐一询问确认。
-r:删除目录以及其下所有文件(递归删除)。
7.man指令(重要)
Linux的命令有很多参数,我们不可能全部记住,我们可以通过查看联机手册获取帮助。访问Linux手册页的命令是man。
语法:man 【选项】命令
常用选项:
-k:根据关键字搜索联机帮助。
num 只在第num章节找。
-a:将所有章节的都显示出来,比如man printf 它缺省从第一张开始搜索,知道就停下,用a选项,当按下q退出,ta会继续往后面搜索,直到所有章节都搜索完毕。
解释一下,man手册分为8章。
1是普通的命令。
2是系统调用,如open,write之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么头文件。)
3是库函数,如printf,fread之类的。
4是特殊文件,也就是/dev下的各种设备文件。
5是指文件的格式,比如passwd,就会说明这个文件中各个字段的含义。
6是给游戏留的。
7是附件还有一些变量,比如像environ这种全局变量在这里就有说明。
8是系统管理用的命令,这些命令只能由root使用,如ifconfig。
例如:
8.cp指令(重要)
语法:cp 【选项】 源文件或者目录 目标文件或者目录
功能:复制文件或目录。
说明:cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后目的地是一个已经存在的目录,则它会把前面的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息。
常用选项:
-f 或--force强行复制文件或目录,不论目的文件是否已经存在。
-i 或--interactive 覆盖文件之前先询问用户。
-r 递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理。
-R或--recursive递归处理,将指定目录下文件以及子目录一并处理。
cp -r dir dir_backup ------- 拷贝目录的时候加-r选项。
9.mv指令(重要)
mv指令时move的缩写,可以用来移动文件或者将文件改名(move(rename)files),是Linux系统下常用的命令,经常用来备份文件或者目录。
语法:mv 【选项】 源文件或者目录 目标文件或者目录
功能:
1.视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。
2.当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。
3.当第二个参数是已存在的目录名称时,源文件或者目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中。
常用选项:
-f:force强制的意思,如果目标文件已经存在,不会询问而直接覆盖。
-i:若目标文件(destination)已经存在,就会询问是否覆盖!
举例:

如何看待指令?
指令和可执行程序都是可以被执行的,所以指令就是可执行程序!!!
我们在执行指令的时候,我们应该先做什么?
应该现在系统中找到对应的指令!

所以指令本质就是文件-----可执行文件!就是直接安装到了系统的某种路径下面。

文件重定向(输出重定向>):把本来应该写到显示器文件上的内容写入out.txt文件里。
> :输出重定向
>>:追加重定向
<:输入重定向

输入重定向(<):本来应该从键盘文件中读取,现在不用从键盘读取,从指定的文件中读取。
10.cat
语法:cat 【选项】【文件】
功能:查看目标文件的内容。(用来查看小文本)
常用选项:
-b:对非空输出行编号。
-n:对输出的所有行编号。
-s:不输出多行空行。
11.more指令
语法:more 【选项】【文件】
功能:more命令,功能类似于cat。
常用选项:
-n:对输出的所有行编号。
q 推出more命令。
举例:

12.less指令(重要)
less工具也是对文件或者其它输出进行分页显示的工具,应该说是Linux正统查看文件内容的工具,功能极其强大。
less的用法比起more更加有弹性。在more的时候,我们并没有办法向前面翻,只能向后面看。但是使用了less时,就可以使用【pageup】【pagedown】等按键的功能来往前往后翻看文件,更容易用来查看一个文件的内容!
除此之外,在less里头可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜。
语法:less 【参数】文件
功能:less与more类似,但使用less可以随意浏览文件,而more仅能向前移动,却不能向后移动,而且less在查看之前不会加载整个文件。
选项:
-i:忽略搜索时的大小写。
-N:显示每行的行号。
/字符串:向下搜索"字符串"的功能。
?字符串:向上搜索"字符串"的功能。
n:重复前一个搜索(与/或?有关)。
N:反向重复前一个搜索(与/或?有关)。
q:quit。
13.head指令
head与tail就像它的名字一样浅显易懂,它是用来显示开头或结尾某个数量的文件区块,head用来显示档案的开头至标准输出中,而tail就是看档案的结尾。
语法:head 【参数】...【文件】...
功能:head用来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10行。
选项:
-n<行数> 显示的行数。
14.tail指令
tail指令时从指定点开始将文件写到标准输出。使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不但刷新,使你看到最新的文件内容。
语法:tail 【必要参数】【选择参数】【文件】
功能:用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。
选项:
-f:循环读取。
-n<行数> 显示行数
举例:如果有一个文件,想截取1000-1020行的代码。
方法1:1)先head -1020 test.txt 。2)再head -1020 test.txt > tmp.txt 。3)再tail -20 tmp.txt

但是这种方法创建了临时文件,如果我们不想创建临时文件呢?不创建临时文件,可以使用管道文件。
方法2:head -1020 test.txt | tail -21 ------>一种符号,管道文件(内存级)
15.时间相关的指令
date显示
date指定格式显示时间:date+%Y:%m:%d
date用法:date【option】...+【format】
1.在显示方面,使用者可以设定预想显示的格式,格式设定为一个加号后接数个标记,其中常用的标记列表如下
%H:小时
%M:分钟
%S:秒
%X:相当于%H:%M:%S
%d:日
%m:月份
%Y:完整年份
%F:相当于%Y-%m-%d
2.在设定时间方面
date -s //设置当前时间,只有root权限才能设置,其他只能查看。
date -s 20080523 //设置成20080523,这样会把具体时间设置成空00:00:00
date -s 01:01:01 //设置具体时间,不会对日期做更改
date -s "01:01:01 2008-05-23″ //这样可以设置全部时间
date -s "01:01:01 20080523″ //这样可以设置全部时间
date -s "2008-05-23 01:01:01″ //这样可以设置全部时间
date -s "20080523 01:01:01″ //这样可以设置全部时间
3.时间戳
时间->时间戳:date +%s
时间戳->时间:date -d@1765622501
Unix时间戳(英文为Unix epoch,Unix time,POSIX time或者Unix timestamp)是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑润秒。


16.Cal指令
cal指令可以用来显示公历(阳历)日历。公历是现在国际通用的历法,又称格列历,统称阳历。"阳历"有名"太阳历",系以地球绕太阳一周为一年,为西方各国所通用,故有名"西历"。
命令格式:cal 【参数】【月份】【年份】
功能:用于查看日历等时间信息,如只有一个参数,则表示年份(1-9999),如有两个参数,则表示月份和年份。
常用选项:
-3 显示系统前一个月,当前月,下一个月的月历。
-j :显示在当年中第几天(一年日期按天算,从1月1号算起,默认显示当前月在一年中的天数)。
-y:显示当前年份的日历。
举例:
Cal -y 2020
17.find指令:(重要)-name
Linux下find命令在目录结构中搜索文件,并执行指定的操作。
Linux下find命令提供了相当多的查找条件,功能很强大。由于find具有强大的功能,所以它的选项也很多。
即使系统中含有网络文件系统(NFS),find命令在该文件系统中同样有效,只要你具有相应的权限。
在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间(这里是指30G字节以上的文件系统)。
语法:find pathname -option
功能:用于在文件树中查找文件,并做出相应的处理(可能访问磁盘)。
常用选项:
-name :按照文件名查找文件。
18.grep指令
语法:grep 【选项】 搜寻字符串 文件
功能 :在文件中搜索字符串,将找到的行打印出来。(行文本过滤工具)
常用选项:
-i:忽略大小写的不同 ,所以大小写视为相同。
-n:顺便输出行号。
-v:反向选择,即显示出没有"搜寻字符串"内容的那一行。


19.zip/unzip指令
语法:zip压缩文件.zip目录或文件
功能:将目录或文件压缩成zip格式。
常用选项:
-r:递归处理,将指定目录下的所有文件和子目录一并处理。
当zip压缩目录时,需要加-r选项。zip -r dir.zip dir
举例:
将test2目录压缩:zip test2.zip test2/*
解压到tmp目录 :unzip test2.zip -d /tmp
unzip解压到目标目录要加选项 -d
20.tar指令(重要):打包/解包
语法:tar 【-cxtzjvf】文件与目录....
参数:
-c:建立一个压缩文件的参数指令(create的意思)。
-x:解开一个压缩文件的参数指令!
-t:查看tarfile里面的文件!
-z:是否同时具有gzip属性?即是否需要用gzip压缩?
-j:是否同时具有bzip2的属性?即是否需要用bzip2压缩?
**-v:压缩的过程中显示文件!**这个常用,但是不建议在背景执行过程!
-f:使用档名,请留意,在f之后要立即接档名!不要在加参数!
-C:解压到指定目录。
举例使用:
1.范例一:将整个 /etc 目录下的文件全部打包成为 '/tmp/etc.tar'
tar -cvf /tmp/etc.tar /etc -------->仅打包,不压缩!
tar -zcvf /tmp/etc.tar.gz /etc ----->打包后,以gzip压缩
tar -jcvf /tep/etc.tar.bz2 /etc ----->打包后,以bzip2压缩
特别注意:在参数f之后的文件档名都是自己取得,我们习惯上使用.tar来作为标识。
如果加 z 参数,则以 .tar.gz 或 .tgz 来表示gzip压缩过的tar file 。
如果加 j 参数,则以 .tar.bz2 来作为附档名 。
2.范例二:查阅上述 /tmp/etc.tar.gz 文件内有哪些文件?tar -tzvf /tmp/etc.tar.gz
由于我们使用gzip压缩,所以要查阅该tar file 内的文件时,就得加上 z 这个参数了!这很重要!
3.范例三:将 /tmp/etc.tar.gz 文件解压缩在 /usr/local/src 底下cd /usr/local/src
tar -xzvf /tmp/etc.tar.gz
在预设的情况下,我们可以将压缩档放在任何地方进行解开的!以这个例子来说,我先将工作目录变换到 /usr/local/src/etc 底下。并且解开 /tmp/etc.tar.gz 则会发现,该目录下的文件属性雨 /etc/可能会有所不同哦!
4.范例四:在 /tmp底下,我只要将 /tmp/etc.tar.gz内的etc/passwd解开而已cd /tmp
tar -tzvf /tmp/etc.tar.gz etc/passwd
我可以透过tar -tzvf 来查阅tarfile内的文件名称,如果单只要一个文件,就可以透过这个方式来下达!注意到!etc.tar.gz内的根目录/是被拿掉了!
5.范例五:将/etc/ 内的所有文件备份下来,并且保存其权限!tar -xzvpf /tmp/etc.tar.gz /etc
这个-p的属性是很重要的,尤其是当你想要保留原文件的属性时!
6.范例六:在 /home 当中,比2005/06/01新的文件才备份tar -N "2005/06/01" -czvf home.tar.gz /home
7.范例七:我要备份 /home,/etc ,但是不要 /home/dmtsaitar --exclude /home/dmtsai -czvf myfile.tar.gz /home/* /etc/*
21.bc指令
bc命令可以很方便的进行浮点运算。

22.uname -r 指令
语法:uname 【选项】
功能 :uname用来获取电脑和操作系统的相关信息。
补充说明 :uname可显示Linux主机所用的操作系统的版本,硬件的名称等基本信息。
常用选项:
-a或-all 详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称。

23.重要的几个热键【Tab】,【ctrl】-c,【ctrl】-d
【Tab】按键:具有【命令补全】和【档案补齐】的功能。
【ctrl】-c按键:让当前的程序停掉。
【ctrl】-d按键:通常代表着【键盘输入结束(End of file,EOF)】的意思;另外,他也可以用来取代exit
24.关机
语法:shutdown 【选项】
常见选项:
-h:将系统的服务停掉后,立即关机。
-r:在将系统的服务停掉之后就重新启动。
-t sec:-t后面加秒数,即【过几秒后关机】的意思。
下面的命令为扩展:
安装和登录命令:login,shutdown,halt,reboot,install,mount,umount,chsh,exit,last。
文件处理命令:file,mkdir,grep,dd,find,mv,ls,diff,cat,ln。
系统管理相关命令:df,top,free,quota,at,lp,adduser,groupadd,kill,crontab。
网络操作命令:ifconfig,ip,ping,netstat,telnet,ftp,route,rlogin,finger,mail,nslookup。
系统安全相关指令:passwd,su,umask,chgrp,chmod,chown,chattr,sudo,ps,who。
其他命令:tar,unzip,gunzip,unarj,mtools,man,unendcode,uudecode。
shell命令以及运行原理
Linux严格意义上来说是一个操作系统,我们称之为"核心(kernel)",但我们一般用户,不能直接使用kernel。而是通过kernel的"外壳"程序,也就是所谓的shell,来与kernel进行沟通。
从技术角度,shell的最简单的定义:命令行解释器(command interpreter)主要包含:
1)将使用者的命令翻译给核心(kernel)处理。
2)同时,将核心的处理结果翻译给使用者。
对比windows GUI,我们操作windows不是直接操作windows内核,而是通过图形化接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符,或者运行起来一个应用程序)。
shell对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果通过内核运行处结果,通过shell解析给用户。
帮助理解:如果说你是一个害羞的人,那shell就像是媒婆,操作系统内核就是你们村漂亮且让你心动的小美。你看上了小美,但是又不好意思直接表白,那就让你家人去找媒婆帮你提亲,所有的事情你都直接跟媒婆沟通,由媒婆转达你的意思给小美,而我们找到媒婆姓王,它对应我们常使用的shell。
Linux权限的概念
Linux下有两种用户:超级用户(root)、普通用户。
1)超级用户:可以在Linux系统下作任何事情,不受限制。
2)普通用户:在Linux下做的事情有限。
3)超级用户的命令提示符是"#",普通用户的命令提示符是"$"。

命令:su【用户名】
功能:切换用户
例如:要从root用户切换到普通用户user,则使用su user。要从普通用户user切换到root用户则使用su root(root可以省略或者用-来代替),此时系统会提示输入root用户的口令。
在普通用户下,如果我们想给一条命令进行提权可以用sudo command ,但是前提是我们普通用户必须在系统的白名单中,也就是 /etc/sudoers文件中。
Linux权限管理
1.文件访问者的分类(人)
1)文件和文件目录的所有者:u----User
2)文件和文件目录的所有者所造的组的用户:g----Group
3)其他用户:o----Others
2.文件类型和访问权限(事物属性)

a)文件类型
d:文件夹
-:普通文件
l:软链接(类似于windows的快捷方式)
b:块设备文件(比如硬盘,光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件
b)基本权限
1)读(r):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限。
2)写(w):Write对文件而言,具有修改文件内容的权限;对于目录来说,具有删除移动目录内文件的权限。
3)执行(x):execute对文件而言,具有执行文件的权限;对目录来说具有进入该目录的权限。
4)"-":表示这个位置不具有该权限。
3.文件权限值的表示方法
a)字符表示方法
|---------|---------|---------|-------|
| Linux表示 | 说明 | Linux表示 | 说明 |
| r-- | 只读 | -w- | 仅可写 |
| --x | 仅可执行 | rw- | 可读可写 |
| -wx | 可写可执行 | r-x | 可读可执行 |
| rwx | 可读可写可执行 | --- | 无权限 |
b)8进制数值表示方法
|------------|-----|-----|
| 权限符号(读写执行) | 八进制 | 二进制 |
| r | 4 | 100 |
| w | 2 | 010 |
| x | 1 | 001 |
| rw | 6 | 110 |
| rx | 5 | 101 |
| wx | 3 | 011 |
| rwx | 7 | 111 |
| --- | 0 | 000 |
4.文件访问权限的相关设置方法
a)chmod
功能:设置文件的访问权限
格式:chmod【参数】权限 文件名
常用选项:
R:递归修改目录文件的权限。
说明:只有文件的拥有者和root才可以改变文件的权限。
chmod命令权限值的格式
1.用户表示符 +/-= 权限字符
+:向权限范围增加权限代号所表示的权限。
-:向权限范围取消权限代号所表示的权限。
=:向权限范围赋予权限代号所表示的权限。
用户符号:
u:拥有者。
g:拥有者同组(所属组)。
o:其他用户。
a:所有用户。
例如:
chmod u+w /home/abc.txt
chmod o-x /home/abc.txt
chmod a=x /home/abc.txt
2)三位8进制数字
实例:
chmod 664 /home/abc.txt
chmod 640 /home/abc.txt
b)chown
功能:修改文件的拥有者。
格式 :chown 【参数】 用户名 文件名
常用选项: -R 递归修改文件或目录的拥有者。
实例:
chown user1 f1
chown -R user1 filegroup1
c)chgrp
功能:修改文件或目录的所属组。
格式 :chgrp 【参数】 用户组名 文件名
常用选项: -R 递归修改文件或目录的所属组。
实例:# chgrp users /abc/f2
d)umask权限掩码
功能:查看或者修改文件掩码。
新建文件夹默认权限=0666
新建目录默认权限=0777
但实际上你所创建的文件和目录,看到的权限往往不是上面的这个值。原因在于创建文件或目录的时候还要受到umask的影响。假设默认权限是mask,则实际上创建出来的文件权限是:mask & (~umask)
格式:umask 权限值
说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为0022,普通用户默认掩码值为0002。
实例:
umask 755 //设置
umask //查看
umask 044 //设置
关于权限的三个问题?
1.为什么我们创建文件的默认权限是我们所看到的样子?
2.为什么普通文件是:664?
3.为什么目录文件是:775?
因为有umask权限掩码的存在 ,最终权限=初始权限&(~umask) 。规定文件默认的初始权限是0666 ,目录默认的初始权限是0777。在xshell中普通用户的umask为0002,所以最终我们看到的刚创建出来的文件权限是0664,目录权限是0775 。
file指令:
功能:辨识文件类型。
语法:file 【选项】文件或目录
常用选项:
-c:详细显示指令执行过程,便于排错或分析程序执行的情形。
-z:尝试去解读压缩文件的内容。
使用sudo 分配权限
1)修改 /etc/sudoers 文件分配文件
# chmod 740 /etc/sudoers
vi /etc/sudoers
格式:接受权限的用户登录的主机=(执行命令的用户)命令
2)使用sudo调用授权的命令
sudo -u 用户名 命令 实例: sudo -u root /usr/sbin/useradd u2
5.目录的权限
可执行权限:如果目录没有可执行权限,则无法cd到目录中。
可读权限:如果目录没有可读权限,则无法使用ls等命令查看目录中的文件内容。
可写权限:如果目录中没有可写权限,则无法在目录中创建文件,也无法在目录中删除文件。
那么,问题来了。换句话来说,就是只要用户具有目录的写权限,用户就可以删除目录中的文件,而不论这个用户是否有这个文件的权限。
这样好像有点不太科学啊,我张三创建一个文件,凭什么被你李四可以删掉?
root@localhost \~\]# chmod 0777 /home/ \[root@localhost \~\]# ls /home/ -ld drwxrwxrwx. 3 root root 4096 9月 19 15:58 /home/ \[root@localhost \~\]# touch /home/root.c \[root@localhost \~\]# ls -l /home/ 总用量 4 -rw-r--r--. 1 root root 0 9月 19 15:58 abc.c drwxr-xr-x. 27 litao litao 4096 9月 19 15:53 litao -rw-r--r--. 1 root root 0 9月 19 15:59 root.c \[root@localhost \~\]# su - litao \[litao@localhost \~\]$ rm /home/root.c #litao可以删除root创建的文件 rm:是否删除有写保护的普通空文件 "/home/root.c"?y \[litao@localhost \~\]$ exit logout
为了解决这个不科学的问题,Linux引入了粘滞位的概念。
粘滞位
root@localhost \~\]# **chmod +t** /home/ # 加上粘滞位 \[root@localhost \~\]# ls -ld /home/ drwxrwxrwt. 3 root root 4096 9月 19 16:00 /home/ \[root@localhost \~\]# su - litao \[litao@localhost \~\]$ rm /home/abc.c #litao不能删除别人的文件 rm:是否删除有写保护的普通空文件 "/home/abc.c"?y rm: 无法删除"/home/abc.c": 不允许的操作
当一个目录被设置为"粘滞位"(用chmod +t ),则该目录下的文件只能由
1)超级管理员(root)删除。
2)该目录的所有者删除。
3)该文件的所有者删除。

共享目录:o:rwt 权限表示可以创建,修改,但是彼此之间不可以互删对方。t是一种特殊的x权限!
关于权限的总结
1)目录的可执行权限是表示你可否在目录下执行命令。
2)如果目录没有-x权限,则无法对目录执行任何命令 ,甚至无法cd进目录 ,即使目录任然有-r读权限(这个地方很容易犯错,以为有了读权限就可以进入目录读取目录下的文件)。
3)而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进目录。但是由于没有目录的读权限,所以在目录下,即使可以执行ls命令,但仍然没有权限读取出目录下的文档。
