5-Linux文件与目录管理(Linux教程)

<meta content="text/html; charset=utf-8" http-equiv="CONTENT-TYPE"> <meta content="OpenOffice.org 2.3 (Linux)" name="GENERATOR"> <style type="text/css"> <!-- @page { size: 21cm 29.7cm; margin: 2cm } P { margin-bottom: 0.21cm } --> </style>

Linux文件与目录管理


1。目录与路径

a. 相对路径与绝对路径

绝对路径:从根目录/开始的;

相对路径:相对当前目录的;


目录访问常用到的指令:

cd 变换目录

pwd 显示当前目录

mkdir 建立一个新目录

rmdir 删除一个内容为空的空目录

. 代表当前层目录

.. 代表上层目录

~ 代表自己的家目录

~user 代表到user这个人的家目录


b. cd与pwd

cd 即change directory,变换当前目录

cd 相对路径或绝对路径

注意cd之后要有空格

cd .. 回到上一层目录

cd ../home 相对路径

cd /var/www 绝对路径

cd ~ 回到用户的家目录

cd ~test 回到test用户的家目录


pwd 即是print working directory显示当前所在目录,use it when you are lost.


c. mkdir和rmdir

mkdir 即make directory建立目录

mkdir [目录名称]


rmdir 即remove directory 删除目录

rmdir [目录名称]

注意:rmdir需要要删除的目录下为空,比较安全;如果要删除目录下所有的东西都删除,需要使用命令rm -rf [目录名称]


d. 环境变量PATH

我们知道应用程序的命令一般都放在bin或者sbin目录下,但是通常我们在某个目录下执行命令如ls,也可以执行。只是因为环境变量PATH的作用。

当执行一条指令的时候,系统会按照PATH定义的每个路径去搜寻文件,先搜寻到的指令文件先被执行。

输入

echo $PATH

可以显示系统当前的环境变量

如:

hemin@hemin-desktop:~$ echo $PATH


/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games


可以看到$PATH其实为一个字符串包含了各个路径,如
/usr/local/sbin

/usr/local/bin

/usr/sbin

/usr/bin

/sbin

/bin


往PATH环境变量中添加新路径/root使用如下命令

PATH=$PATH:/root

即是对变量PATH赋值。


2。文件与目录管理

a. 显示

ls 显示文件名称,属性等

ls [-ailS]

可以使用的选项有ailS

-a 列出所有文件(连同隐藏文件)

-i 打印inode的值

-l 详细列出文件各个属性

-S 以文件大小排序

--color=never 不显示颜色

--color=always 均显示颜色

--color=auto 系统自动判断


b. 复制cp (copy)

cp [-drsu] [源文件] [目标文件]

-d

-r 目录的复制

如cp -r /bin /tmp/bin

-s 做成链接文件(类似Windows中的快捷方式)

-u(或者--update) 如果源文件较新,或者没有目标文件,才进行复制动作,经常用于备份操作


c. 删除文件remove

rm [-fir] [文件名]

-i 提供用户确认在删除文件之前(默认的)

-r 循环删除(递归的意思Recursive)

-f 强行删除force不会有提示确认

前面说过要删除一个空目录可以使用rmdir 目录名称

如果删除一个非空目录需要使用rm -rf 目录名称

即循环删除各个子目录并且强行删除没有提示确认。


d. 移动文件move

mv [-u] [源文件] [目录文件]

-u 为update缩写,当源文件比目标文件还新时才会动作

例如:

mv bashrc bashrc.old

mv bashrc bashrc2 /tmp //注意最后一个才是最终的目标文件,其他的都是源文件

mv命令的用途:

用作移动,移动文件或者命令很重要,可以使用-u(update)测试新旧文件,看看是否需要搬移;

另一个用途用于变更文件名,使用mv更改文件的文件名(因为是移动不是复制,移动之后不会保留源文件)

举例:

mkdir test

mv test test2

现建立目录test,然后重命名test为test2


3。查看文件内容

a. cat [-n]和tac

cat是Concatenate(连续)的简写,主要功能是将一个文件的内容连续输出到屏幕上。

参数-n显示的同时会添加行号。

