文件与目录管理
目录与路径
绝对路径:路径的写法一定是从根目录“/”写起,例如:/usr/share/doc 目录。
相对路径:路径的写法不是由“/”写起,例如从/usr/share/doc转到/usr/share/man下时,可以写成cd ../man。这就是相对路径的写法。
常用的目录“符号”代表的意义:
. 代表当前层目录
.. 代表上层目录
~ 代表自己的根目录
~user 代表到user这个人的根目录
目录与路径的几个常用指令
①cd变换目录
一旦登入Linux系统,系统管理员的工作路径会自动切换到其根目录(即/root)下,而用户会自动转到/home/username下。
[root @test /root]# cd .. <==回到上一层目录
[root @test /root]# cd ../home <==相对路径的写法
[root @test /root]# cd /var/www/html <==绝对路径的写法
[root @test /etc]# cd <==回到用户的根目录
[root @test /etc]# cd ~ <==回到用户的根目录
[root @test /etc]# cd ~test <==回到test用户的根目录
②pwd显示当前目录
[root @test root]# cd /home/test
[root @test test]# pwd
/home/test <==显示当前所在目录
③mkdir建立一个新目录
[root @test /root]# mkdir test <==建立名为test的目录
目录需要一层一层地建立,假如您要建立一个目录为/home/bird/testing/test1,那么首先必须要有/home然后/home/bird,再后来是/home/bird/testing,这些必须都存在才可以建立test1这个目录,假如没有/home/bird/testing,就没有办法建立test1。
④rmdir删除一个内容为空的空目录
[root @test /root]# rmdir test <==删除名为test的目录
目录需要一层一层地删除,而且被删除的目录中不能有其他的目录或文件。如果要将所有目录下的东西都删除,这个时候就必须使用rm -rf test命令,但使用rmdir的安全性较高一些。
环境变量PATH
当我们执行一个指令时,系统会依照PATH的设定到PATH定义的每个路径下搜寻文件,先搜寻到的指令文件先被执行
[root@test root]# echo $PATH
/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin:/usr/local/sbin
这也就解释了可以在/root下执行/bin/ls这个文件的原因。但是为了安全起见,不建议将“.”加入PATH中。
文件与目录管理
①ls 显示文件名称、属性等 # ls [-ailS]
参数说明:
-a :列出所有文件(连同隐藏文档)
-i :打印inode的值
-l :详细列出,连同文件大小、属性数据等;ll等价于ls –l
-S :以文件大小排序
--color=never :不显示颜色
--color=always :均显示颜色
--color=auto :由系统自行判断
②cp 复制文件或目录 # cp [-drsu] [源文件] [目标文件]
参数说明:
-d :进行复制时,如果是复制到链接文件,若不加任何参数,则默认情况下会将链接到的源文件
复制到目的地,若加-d,则链接文件可原封不动地将链接这个快捷方式复制到目的地。
-r :可以进行目录的复制。
-s :做成链接文件,与ln指令功能相同。
-u, --update:如果源文件较新,或者没有目标文件,才会进行复制动作。可用于备份操作。
[root @test /root]# cp .bashrc bashrc
将.bashrc复制成bashrc文件!
[root @test /root]# cp -r /bin /tmp/bin
这个功能用来复制整个目录的参数!
[root @test /root]# cp -s .bashrc bashrc.cp
建立一个链接文件,文件名为bashrc.cp
[root @test /root]# cp -u /root/.bashrc/home/test/.bashrc
先检查/home/.bashrc与.bashrc是否相同,如果不同就复制一份;如果相同则不做任何动作!
③rm 删除文件或目录 # rm [-fir] [文件名]
-i :提供用户确认(这是默认值)。
-r :循环删除,直到没有东西为止。
-f :force,就是强制删除。
④mv 移动文件或目录 # mv [-u] [源文件] [目标文件]
-u :同样,为update的简写,当源文件比目标文件还新时才会动作!
查看文件内容
①cat由第一行开始显示文件内容 # cat [-n]
-n: 显示时,连行号一起输出到屏幕上。
cat较不常见,毕竟在文件内容行数超过40行以上时根本来不及看,所以,配合more或者less执行比较好。
②tac从最后一行开始显示,可以看出,tac是cat的倒写;# tac [文件名]
③more一页一页地显示文件内容; # more [文件名]
[root @test /root]# more ~/.bashrc <==一页一页地显示文件内容
[root @test /]# ls -al | more <==一页一页地将ls的内容显示出来
④less与more类似,但其优点是可以使用[pageup]、[pagedown]等按键的功能向前向后翻看文件;
# less [文件名]
⑤head只看头几行; # head [-n number] [文件名]
⑥tail只看末尾几行; # tail [-n number] [文件名]
⑦nl显示时同时输出行号
⑧od以二进制方式读取文件内容
链接文件
inode:Block是记录文件内容数据的区域,inode则是记录该文件的属性及其放置在哪个Block之内的信息。所以,每个文件都会占用一个inode。当Linux系统要查找某个文件时,它会先搜寻inode table找到这个文件的属性及数据放置地点,然后再查找数据存放的Block进而将数据取出
硬链接:硬链接就是再建立一个inode链接到文件放置的Block块。也就是说,进行硬链接时,实际上您的文件内容不会改变,只是在查询时,利用原来的inode与后来添加的inode均可指定到该文件放置的地点,因此,读取两个inode的结果都是存取同一个文件的内容。不过,这样一来就有个问题,因为inode会链接到Block块,而“目录”本身仅消耗inode,这样,硬链接就不能链接目录。所以,硬链接有两个最大的限制:
1. 不能跨文件系统,因为不同的文件系统有不同的inode table;
2. 不能链接目录。
符号链接:再建立一个独立文件,而这个文件会让数据读取操作指向它链接的那个文件。由于只是利用文件作为指向的动作,所以,当源文件被删除,符号链接的文件就打不开了,屏幕会显示“无法开启某文件”。
[root @test /root ]# ln [-s] [源文件] [目标文件]
-s :提供符号链接
:如果直接使用ln而不加任何参数,就属于硬链接
Linux的链接与Windows的快捷方式是不一样的。举个例子,当您在Windows建立一个快捷方式时,可以在这个快捷方式内修改任何数据,而原始数据不会跟着变。而当您修改Linux下的链接文件时,则更改的其实是原始文档。所以,不论这个原始文档被链接到哪里,只要修改了链接文件,原始文档就会跟着变。
文件与目录权限
①chown 改变文件的拥有者
②chgrp 改变文件的所属群组
③chmod 改变文件的可写、可读、可执行等属性
④umask 改变预设的建立文件或目录时的属性
umask指定的是“该默认值需要取消的权限”
[root @test root]# umask
0022
[root@vbird test]# umask 002
[root@vbird test]# umask
0002
⑤chattr 改变文件的特殊属性
⑥lsattr 显示文件的特殊属性
搜寻文件或目录
①which查看可执行文件的位置
[root @test /root ]# which [文件名称]
[root @test /root]# which passwd
/usr/bin/passwd
which的基本功能是通过PATH环境变量到该路径内寻找可执行文件,所以基本的功能在于寻找可执行文件。
②whereis查看文件的位置
[root @test /root ]# whereis [-bmsu] [目录名称]
-b :只找二进制文件
-m :只找在说明文件manual路径下的文件
-s :只找source源文件
-u :没有说明文档的文件!
③locate配合数据库查看文件位置
[root @test /root ]# locate [目录名称]
[root @test /root]# locate root
……一大堆带有root字符串的文件都会显示出来
[root @test /root]# updatedb
立刻更新数据库
Linux系统会将系统内的所有文件都记录在一个数据库文件中,当使用whereis或locate时,都会以此数据库文件的内容为准,使用locate查找数据特别快,这是因为locate是从已建立的数据库/var/lib/slocate中查找数据,不用直接在硬盘中存取数据,所以自然很快。正因为它是通过数据库来搜寻而数据库的更新默认是每周执行一次,所以,在数据库更新之前新建的文件就会找不到,必须要在更新数据库之后。
④find实际搜寻硬盘查询文件名称
[root @test /root ]# find [路径] [参数]
参数说明:
1. 时间:
-atime n :将n*24小时内被存取过的文件列出来
-ctime n :将n*24小时内被改变、新增的文件或目录列出来
-mtime n :将n*24小时内被修改过的文件列出来
-newer file :把比file还要新的文件列出来
2. 使用名称:
-gid n :寻找群组ID为n的文件
-group name :寻找群组名称为name的文件
-uid n :寻找拥有者ID为n的文件
-user name :寻找用户名称为name的文件
-name file :寻找文件名为file的文件名称(可以使用通配符)
-type type :寻找文件属性为type的文件,type包含了b, c, d,p, l, s,
这些与前一章的属性相同。例如l为Link而d为目录
范例:
[root @test /root]# find / -name testing<==寻找文件名为testing
[root @test /root]# find / -name 'test*'<==寻找文件名包含test的
[root @test /root]# find . -ctime 1
寻找当前目录下一天内新增的目录或文件
[root @test /root]# find /home/test –newer.bashrc
寻找/home/test目录下比.bashrc还要新的文件
SUID与SGID
UID代表用户代号,GID则是群组代号。
[test@test test]$ ls -l /usr/bin/passwd
-r-s--x--x 1 root root 13476 Aug 7 2001/usr/bin/passwd
在原来x的位置有一个s属性,这个就是所谓的SUID。如果是-r-xr-s--x,那么s就成为所谓的SGID。当一个文件具有SUID时,同时others群组具有可执行权限,那么当others群组执行该程序时,others将拥有该文件的owner权限。Set UID(SUID)的主要功能是在某个文件执行其间具有文件拥有者的权限,因此,s可以替代上面提到的x可执行属性的位置。
Stickybit:具有sticky bit属性的目录,其下的文件或目录只有文件拥有者及root才有权删除。
[test@test test]$ ls -l /
drwxrwxrwt 2 root root 4096 Jul 18 13:08tmp
最末位用t取代x
file命令
[root @test /root ]# file [文件名]
[root @test /root]# file ~/.bashrc
/root/.bashrc: ASCII text <==表示这个文件是ASCII纯文本文件
file指令可以用来查看这个文件的类型,例如ASCII文档或二进制文件等,还可以用来查看文件是否被加入SUID等信息。