绝对路径和相对路径:在linux中存在着绝对路径和相对路径。

绝对路径:路径的写法是由根目录"/"写起的,例如,“/usr/local/mysql”。

相对路径:路径的写法不是由根目录“/”写起的。用户登录系统后先进入到/,然后再进入到/home

#cd /home 
cd test

此时,用户所在的路径为“/home/test”,第一个cd命令紧跟“/home”,前面有斜杠;而第二个cd命令后紧跟“test”。这个“test”是相对于“/home”目录来讲的,所以称为相对路径。

命令cd

此命令是用来更改用户所在目录的,若后面什么也不跟,会进入当前用户的根目录

#cd /tmp
#pwd
/tmp
#cd 
#pwd
/root

pwd判断当前所在目录。cd命令后面只能是目录名,跟文件名就会报错,在linux文件系统中,两个符号也可以表示目录,“.”表示当前目录,“..”表示当前目录的上一级目录

#cd /usr/local/lib/ 进入此目录
#pwd                判断当前位置
/usr/local/lib
#cd .               进入当前目录
#pwd                判断当前路径
/usr/local/lib
#cd ..              进入上一级目录
#pwd
/usr/local
 

命令mkdir

创建目录命令,mkdir 是make directory 的缩写

#mkdir /tmp/test/123 
mkdir:无法创建目录 '/tmp/test/123' 没有那个文件或目录
#mkdir -p /tmp/test/123 
#ls /tmp/test
123
-p就是一起创建一大串级联目录,并且创建一个已经存在的目录不会报错
#ls -ld /tmp/test/123
drwxr-xr-x. 2 root root 4096 3月 5 16:24 /tmp/test/123
#mkdir /tmp/test/123
mkdir:无法创建目录,‘/tmp/test/123’文件已经存在,
#mkdir -p /tmp/test/123
#ls -ld /tmp/test/123
drwxr-xr-x. 2 root root 4096 3月 5 16:24 /tmp/test/123

ls -d 是针对目录的,通常和-l写成-ld 可以直接查看目录的属性,可以查看‘/tmp/test/123'目录的创建时间,如果不加‘-d’,会显示目录下的文件和目录属性。mkdir -p 后面跟一个存在的目录时,不会做任何更改变动,只是不会保存而已。

命令rmdir

rmdir用于删除空目录,也可是一个目录,或多个目录(用空格分割)这个命令一般只能删除目录不能删除文件.所以一般不用这个命令,改用rm,可删除目录,也可删除文件,

#ls /tmp/test
123
#rmdir /tmp/test/
rmdir:删除‘/tmp/test/’失败;目录非空
#rmdir /tmp/test/123
#ls

rmdir有局限性,即使加上-p 也只能删除一串的空目录,

命令rm

rm
-r;删除所选目录选项,等同于rmdir.和rmdir不同的是使用‘rm -r’删除目录时,会询问,是否删除,输入y。会删除,输入n.就不删除。 rm -r 可以删除非空目录。

 

-f会直接强制删除,不会询问,删除一个不存在的目录或者文件,也不会报错

#mkdir -p /tmp/test/123

#rm -r /tmp/test/123

rm:是否删除目录 ‘/tmp/test/123’?y  

#rm /tmp/test/123/123

rm:无法删除/tmp/test/123/123 ;没有这个文件或目录

#rm -f /tmp/test/123/123   这个文件不存在,加上-f 后不会报错,但如果删除一个存在的目录时,加上-f也会报错。所以在删除目录时一定要加上,-r

#rm -f /tmp/test/123

rm:无法删除,‘/tmp/test/123’:是一个目录

#rm -rf /tmp/test/123  -r不会询问是否报错。 rm -rf /  这个文件不能使用

环境变量,PATH

which 是用来寻找某个命令的绝对路径,

#which rmdir
/bin/rmdir
#which rm  (rm是使用alias 命令做了别名,用rm实际上是“rm -i”.加上-i会询问是否删除,
alias rm='rm -i'
      /bin/rm
#which ls
alias ls=’ls --color=auto’
      /bin/ls