tac与cat相反,cat从第一行开始显示,tac从最后一行显示。

由于cat和tac都是全部显示,对于行数较多的内容不太方便,经常用于行数较少的。

b. more和less

相对于cat和tac,more和less更好用。

more [文件名]

此外more还可以和管道pipe一起使用,比如ls -al|more,这样可以分页显示输出的内容;

less [文件名]

less比more更好使用,more没有办法向前翻页,只能往后看,less可以向前和向后翻页,使用pageup, pagedown

此外显示的时候

输入/word 还可以在less显示的结果中搜索word字符

q 退出less画面

c. head和tail

head和tail用于读取某个文件的前几行或者后几行

head [-n number] [文件名]

tail [-n number] [文件名]

默认显示10行

如head -n 20 filename

tail -n 12 filename

d. nl

nl显示文件内容,并显示行号,与cat -n效果相同

e. od以二进制方式读取文件内容

od [文件名称]


4。链接文件

a. 什么是inode

硬盘的一些概念:

硬盘一般包括多个硬盘盘片;

磁道为每个盘片上磁头旋转一周所走过的轨迹Track

各个盘片上的磁道叠加起来构成的圆柱体,叫做磁柱Cylinder

同时每个磁道又被分割成多个区域,每个区域叫做一个扇区,扇区是硬盘的最小存储物理量,一个扇区的存储容量大约为512字节。Sector


知道了硬盘的大体结构,要使用硬盘需要进行硬盘分区,对硬盘进行分割的最小单位是磁柱,分割完后就是格式化,格式化之后才可以写入数据。

Linux格式化硬盘考虑inode和Block。


其中Block为硬盘记录文件内容数据的区域,由数个扇区组成;inode则是记录文件属性及放置在那个Block之内的信息。


因此每个文件占用一个inode,但系统需要寻找该文件的时候,会现搜寻inode table找到该文件的属性以及数据存放的Block位置,然后到相应的Block中去将数据取出。

简单来说inode和Block。每个文件对应一个inode,系统通过inode或者该文件的属性以及该文件所存放的Block,然后到该Block中存取该文件的数据。

由于inode会链接到Block块进而获取文件的内容,因此目录本身仅仅消耗inode。


b. Linux中的链接文件

Linux中的链接文件类似Windows中的快捷方式,链接又分为硬链接与符号链接

1) 硬链接

当系统读取某个文件的时候,会先读取inode table,然后根据inode的信息获知文件的属性以及文件的数据。

硬链接就是再建立一个inode使它指向放置文件数据的Block块,即另一个新的inode

这样读取这两个inode可以达到相同的目的都能访问到文件的Block块。

因此硬链接即是再为文件添加一个inode。

由于目录本身仅仅消耗inode,因此硬链接不能用于链接目录。

硬链接的两个限制:

不能跨文件系统,因为不同的文件系统有不同的inode table;

不能链接目录;

2)符号链接

相对于硬链接,符号链接更类似于Windows中的快捷方式,它需要建立一个独立的文件,该文件指向文件本身,让数据读取操作指向所链接的那个文件。

对于硬链接如果一个文件的某个inode被删除,只要还有一个inode,该文件就能被找到。

对于符号链接,如果源文件删除了,符号链接就无法找到原来指向的文件。


和windows中的快捷方式不同的是,如Windows中对快捷方式操作不会影响到源文件,而Linux下对符号链接操作,会影响所链接文件中的内容。


此外使用ls -l,硬链接显示的第一个属性为-代表一个文件;符号链接显示的第一个属性为l,代表链接文件。


ln [-s] [源文件] [目标文件]

-s 提供符号链接,如果直接使用ln不添加任何参数,就属于硬链接


举例:

mkdir test

cd test

cp /usr/bin/passwd . //将文件passwd拷贝到.,.代表当前目录

ls -l

ln passwd passwd-hard //建立一个硬链接passwd-hard指向passwd文件

ls -l

cd ..

ln test test-hard //将会失败,因为不能为一个目录建立硬链接

cd test

ln -s passwd passwd-soft //添加-s选项建立符号链接

ls -l //显示到passwd-soft的第一个属性为l,代表一个链接文件

