绝对路径和相对路径:在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