alias 可以设置命令或者文件的别名,
(问题为什么,在输入命令时,只是直接打出命令,而没有使用这个命令的绝对路径呢。“这是环境变量PATH在起作用,
#
#echo $PATH 输出echo的值 $是变量的前缀符号,
/usr/local/sbin/:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
 
#mv /bin/ls /root
#ls
-bash: /bin/ls: 没有这个文件或者目录
 
mv是用于移动目录或者文件(剪切)重命名,直接将/root加入到$PATH中
#PATH=$PATH:/root
#echo $PATH
/usr/local/sbin/:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/root
#ls 
anaconda-ks.fg install.log install.log.syslog ls
 
另一种方法使用绝对路径
 
#/root/ls
anaconda-ks.fg install.log install.log.syslog ls
最好将文件还原到原来的位置
#mv /root/ls /bin/

命令cp

cp复制 -r 复制一个目录就必须加上-r

 
#mkdir 123
#cp 123 456 cp略过目录‘123’,
#cp -r 123 456
#ls -l
总用量,44
Drwxr-xr-x. 2 root root 4096 3月 5 17:23 123
drwxr-xr-x. 2 root root 4096 3月 5 17:23 456
-i 会询问是否覆盖,
#which cp 
alias cp='cp -i'
      /bin/cp
#cd 123 
#ls 
#touch aaa
#touch bbb
#cp -i aaa bbb
cp 是否覆盖 ‘bbb’? n
 
#echo '789'>aaa 789 写入aaa
#echo '987'>bbb 987 写入bbb
#cat aaa bbb  查看aaa bbb的内容
789
987
#/bin/cp aaa bbb 将aaa 复制到bbb 
#cat aaa
789
#cat bbb
789
cat 查看文件中的内容

命令mv

mv [选项][源文件或目录] [目标文件或目录]

目标文件是目录,但该目录不存在,
 
目标文件是目录,但该目录存在
 
目标文件是文件,但该文件不存在,
 
目标文件是文件,但该文件存在
 
#mkdir dira dirb 
#ls
anaconda-ks.cfg dira dirb install.log install.log.syslog
#mv dira dirc 目标文件目录是dirc ,且不存在,dira重命名为dirc
#ls
anaconda-ks.cfg dirb dirc install.log install.log.syslog
#mv dirc dirb 目标文件是目录dirb 且存在,则会把dirc移动到dirb目录里
#ls
anaconda-ks.cfg dirb install.log install.log.syslog
#ls dirb
dirc
 
#touch filed
#ls
anaconda-ks.cfg dirb filed install.log install.log.syslog
#mv filed filee 目标文件是filee 且u不存在,重命名为filee
#ls
anaconda-ks.cfg dirb filee install.log install.log.syslog
#mv filee dirb  目标文件是dirb,且存在,将filee 移动过到dirb里
#ls
anaconda-ks.cfg dirb install.log install.log.syslog
#ls dirb  显示dirb的文件
dirc filee

几个与文档相关的命令,

命令cat 用于查看一个文件的内容并显示在屏幕上,cat后面可以不加选项,直接跟文件名,

#echo '1111111111'>dirb/filee
#echo  '222222222'>> dirb/filee  >>重定向,把222222222输入到dirb/filee 追加>>   
                    > 如果文件里由内容会删除文件原有的内容,而使用>> 不会删除原来的内容
#cat dirb/filee
111111111
222222222
#cat -n dirb/filee -n 查看文件是,把行号也显示到屏幕上,
 1   111111111
   2  222222222
#cat -A dirb /filee -A 显示特殊字符,不加-A $是看不见的。
111111111$
222222222$ 

命令tac 和命令cat一样把文件内容显示在屏幕上,不过先显示最后一行,然后显示倒数第二行,最后显示第一行,和cat显示的是反序

#tac dirb/filee
222222222
111111111

命令more 也是查看内容,后面跟文件名,文件内容过多,按空格键下翻看下一个页面,想提前退出,按q

命令less 和more 一样,可以实现上翻下翻,按空格键下翻,按'j'可以向下移动,按一下移动一行,按‘k’可以向上移动,/后面跟关键字,按回车,查找下一个字,按n也可以显示下一个,‘?’向上搜索 ‘/’向下搜索。

命令head 用于显示文件的前10行,

-n 2 -n2 -后面有无空格都可以,也可以-4直接跟数字。

命令tail 命令显示最后10行,后面直接跟文件名,-n6就是显示最后6行,数字是几就显示最后几行。-f也经常使用,可以动态显示文件的最后10行, 如果文件不断增加,使用-f 方便直观。比如 tail -f /var/log/messages 可以动态,实时查看此文件的内容。

文件的所属主,和所属组,

一个linux目录和文件都有所属主,和所属组,所属主是指文件的是谁创建的,所属组是指,该属主所在的一个组,test1文件属主是user1,而test2的属主是user2,那么user2是不能查看test1文件的.而uesr2也不能查看test1 ,有时候也会由这样的需求,是一个文件同时能被user1 user2查看,所属组就排上用场了,创建一个users组,让user1 和user2同属于一个组,建立文件test3,且其所属组是users,这样用户user1和用户user2都可以查看这个文件。

linux文件由所属主(user)和,所属组(group)和其他用户(other)

[root@localhost ~]# ll
total 8       属主 属组
drwxr-xr-x. 2 root root   28 Mar  5 17:34 123
 
-rw-r--r--. 1 root root 1572 Dec  1  2016 CentOS-Base.repo
-rw-------. 1 root root 1259 Jun 19  2022 anaconda-ks.cfg
drwxr-xr-x.第一列包含文件类型,,所属主,所属组,以及其他用户对该文件的权限,第1列共11位,有的文件没有最后一位, 第一位是描述文件类型,l ,b, c,s等
 
d表示目录文件为目录,-表示为普通文件,l表示为链接文件(linux file)软连接就是该类型,示例,
[root@localhost ~]# ll /etc/rc.local
lrwxrwxrwx. 1 root root 13 Jul  6  2022 /etc/rc.local -> rc.d/rc.local

b表示该文件为块设备,就是比如/dev/sda 这样的文件。

c表示该文件为串口设备文件又称,字符设备,比如键盘,鼠标,打印机,tty终端设备,都是这样的文件
s表示该文件为,套接字文件(socket) 用于进程之间的通信,
文件类型后面3个为一组,rwx r可读,w可写,x可执行,
前三位是属主(user)的权限,中间3位,是所属组(group)的权限,最后3位,是其他非用户(others)的权限
-rwxr-xr- 普通文件,属主由可读可写可执行的权限,属组对其由可读不可写可执行的权限,其他用户拥有可读权限,
对于一个目录来讲,打开就是执行权限,所以任何一个目录都要有x的权限,有可执行权限,才能打开该目录 一个目录属性为drwxr-r-属主为root 那么除了root用户为其他用户是不能打开此目录的。
最后一个位是个点. ls添加了,selinux或acl的属性,acl属性是+号,

第2列表示链接占用的节点(inode),如果是目录,那么这个数值是与该目录下子目录数量有关,
第3列表示文件的所属主
第4列表示文件的所属组
第5列表示文件的大小,
第6列,7,8表示最后一次被修改的时间(mtime)依次是,月份,日期,以及时间,
第9列是文件名

命令,chgrp 可以修改文件的所属组,

格式位chgrp 组名,文件名,

[root@localhost ~]# groupadd testgroup创建testgroup组
[root@localhost ~]# touch test1       创建文件test1
[root@localhost ~]# ll test1         查看其属性
-rw-r--r--. 1 root root 0 Mar  6 17:07 test1
[root@localhost ~]# chgrp testgroup test1  更改目录属组,
[root@localhost ~]# ll test1
-rw-r--r--. 1 root testgroup 0 Mar  6 17:07 test1
[root@localhost ~]#
上面用到了groupadd 增加一个用户组,
chgrp 还可以更改目录的所属组,
[root@localhost ~]# ll   123显示123 目录下文件的信息
total 8
-rw-r--r--. 1 root root 4 Mar  5 17:39 aaa
-rw-r--r--. 1 root root 4 Mar  5 17:40 bbb
[root@localhost ~]# ls -ld 123/  查看目录123的信息
drwxr-xr-x. 2 root root 28 Mar  5 17:34 123/
[root@localhost ~]# chgrp testgroup 123  更改目录123的所属组
[root@localhost ~]# ls -ld 123/    查看是否更改,
drwxr-xr-x. 2 root testgroup 28 Mar  5 17:34 123/ 
[root@localhost ~]# ll 123       只更改了目录,没有更改目录下子文件 
total 8
-rw-r--r--. 1 root root 4 Mar  5 17:39 aaa
-rw-r--r--. 1 root root 4 Mar  5 17:40 bbb
 
[root@localhost ~]# groupadd testgroup创建testgroup组
[root@localhost ~]# touch test1       创建文件test1
[root@localhost ~]# ll test1         查看其属性
-rw-r--r--. 1 root root 0 Mar  6 17:07 test1
[root@localhost ~]# chgrp testgroup test1  更改目录属组,
[root@localhost ~]# ll test1
-rw-r--r--. 1 root testgroup 0 Mar  6 17:07 test1
[root@localhost ~]#
上面用到了groupadd 增加一个用户组,
chgrp 还可以更改目录的所属组,
[root@localhost ~]# ll   123显示123 目录下文件的信息
total 8
-rw-r--r--. 1 root root 4 Mar  5 17:39 aaa
-rw-r--r--. 1 root root 4 Mar  5 17:40 bbb
[root@localhost ~]# ls -ld 123/  查看目录123的信息
drwxr-xr-x. 2 root root 28 Mar  5 17:34 123/
[root@localhost ~]# chgrp testgroup 123  更改目录123的所属组
[root@localhost ~]# ls -ld 123/    查看是否更改,
drwxr-xr-x. 2 root testgroup 28 Mar  5 17:34 123/ 
[root@localhost ~]# ll 123       只更改了目录,没有更改目录下子文件 
total 8
-rw-r--r--. 1 root root 4 Mar  5 17:39 aaa
-rw-r--r--. 1 root root 4 Mar  5 17:40 bbb
 
添加选项-R 连同目录子文件一起更改了所属组
[root@localhost ~]# chgrp -R testgroup 123
[root@localhost ~]# ll 123
total 8
-rw-r--r--. 1 root testgroup 4 Mar  5 17:39 aaa
-rw-r--r--. 1 root testgroup 4 Mar  5 17:40 bbb
 
命令chown 可以更改文件的所属主,格式为,chown -R 用户名,文件名,或者,chown -R 用户名,组名 文件名。这里的-R只适用于目录,作用联级更改,不仅修改当前目录,子文件,子目录全部修改。
 
[root@localhost ~]# mkdir test         创建test目录
[root@localhost ~]# useradd udrt1      创建用户udrt1 useradd 创建用户
[root@localhost ~]# touch test/test2    在test 目录下创建test2文件
 
[root@localhost ~]# chown udrt1 test       更改test属主
[root@localhost ~]# ll test
total 0
-rw-r--r--. 1 root root 0 Mar  6 17:23 test2
 
[root@localhost ~]# ls -ld test                   test目录以及更改了目录属组udrt1,
drwxr-xr-x. 2 udrt1 root 19 Mar  6 17:23 test
[root@localhost ~]# ls -l test                    但是目录下的子文件属主依旧是root 
total 0
-rw-r--r--. 1 root root 0 Mar  6 17:23 test2
[root@localhost ~]# ls -l test
total 0
-rw-r--r--. 1 root root 0 Mar  6 17:23 test2
[root@localhost ~]# chown -R udrt1:testgroup test   更改test目录以及子文件都修改成属主udrt1 所属组是testgroup
[root@localhost ~]# ls -l test
total 0
-rw-r--r--. 1 udrt1 testgroup 0 Mar  6 17:23 test2

命令chmod

为了更好的了解文件的权限,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 文件名(这里的xwz代表是数字)-R 作用等同于chown的选项,也表示联级更改,linux目录默认权限是755,文件默认权限是644

[root@localhost ~]# ls -ld test  查看目录信息
drwxr-xr-x. 2 udrt1 testgroup 19 Mar  6 17:23 test
[root@localhost ~]# ls -l test  
total 0
-rw-r--r--. 1 udrt1 testgroup 0 Mar  6 17:23 test2
[root@localhost ~]# chmod 750 test   修改权限, 属主可读可写可执行,属组是可读不可写不可执行
                                                   其他用户没有权限
[root@localhost ~]# ls -ld test      查看目录权限信息    drwxr-xr-x.
drwxr-x---. 2 udrt1 testgroup 19 Mar  6 17:23 test       drwxr-x---
[root@localhost ~]# chmod -R 700 test       test目录及其子目录 属主可读可写科执行,属组,其他人没有权限,
[root@localhost ~]# ls -ld test
drwx------. 2 udrt1 testgroup 19 Mar  6 17:23 test    
[root@localhost ~]# ll test                查看信息
total 0
-rwx------. 1 udrt1 testgroup 0 Mar  6 17:23 test2

如果创建了一个目录又不想让其他人看到这个目录只需要设置成rwxr-----740
chmod 还支持使用rwx 来设置权限,u=user属主,g=group属组,0=other 其他用户,a代表其他

[root@localhost ~]# chmod u=rwx,og=rx test/test2    属主可读可写可执行,属组和其他可读,不可                                        写 可执行
[root@localhost ~]# ls -l test/test2   查看权限信息,
-rwxr-xr-x. 1 udrt1 testgroup 0 Mar  6 17:23 test/test2
 
[root@localhost ~]# chmod a-x test/test2   属主失去执行命令,
[root@localhost ~]# ll test             查看文件
total 0
-rw-r--r--. 1 udrt1 testgroup 0 Mar  6 17:23 test2  
[root@localhost ~]# ls -l test/test2       查看
-rw-r--r--. 1 udrt1 testgroup 0 Mar  6 17:23 test/test2
[root@localhost ~]# chmod u+x test/test2     可以属主加执行命令,
[root@localhost ~]# ls -l test/test2
-rwxr--r--. 1 udrt1 testgroup 0 Mar  6 17:23 test/test2
 

在默认情况下,目录的权限值是755,普通文件权限是644,这个值是由umask 决定的。umask改变默认的权限,"umask.xxx" 这个的xxx是代表3个数字,

[root@localhost ~]# umask  预设值是0022 

0022

若用户预设值是"0022",若用户建立的是普通文件,则预设没有可执行权限,只有r,w两个权限,最大值为666(-rw-rw-rw-)若用户建立的是目录,则预设值所有权限都开放,即777。(drwxrwxrwx)umssk数值代表两天规则中的默认值,(文件为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     修改umask值,
[root@localhost ~]# mkdir test2   创建目录
[root@localhost ~]# ls -ld test2   显示目录信息
drwxrwxr-x. 2 root root 6 Mar  7 12:33 test2 
[root@localhost ~]# touch test3    创建文件
[root@localhost ~]# ls -l test3     显示目录信息
-rw-rw-r--. 1 root root 0 Mar  7 12:34 test3
[root@localhost ~]# umask 022       改回默认的umask值
[root@localhost ~]# touch test4     创建文件 test4
[root@localhost ~]# ls -l test4
-rw-r--r--. 1 root root 0 Mar  7 12:35 test4
 

有的人喜欢把umask计算方法改为数字,比如"rwxrwxrwx"-"----w--w-"=777-022=755,咋一看是没有问题,当umask值为033,如果使用单纯的减法,文件默认的规则为666-033=633,这个是错的。正确的权限是666-033=644 "rw-rw-rw-"-"----wx-wx"="rw-r--r--"

umask 值是可以在/ext/bashrc 里面更改,默认情况下,root的umask 为022,一般使用者002,可写得权限非常重要,预设值会去掉写权限(即修改权限)

命令chattr修改文件的特殊属性,chattr [+-=][Asaci][文件或者目录名] +,-,=,分别为增加,减少和设定

A 代表文件或者目录的atime将不可被修改,
s 代表数据同步到磁盘中。
a 代表只能追加不能删除,非root用户不能设定该属性,
c 代表自动压缩该文件,读取时会自动解压,
i 代表文件不能被删除,重命名,设定链接,写入,以及新增数据

[root@localhost ~]# chattr +i test2    增加不能改动的属性
[root@localhost ~]# touch test2/test1   创建test2目录下test1 失败
touch: cannot touch 'test2/test1': Permission denied
[root@localhost ~]# chattr -i test2     减少不能改动的属性
[root@localhost ~]# touch test2/test1    test2目录下就可以创建文件了
[root@localhost ~]# chattr +i test2       增加不可改动的属性
[root@localhost ~]# rm -f test2/test1      不能删除,
rm: cannot remove 'test2/test1': Permission denied
常用a
[root@localhost ~]# chattr -i test2        去除不可改动的属性
[root@localhost ~]# touch test2/test3      
[root@localhost ~]# ls test2                      显示test2信息
test1  test3
[root@localhost ~]# chattr +a test2       test2只可以增加不可删除
[root@localhost ~]# rm -f test2/test1      不能删除
rm: cannot remove 'test2/test1': Operation not permitted
[root@localhost ~]# touch test2/test4        可追加,
[root@localhost ~]# ls test2
test1  test3  test4
 
[root@localhost ~]# chattr +a test2/test1
[root@localhost ~]# echo '1111' > test2/test1  > 将1111输入到test2/test1 并删除原来的内容
-bash: test2/test1: 不允许的操作
[root@localhost ~]# echo '1111' >> test2/test1  >> 将1111输入到test2/test1 不会删除原来的内容
[root@localhost ~]# cat test2/test1        查看test2/test1的信息
1111
 
[root@localhost ~]# chattr +i test2/test3      增加不了改动的属性
[root@localhost ~]# echo '111' >> test2/test3   追加111到test2/test3文件中 权限不够
-bash: test2/test3: 权限不够
[root@localhost ~]# echo '111' > test2/test3 将111添加到test2/test3 中权限不够,没有改动的权限
-bash: test2/test3: 权限不够
[root@localhost ~]# rm -f test/test3                   不可删除因为有-i的属性,不能改动
rm: cannot remove 'test2/test3': Operation not permitted 
[root@localhost ~]# chattr -i test2/test3

命令lsattr用来读取文件或目录的特殊权限的,lsattr [-aR] [文件/目录名] -a 列出所有文件连同隐藏文件 ls -a .-R 连同子目录一起列出和ls用法类似。

[root@localhost ~]# lsattr test2
-----a---------- test2/test1
---------------- test2/test3
---------------- test2/test4
[root@localhost ~]# chattr -a test2/test1 修改test2/test1的属性。
[root@localhost ~]# lsattr test2
---------------- test2/test1
---------------- test2/test3
---------------- test2/test4
[root@localhost ~]# lsattr -aR test2
-----a---------- test2/.
---------------- test2/..
---------------- test2/test1
---------------- test2/test3
---------------- test2/test4

set uid ,set gid ,sticky bit .

set uid 该权限针对二进制可执行文件,文件在执行阶段具有属主的所有权限, 比如passwd 这个命令就具有该权限,普通用户执行passwd可以修改密码,就是临时获取了root权限,

set gid 该权限针对目录,目录设置这个权限后,任何用户在此目录下创建的文件都具有和该目录所属的组相同的组,

sticky bit 可以理解为防删除位,一个文件是否可以被删除,取决于文件所在目录 是否 对该用户 具有写得权限,如果没有写权限,这个目录下 所有文件 都不能被删除。同时也不能添加新的文件,如果希望可以添加文件,但不能删除其他文件,则可以对 父目录 增加该权限,就算用户对 目录 具有 写的权限,也不能 删除其他用户的文件。

当有特殊权限时,第一位数字可以为0 ,1(--t),2(-s-),3(-st),4(s--),5(s-t),6(ss-),7(sst)

[root@localhost ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 27856 Apr  1  2020 /usr/bin/passwd
password 显示的是rws而非传统的rwx,用数字表示就算4755。 passwd 它是s--所以是4 
tmp显示的是rwt而非rwx 用数字表示就算1777   /tmp/是--t/所以是1
[root@localhost ~]# ls -ld /tmp/
drwxrwxrwt. 13 root root 4096 Mar  7 03:31 /tmp/

chmod u+s filename 文件增加一个setuid 权限, 去掉就算chmod u-s
设置set gid 命令为chmod g+s dirname 设置一个stick bit 就算chmod o+tdirnmae

linux下搜索文件,

which 只能用来查找PATH环境变量中出现的路径下的可执行文件,

寻找命令的绝对路径

[root@localhost ~]# which vi
/usr/bin/vi
[root@localhost ~]# which ls
alias ls='ls --color=auto'
        /usr/bin/ls
[root@localhost ~]# which cat
/usr/bin/cat
[root@localhost ~]#
 
whereis是通过预先成的一个文件列表库区查找,给出的文件名相关的文件。
 
格式为“whereis [-bmsu] [文件名称]”
 
-b 只查找binary 文件,
-m 只查找在说明文件manual 路径下的文件
-s 只查找source来源的文件,
-u 只查找没有说明档的文件
[root@localhost ~]# which ls  这个命令类似于模糊查找,只要文件名包含ls 字符就会列出来,
alias ls='ls --color=auto'
        /usr/bin/ls
[root@localhost ~]# which cat
/usr/bin/cat
[root@localhost ~]# which mysql
/usr/local/mysql/bin/mysql

locate 命令查找文件 如果服务器没有这个命令,需要安装mlocate软件包,安装命令 yum install -y mlocate 运行命令后会报错,因为系统还没有生产那个文件列表库。可以使用updatedb 命令立刻生成这个库 可以在/etc/update.conf 配置这个数据库生成或更新,

find 路径find [路径] [参数]

-atime +n/-n 表示访问或执行时间大于或小于n天的文件,
-ctime +n/-n 表示写入更改inode属性(如更改所有者,权限或者链接)时间大于或小于n天的文件,
-mtime +n/-n 表示写入时间大于或小于n天的文件,
[root@localhost ~]# find /tmp/ -mtime -1
/tmp/
/tmp/hsperfdata_root/32451
[root@localhost ~]# find /tmp/ -atime +10
/tmp/agent.log
[root@localhost ~]# find /tmp/ -atime +1
/tmp/hsperfdata_root/32451
/tmp/agent.log
/tmp/yum_save_tx.2023-02-28.17-24.xoa7XK.yumtx
/tmp/mysql.sock.lock
/tmp/mysql.sock

访问一个文件或者执行文件时atime 会发生更改,写入文件时Modified time 即 mtime 会发生更改
写入文件或更所有者权限,或链接设置时随inode内容的更改而更改
inode是索引节点,用来存放档案及目录的基本信息,包含时间信息,文档名,所属主,属组等,inode是unix操作系统中的数据结构,本质是结构体,可以使用 df -i 查看各个区的inode总数以及使用情况,

[root@localhost ~]# df -i
Filesystem                Inodes IUsed    IFree IUse% Mounted on
devtmpfs                   59349   375    58974    1% /dev
tmpfs                      62303     1    62302    1% /dev/shm
tmpfs                      62303   515    61788    1% /run
tmpfs                      62303    16    62287    1% /sys/fs/cgroup
/dev/mapper/centos-root 14151680 55600 14096080    1% /
/dev/sda1                 524288   332   523956    1% /boot
tmpfs                      62303     1    62302    1% /run/user/0

更改文件内容时,mtime和ctime也会更改,但是文件的ctime 会在mtime发生变化是更改。
例如更改文件的权限,内容没更改。怎么获取文件的时间修改属性呢?
stat 命令可以

[root@localhost ~]# stat test/test2
  File: 'test/test2'
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d    Inode: 17503884    Links: 1
Access: (0744/-rwxr--r--)  Uid: ( 1001/   udrt1)   Gid: ( 1002/testgroup)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2023-03-06 17:23:36.394184089 +0800
Modify: 2023-03-06 17:23:36.394184089 +0800
Change: 2023-03-06 18:26:03.321713986 +0800

atime 不一定在访问文件后被修改,因为在使用exe3文件系统是,如果mount 使用了noatime参数,那么就不会更新atime 的信息。 这个三个time属性都放在indo中,若mtime,atime被修改,那么inode就一定会被修改,既然inode修改了,那么ctime也会被修改,
-name filename 表示直接查找该文件的文件,这个选项比较常用,示例代码,

[root@localhost ~]# find . -name test
test/  test1  test2/ test3  test4
[root@localhost ~]# find . -name test2
./test/test2
./test2

-type fileype 表示通过这个文件类型查找文件,文件类型f,b,c,d,l,s 等类型

[root@localhost ~]# find /tmp/ -type d
/tmp/
/tmp/.ICE-unix
/tmp/.X11-unix
/tmp/.XIM-unix
/tmp/.font-unix
/tmp/.Test-unix
/tmp/hsperfdata_root
/tmp/systemd-private-aab46a410b1a448eb6ff6eba0814a503-chronyd.service-tIt4F4
/tmp/systemd-private-aab46a410b1a448eb6ff6eba0814a503-chronyd.service-tIt4F4/tmp
/tmp/tomcat.9999.167855191327008322
/tmp/tomcat.9999.167855191327008322/work
/tmp/tomcat.9999.167855191327008322/work/Tomcat
/tmp/tomcat.9999.167855191327008322/work/Tomcat/localhost
/tmp/tomcat.9999.167855191327008322/work/Tomcat/localhost/wgcloud
/tmp/tomcat-docbase.9999.2670529774861861537
/tmp/tomcat.9999.5341271406305761952
/tmp/tomcat.9999.5341271406305761952/work
/tmp/tomcat.9999.5341271406305761952/work/Tomcat
/tmp/tomcat.9999.5341271406305761952/work/Tomcat/localhost
/tmp/tomcat.9999.5341271406305761952/work/Tomcat/localhost/wgcloud
/tmp/tomcat-docbase.9999.7988500506578073714

linux常见的几种类型,

普通文件(regular file )即一般类型的文件,用命令'ls -l ',查看某个目录是,第一个属性为“-”的文件就是普通文件,它又分,纯文本文件(ASCII)和二进制文件(binary)纯文本文件可以通过,cat,more,less 等工具查看内容,而二进制不能,我们可以使用命令/bin/ls就是一个二进制文件,

目录(directory);使用命令'ls -l' 查看的第一个属性值为"d",的文件就是目录

链接文件(link) 用命令"ls -l"查看的第一个属性为l的文件就是链接文件,它类似windows的快捷方式

设备文件(device) 即与系统周边相关的一些文件,通常集中在/dev目录下,这种文件一般分为两种,一种块设备,就是一些存储设备数据,以供系统存取接口设备,简称硬盘。例如第一块硬盘是 /dev/sda1.用命令"ls -l"查看的第一个属性值为"b"的文件就是块设备,另一种是字符设备,是一些串行端口的接口设备。例如键盘,鼠标等。用命令"ls -l" 第一个属性为c的设备就是字符设备

linux 文件后缀名,

1.sh 代表是一个shell script 。
2.tar.gz 代表是一个压缩包,
my.cnf代表是一个配置文件,
test.zip代表是一个压缩文件。

linux的链接文件

链接文件分为硬链接(Hard links)和软链接(Symbolic links)两种。本质区别在于inode .

Hard Links 当系统要读取一个文件时,就会先读取inode table .然后再根据inode 中的信息到块区域将数据取出来,而硬链接就是直接在建立一个inode 链接到文件位置的块区域,即进行硬链接是文件没有发生变化,只是增加了一个指向这个文件的inode, 硬链接有两个限制,1,不能跨文件系统,因为不同的文件系统,有不同的,inode table;2,不能链接目录

Symbolic Links 软连接是直接建立一个独立的文件,读取这个文件时,会转发到这个文件所链接的文件上。 例如一个文件a,做了一个软连接到b文件上(只是一个链接文件非常小),当删除a时,链接文件b不会删除,但如果再次读取b时,会提示无法打开文件。然而删除b时,a是不会有任何影响的。

似乎硬链接比较安全,删除某一个inode被删除了,只需要任何一个inode 存在,该文件也不会消失。但由于硬链接限制爱多,软连接使用比较广。

ln 命令格式,"ln [-s ] [来源文件] [目的文件]" 该命令常用选项是 -s 如果不选-s 选项就是建立硬链接,加上-s 就是建立软连接,

[root@localhost ~]# mkdir 123
[root@localhost ~]# cd 123
[root@localhost 123]# cp /etc/passwd ./
[root@localhost 123]# ll
total 4
-rw-r--r--. 1 root root 1214 Mar  7 18:04 passwd
[root@localhost 123]# ls
passwd
[root@localhost 123]# ls -a
.  ..  passwd
[root@localhost 123]# du -sk
4       .
[root@localhost 123]# ln passwd passwd-hard
[root@localhost 123]# ll   命令相当于 ls -l  使用which命令查看一下,做了硬链接后,虽然两个文件大小,都为1097  但目录大小没有变化,
total 8
-rw-r--r--. 2 root root 1214 Mar  7 18:04 passwd
-rw-r--r--. 2 root root 1214 Mar  7 18:04 passwd-hard
[root@localhost 123]# du -sk
4       .
 
先删除源文件,在比较下,
 
[root@localhost 123]# rm -f passwd
[root@localhost 123]# ll
total 4
-rw-r--r--. 1 root root 1214 Mar  7 18:04 passwd-hard
[root@localhost 123]# du -sk
4    
 
啥删除源文件后,passwd 后大小依旧不变,说明硬链接只是复制了一份inode信息,就是链接的限制之一,不允许目录做硬链接,示例如下:
[root@localhost 123]# ln 123 456
ln: failed to access '123': No such file or directory
 
再看看软连接的特性,
创建456 目录,复制/etc/passwd 文件做测试,再做一个软连接文件,
 
[root@localhost 123]# mkdir 456  
[root@localhost 123]# cd 456
[root@localhost 456]# cp /etc/passwd ./ 复制到当前目录
[root@localhost 456]# ln -s passwd passwd-soft    做硬连接
[root@localhost 456]# ll
total 4                                       查看信息,
-rw-r--r--. 1 root root 1214 Mar  7 18:29 passwd
lrwxrwxrwx. 1 root root    6 Mar  7 18:30 passwd-soft -> passwd 
[root@localhost 456]# head -n1 passwd
root:x:0:0:root:/root:/bin/bash
[root@localhost 456]# rm -f passwd           删除文件。
[root@localhost 456]# head -n1 passwd-soft         查看文件,
head: cannot open 'passwd-soft' for reading: No such file or directory
[root@localhost 456]# ll
total 0
lrwxrwxrwx. 1 root root 6 Mar  7 18:30 passwd-soft -> passwd
[root@localhost 456]#
删除源文件不能读取软连接文件,而且使用命令ll 也发现颜色有所变化,这说明不能做硬链接 可以做软连接
[root@localhost 123]# ln -s 456 789
[root@localhost 123]# ls -l 456 789
lrwxrwxrwx. 1 root root  3 Mar  7 18:37 789 -> 456