此外,如果删除源文件passwd,硬链接passwd-hard使用more仍旧可以显示内容;

但是符号链接passwd-soft就会提示找不到文件

rm passwd //不添加命令-f会提示用户删除确认

more passwd-hard //仍旧会正确显示文件内容

more passwd-soft //则会提示找不到文件


5。文件与目录权限

a. chown 改变文件或者目录的拥有者以及群组

chgrp改变文件或者目录的群组

chown [-R] user:group

-R可以循环地将目录下的所有文件都改成user:group

chgrp [-R] group

b. chmod修改文件的属性

chmod [-R] [parameter] [文件或者目录名称]

-R循环地将目录的文件都修改

c. umask

建立一个新的文件或者目录时,默认属性与umask有关。

umask用于指定当前用户建立文件或者目录时的属性默认值。

umask为4位数字,后3个代表对应的3组9个属性

输入umask显示为0022

则默认的属性值为0777-0022得到0755即是-rwxr-xr-x


可以设置umask,从而修改建立新文件的默认属性

设定umask使用命令

umask 3个数字

如umask 002

则新建立的文件默认属性为0777-002=0775即是-rwxrwxr-x

默认情况下umask为0022


一句话umask的意义能够确定新建立文件的默认属性,为777-umask的值

可以设置umask的值,从而可以得到umask的结果。

如果重新启动终端以后,umask会重置umask的值。


d. chattr和lsattr

chattr [+-=] [Asacdistu] [文件或目录名称]

参数说明

[root @test /root ]# chattr [+-=][ASacdistu] [档案或目录名称]
参数说明:
+-= :分别为 [+ 增加] [- 减少] [= 设定] 属性的意思
A  :当设定了 A 这个属性时,这个档案(或目录)的存取时间 atime (access) 将不可被修改,
    可避免例如手提式计算机容易有磁盘 I/O 错误的情况发生!
S  :这个功能有点类似 sync 的功能!就是会将数据同步写入磁盘当中!可以有效的避免数据流失!
a  :当设定 a 之后,这个档案将只能增加数据,而不能删除,只有 root 才能设定这个属性。
c  :这个属性设定之后,将会自动的将此档案『压缩』,在读取的时候将会自动解压缩出来!
    但是在储存的时候,将会先进行压缩之后再储存(看来对于大档案似乎蛮有用的!)
d  :当 dump (备份)程序被执行的时候,设定 d 属性将可使该档案(或目录)具有 dump 功效!
i  :这个 i 可就很厉害了!他可以让一个档案『不能被删除、改名、设定连结也无法写入或新增数据!』
    对于系统安全性有相当大的帮助!
j  :当使用 ext3 这个档案系统格式时,设定 j 属性将会使档案在写入时先记录在 journal 中!
    但是当 filesystem 设定参数为 data=journalled 时,由于已经设定了日志了,所以这个属性无效!
s  :当档案设定了 s 参数时,他将会被完全的移除出这个硬盘空间。
u  :与 s 相反的,当使用 u 来设定档案时,则数据内容其实还存在磁盘中,可以使用来 undeletion.


最重要的属性为+i属性,让一个文件无法被更改,对于系统安全性要求很高的很重要。

对于日志类的文档,+a属性可以增加但是不会被删除。

lsattr [-aR]

-a 将隐藏文件的属性也显示出来

-R 连同子目录的数据一并显示出来


6。搜索文件或目录

Linux包含有优秀的搜寻系统。

a. which 用于查看可执行文件或命令的位置

which [文件或者指令的名称]

如果

which ls

显示/bin/ls

b. whereis和locate查看文件的位置

whereis [-bmsu] [目录名称]

-b 只找二进制文件

-m 只找在说明文件manual路径下的文件

-s 只找source源文件

-u 没有说明文档的文件

不加任何参数,则所有的数据都罗列出来。


locate [目录名称]

locate使用比较简单,只需要在后面直接添加要找的文件名即可。


c. find

find [路径] [参数]

参数说明比较复杂

