Linux基础知识整理[3]——文件与目录管理

时间:2021-01-15 08:14:57

文件与目录管理

目录与路径

绝对路径:路径的写法一定是从根目录“/”写起,例如:/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等信息。