[root @test /root ]# find [路径] [参数]
参数说明:
1. 时间:
-atime n :在 n*24 小时内被 access 即存取过的档案列出来!
-ctime n :在 n*24 小时内被 changed 即改变、新增的档案或目录印出
-mtime n :在 n*24 小时内被 modified 即修改过的档案印出
-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 还要新的档案
[root @test /root]# find /home -user test <==寻找 /home 底下拥有者为 test 的档案
[root @test /root]# find /dev -type b <==寻找 /dev 这个目录下,档案属性为 b 的档案


使用搜索建议

查看可执行文件的目录使用which命令;

查看不同的文件,应该先使用whereis和locate,如果找不到了才使用find查找。

因为,finde会根据定义的参数到指定的目录中去寻找文件,需要读硬盘。

而whereis和locate则不是需要读硬盘,而是查询数据库文件。

Linux系统会将系统内的所有文件都记录在一个数据库文件中,使用whereis或者locate的时候会以数据库文件的内容为准进行搜寻,不会到硬盘中搜寻文件。

Linux每天会对该数据库文件执行updatedb动作。

有时候会发现,使用whereis或者locate搜寻,会找到已经被删除的文件,这可能是因为updatedb动作还没有执行。


7SUID(SetUID), SGID(SetGID), Sticky bit, file

a. SUID, SGID

复习UID与GID,Linux中每个帐户都有对应的UID:GID

查看/etc/passwd文件可以查看系统中的所有帐号

more /etc/passwd

显示所有帐号的信息,其中第3、4字段的数字代表UID和GID,其中root的UID和GID都是0


hemin@hemin-desktop:~$ ls -l /usr/bin/passwd

-rwsr-xr-x 1 root root 29104 2007-05-18 17:59 /usr/bin/passwd

其中s取代了x的属性,这里的s就叫做SUID,如果代替group部分的x为s,则叫做SGID。

当一个文件具有SUID时,同时others群组具有可执行权限,那么others群组执行该程序的时候,others将拥有该文件的owner权限。

b. sticky bit

如果一个目录的others最后的x被t取代sticky bit属性,这个属性的最大用处在于:具有sticky bit属性的目录,其下的文件或者目录只有文件拥有者及root才有权删除。

举个例子/tmp目录下

所有人都可以擦写的权力,但是每个人只能删除自己建立的文件,除了root。

ls -l /

注意查看/tmp目录的属性

drwxrwxrwt 13 root root 4096 2007-11-26 13:12 tmp

最后一个x被t所代替


c. file

file [文件名]

file可以用来查看文件的类型,同时可以显示文件是否被加入SUID等信息




FAQ

1。

绝对路径,从/根目录开始;

相对路径,相对当前目录,可以使用

.

..

~

~user

2。更改一个目录的名称,即是重命名,可以使用文件移动命令mv

3。PATH环境变量的意义

可以在任何目录下使用一些指令,将这些指令所在的路径添加到PATH变量中,这样每当使用该命令的时候,会现根据PATH环境变量中的路径搜寻该指令,然后执行。

echo $PATH 显示当前环境变量的值

修改环境变量的值使用

如PATH=$PATH:/root

4。umask

umask的值为一个4为数字(第一位数字没用为0,后3个数字代表3组9个属性),它可以决定新建的文件或者目录的默认属性

为0777-umask的值。

通过umask加一个3位数字,重新定义umask的值,这样新建的文件或者目录的值就变成了0777-新的umask的值。

不过重新启动终端,umask重新恢复默认值,默认值为0022。

这样新建的文件或者目录的默认属性为0777-0022=0755即是-rwxr-xr-x

5。当一个用户设置的umask为033或者044则所新建的文件和目录的权限为

0777-0033=0744 即是-rwxr--r--

0777-0044=0733即是-rwx-wx-wx

6。什么是SUID

取代9位属性的第一组的第三个可执行x为s,代表的意思如下

文件具有SUID,如果others具有可执行权限,则当others群组执行该程序的时候,others将拥有该文件的owner权限。

7。查看/usr/bin/passwd文件的属性使用指令

lsattr /usr/bin/passwd

或者ls -l /usr/bin/passwd


你可能感兴趣的:(数据结构,linux,windows,css,Access)