Linux命令--文件和目录管理

6.1 Linux文件系统的组织方式称作文件系统分层标准(Filesystem Hierarchy Standard,简称FHS),即采用层次式的树状目录结构,此结构的最上层是根目录“/”。Linux文件名最长允许256个字符,文件名没有扩展名的概念,对大小写敏感。


6.2 系统的默认安装目录
/
:Linux文件系统的最上层目录,其他所有目录均是该目录的子目录;
/bin:Binary的缩写,存放用户的可执行程序,如cp和mv等,也存放Shell,如bash和csh。不应把该目录放到一个单独的分区中,否则Linux Rescue模式无法使用这些命令;
/boot:操作系统启动时所需的文件,包括vmlinuz和initrd.img,这些文件若是损坏常会导致系统无法正常启动,因此最好不要做任意改动;
/dev:设备文件目录,如/dev/sda表示第一块SCSI设备,/dev/hda表示第一块IDE设备;
/etc:有关系统设置与管理的文件,包括密码、守护程序以及X-Window相关的配置。可以通过编辑器(如vi、gedit等)打开并编辑相关的配置文件;
/etc/X11:X-Window System的配置目录;
/home:普通用户的主目录或FTP站点目录,一般存放在/home目录下;
/lib:存放共享函数库(library);
/mnt:文件系统挂载点(Mount),例如光盘的挂载点可以是/mnt/cdrom,软盘的挂载点可以是/mnt/floppy,Zip驱动器为/mnt/zip;
/opt:该目录通常提供给第三方较大型的应用程序使用,如Sun Staroffice、Corel WordPerfect,这可避免将文件分散至整个文件系统;
/proc:保存目前系统内核与程序执行的相关信息,与利用ps命令看到的内容相同。例如/proc/interrupts文件保存了当前分配的中断请求端口号,/proc/cpuinfo保存了当前处理器信息;
/root:根用户的主目录;
/sbin:System Binary的缩写。此目录存放的是系统启动时所需执行的系统程序;
/tmp:temporary的缩写,用来存放临时文件的目录;
/usr:存放用户使用的系统命令和应用程序;
/usr/bin:存放用户可执行的程序,例如OpenOffice的可执行程序;
/usr/doc:存放各种文档的目录;
/usr/include:存放C语言用到的头文件;
/usr/include/X11:存放X-Window程序使用的头文件;
/usr/info:存放GNU文档的目录;
/usr/lib:函数库;
/usr/lib/X11:存放X-Window的函数库;
/usr/local:提供自动安装的应用程序位置;
/usr/man:存放在线手册的目录;
/usr/sbin:存放用户经常使用的程序;
/usr/src:保存程序的源文件的目录,一般系统内核源码存放在/usr/src/linux目录下;
/usr/X11R6/bin:存放X-Window的可执行程序;
/var:Variable的缩写,存放包括日志、邮件等经常变化的文件。由于/var目录的大小经常变动,为了防止失去控制而侵占其他目录所需要的空间,建议将/var安装到一个独立的分区上。


6.3 设备文件

Linux下使用的设备如本地磁盘、网络文件系统、CD-ROM、U盘等都被识别为设备文件。当对设备文件进行I/O操作时,该操作会转给相应的设备驱动程序。一个设备文件用主设备号(指出设备类型)和从设备号(指出是该类型的第几个设备)来表示,可以通过mknod命令进行创建。典型设备文件有:
/dev/hda:第一个IDE接口的Master硬盘;
/dev/hdb:第一个IDE接口的Slave硬盘;
/dev/hdc:第二个IDE接口的Master硬盘;
/dev/hdd:第二个IDE接口的Slave硬盘;
/dev/sda:第一个SCSI接口的Master硬盘;
/dev/sdb:第一个SCSI接口的Slave硬盘;
/dev/sdc:第二个SCSI接口的Master硬盘;
/dev/sdd:第二个SCSI接口的Slave硬盘;
/dev/cdrom:光驱;
/dev/fd0:第一个软盘。


6.4 文件系统的类型

Linux兼容性很高,除了能够挂载各种类型的设备,还可以挂载其他各种文件系统。文件/proc/filesystem列出了系统当前可用的文件系统类型,其中不仅包括Unix支持的各种文件系统类型,也包括Windows文件系统。Linux支持的文件系统类型包括:
adfs:acron磁盘文件系统,是在RiscOS操作系统中使用的标准文件系统;
befs:BeOS操作系统使用的文件系统;
cifs:通用Internet文件系统(Common Internet File System,简写为CIFS),用于访问符合SNIA CIFS标准的服务器。CIFS对SMB协议进行改进和标准化(SMB协议可用于在Linux和Windows之间共享文件),是一种虚拟文件系统;
ext:ext文件系统的第一个版本,现在已经很少使用;
ext2:专门为Linux系统设计的文件系统,具有速度快和CPU占用率低等选特点。既可以用于标准的块设备,也可以应用到移动存储介质上。ext2不包括日志功能;
ext3:与ext2相比包含了日志功能,维护了最近更改的源数据(和文件有关的信息,包括权限、所有者、创建时间、访问时间等)的记录,如果源数据由于非法关机等原因遭到破坏,文件系统将不能正常工作。通过ext3的日志系统,可以对源数据进行适当的恢复。此外,ext3的日志功能可使硬盘读写头的移动达到最佳化;
iso9660:从High Sierra(CD-ROM使用的最初标准)发展而来的文件系统,是CD-ROM的标准文件系统;
kafs:AFS客户端文件系统,用于分布式计算环境,可与Linux、Windows和Macintosh客户端共享文件;
minix:最初用于Unix的minix版本,只支持长度为30字符以下的文件名;
msdos:MS-DOS、Windows和OS/2使用该文件系统,不支持长文件名,主要用于挂载Micorsoft操作系统生成的软盘;
vfat:Microsoft扩展FAT(VFAT)文件系统,支持长文件名,可被Windows9x/2000/xp使用;
umsdos:扩展的MS-DOS文件系统,不仅支持长文件名,还保持了对UID/GID、POSIX权限和特殊文件(如管道、设备)的兼容;
proc:基于内存的伪文件系统,不占用外存空间,只是以文件的方式为访问Linux内核数据提供接口。由于proc文件系统是虚拟的,所以无需挂载。用户和应用程序可以通过/proc得到系统的运行信息,并可以改变内核的某些参数;
reiser:reiserfs日志文件系统;
swap:用于交换分区,是系统虚拟内存的一部分;
nfs:网络文件系统(Network FileSystem,简写为NFS)类型;
hpfs:用于只读挂载OS/2 HPFS文件系统;
ncpfs:Novell Netware文件系统,可以通过网络挂载;
affs:Amiga计算机使用的文件系统;
ufs:Sun Microsystems操作系统(即Solaris和SunOS);
xfs:一种在高性能环境中很有用的日志文件系统,支持完整的64位寻址;
fs:JFS主要适合于企业系统,是为大文件系统和高性能环境而设计的;
xiafs:与minux文件系统相比,这种文件系统支持长文件名和更大的i节点;
coherent:System V使用的文件系统类型;
smb:支持SMB协议的网络文件系统,可用于实现Linux与Windows系统的文件共享。


6.5 文件系统的组成

ext3文件系统将磁盘分为4个块:
块0为引导块,包含系统启动程序的磁盘区块;
块1为超级块,主要用来记录文件系统的配置方式,其中包括i节点数量、磁盘区块数量、未使用的磁盘区块以及i节点表、空闲块表在磁盘中存放的位置。由于超级块保存了非常重要的文件信息,所以系统保存了超级块的冗余。fsck等命令修复文件系统时,实际上就是对超级块进行恢复操作。
块2存放i节点(i-node,index-node)表,记录文件大小、用户UID、用户组GID、文件存取模式(包括读、写或执行)、链接数目、文件最后修改时间、磁盘区块地址、间接区块等。
块3为数据存储块,存放文件内容。

文件有两种不同的组织方式:
逻辑结构:面向用户的,用户可以看到的表示文件内容的字符流。
物理结构:文件在磁盘上的存储方式,涉及具体的存放磁盘区块。用户看到的文件内容是连续的,但实际上文件可能并不是连续的方式存放在磁盘上的。事实上,大于1块(block)的文件将被分散地存放在磁盘上。i节点表帮助实现这种物理结构到逻辑结构的转换。

i结点是一个64字节长的表,表中包含了文件的相关信息和磁盘地址表。磁盘地址表中有13个块号。前10个块号是文件前10块的存放地址,文件根据块号在磁盘地址表现中出现在的顺序依次读取相应的块。当文件长度大于10个块,将会用到后面的3块所给出的间接地址块。磁盘地址表中的第11块给出了扩展块的位置,这个块号指出的块中含有256个块号,加上前10块文件长度为266块(272384字节)。如果文件大于266块,再启用磁盘地址表的第12块所定义的扩展块。当文件大于266+256x256块时,再启用第13个扩展块,这时文件所占的块数为266+256x256+256x256x256。

文件系统采用一对一映射的方法来实现文件名到i节点的转换。目录实际上是一个含有目录表的文件,对于目录中的每个文件,在目录表中都会有一个入口项,入口项中含有文件名和与文件相应的i节点号。df -i查看系统中节点的大小与数量。ls -i可以查看文件的i-node编号。


6.6 文件的类型

命令ls -l可以查看文件的详细信息,其中在行首的字符串包含文件的类型与权限信息,如:-rw-r--r--,首字母表示的就是文件的类型。文件可以分为:
普通文件:文件类型标识位为-,如-rw-r--r--。包括源程序文件、脚本文件、可执行程序文件以及各种数据文件。
目录文件:文件类型标识位为d,如drwxrwxrwt。目录实际上是特殊的文件,可以包含文件和子目录。
套接字文件:文件类型标识位为s,如srwx-------。Linux文件系统可以通过套接字文件实现网络通信。
命名管道:文件类型标识位为p,如prwx------。文件系统通过命名管道文件可以实现进程间的通信。
设备文件:设备文件分两类:字符设备和块设备。字符设备文件类型标识位为c,包括打印机,键盘等。块设备文件类型标识位为b,包括磁盘磁带等。
链接文件:文件类型标识位为l,包括硬链接和软链接。


6.7 文件和目录的权限

文件和目录的权限共分为5类:

符号表示 八进制表示 含义
- 0 没有权限
r 4 读权限
w 2 写权限
x 1 执行权限
s、S、t、T   特殊权限

命令ls -l可以查看到权限信息,如-rwxrw-r--表示该文件为普通文件,文件所有者的权限为rwx,即可读可写可执行;同组用户的权限为rw-,即可读可写;其他用户权限为r--,即只读。

文件权限可以用八进制表示,如rwx权限可以表示为4+2+1=7;rw-权限可以表示为4+2+0=6;r--权限为4+0+0=4。所以权限rwxrw-r--也可以表示为764。

除读、写、执行权限外,文件系统还有类特殊权限,包括set-UID、set-GID和粘滞位(sticky)。set-UID对应值为4,表示如果该文件是可执行的,则运行该文件的用户将在程序运行期间拥有与该文件的所有者相同的权限;set-GID对应值为2,表示如果文件是可执行的,则运行该文件的用户会在运行期间拥有与该文件的用户组相同的权限;粘滞位(sticky-bit)对应值为1,表示该文件如果是可执行的,一旦被装载进内存就一直驻留在内存。

权限相关的命令有:

chmod:权限设置与修改。(可以用八进制模式,如chmod 764 ABC.exe,或者以字符模式,如chmod u+x ABC.exe表示给文件的文件所有者增加执行权限。其中u、g、o、a分别表示文件所有者、组用户、其他用户和全部用户。+、-、=分别表示增加、减少和指定权限。设置特殊权限只能用八进制模式,利用4位八进制数的第一位来设置,如chmod 4777表示特殊权限为set-UID,即4,后三位表示所有者、组和其他用户的权限。-R以递归方式更改所有的文件和子目录。-c只在有更改时才显示结果。-v显示全部信息。)

umask:设置文件或目录的默认权限。(通常新建文件的默认权限为0666,新建目录的默认权限为0777。掩码可以改变权限,如umask 0022,则新建文件的权限为0666-0022=0644,而新建目录的权限为0777-0022=0755。)

setfacl:设置访问控制列表ACL。基于用户和用户组的权限机制有些不足,无法为用户组中的个别用户设定不同的权限。为此,访问控制列表ACL被引入到系统中,它支持ext3文件系统、NTFS文件系统以及SMB文件系统。在使用acl前,需确保设备以ACL方式挂载:mount -o acl /dev/sda1 /mnt/mydisk。此后便可以用setfacl -m u:myuser:rw myfile的方式为个别用户指定权限。setfacl -x u:myuser myfile可以删除权限。setfacl -d g:rw myfile设定默认的权限。)


6.8 创建Linux文件系统

mkfs:创建文件系统。(为磁盘分区指定文件系统,如mkfs -t ext3 /dev/hda4。)

mkbootdisk:建立目前系统的启动盘。(如mkbootdisk --device /dev/fd0 2.4.2.20-8在软盘/dev/fd0上创建内核版本号为2.4.20-8的启动盘。)


6.9 修复受损的文件系统

fsck:检测文件系统并尝试修复错误。(在正被挂载的文件系统上使用fsck可能会造成文件系统的严重损坏。)

e2fsck:检查ex2文件系统。


6.10 mount与umount命令

mount:挂载。(mount显示已挂载的文件系统。mount /dev/fd0 /mnt/floppy挂载软盘。mount -t iso9660 /dev/cdrom /mnt/cdrom挂载光盘。mount -t vfat /dev/sdb /mnt/flash挂载U盘。

umount:卸载。(不能卸载根分区。)

eject:卸载并弹出光盘。


6.11 其它文件和目录管理常用命令

常用的通配符有:
*:代表文件中任意长度的任意字符。比如ls n*w可以匹配文件new。
?:代表文件中的任一个字符。比如ls n?w可以匹配new。
[…]:匹配任意一个中括号中的字符,中括号里可以是一个用破折号分割的字母或数字范围。比如ls n[1-9]w可以匹配n3w。
{…}:逐一匹配括号里的字符串。比如ls n{ew,ow}2 可以匹配new2与now2。

attr:XFS文件系统对象的扩展属性。(XFS文件系统是SGI开发的高级日志文件系统。)

basename:显示文件或目录的基本名称。如basename /home/tommy显示tommy。该文件或目录未必存在。

cd:改变目录。

cp:复制文件。(例:cp srcfile destfile。-b如果目标文件已存在,则以备份形式保存,在文件名后加上“~”;-r复制所有子目录与子文件;-f强制执行;--suffix=@指定目标文件名的后缀为@。)

chattr:改变文件的属性。(用法:chattr [-RVf] [-+=AacDdeijsSu] [-v version] files...。+添加属性,-删除属性,=设置属性。lsattr可以查看文件属性。各属性的意义:
A:不修改时间。
a:文件只能以追加模式写入,根用户拥有设置或清除该属性的权限。
c:自动进行压缩。
D:对目录的修改会直接同步写入磁盘,该属性等同于dirsync命令。
d:使用dump命令时,不对具有该属性的文件进行备份。
E:表明压缩存在错误。
I:目录被Hash树索引。
i:文件不可被修改、删除、重命名、建立链接或写操作。
j:在向文件执行写入操作时,先记录日志。
s:安全删除文件,文件块被清零并写回磁盘。
S:当文件被修改时,将修改写入磁盘,等同于sync命令。
T:具有该属性的目录将被移到目录树的最顶层。
t:文件在进行合并时,不会留有碎块。
u:当文件被意外删除时,可以恢复。
X:压缩文件可以被直接访问。
Z:压缩文件损坏。)

cksum:文件的CRC校验。

chown:改变所有者。(chown username file只改变文件的所有者,如果chown groupname:username file的方式,可以同时改变组和用户,冒号或点号都可以作为分隔符。如果是chown groupname: file的形式,则只改变用户组。)

chgrp:更换用户组。

dirname:显示文件的除名字外的路径。

fold:自动换行以适应指定列宽。(fold -w 5 file以每行至多5列的方式打印文件。)

find:查找目录或文件。(-name string:找文件名包含字符串的文件;-user username:找属于用户的文件;-group groupname:找属于用户组的文件;-type x:找类型为x的文件,其中b为块设备文件、c为字符设备文件、d为目录文件、p为命名管道文件、f为普通文件、l为符号链接文件、s为socket文件;-follow跟踪符号链接文件到所指向的文件。)

file:显示文件类型。(例:file *显示当前目录下所有文件的类型。)

filterdiff:从diff文件中提取或去除差异。

findfs:通过卷标或UUID查找文件系统。(例:findfs LABEL=/。)

locate:定位文件或目录。(从数据库/var/lib/slocate中查找文件,该数据库一般一天更新一次,所以最新新增或删除的文件可能会找不到。由于是从数据库而非硬盘中查找,所以比find快上许多。)

ls或dir:列目录。(-a显示以.开头的隐藏文件;-A显示包括. 和..的所有文件;-F显示文件类型的指示符号,.表示隐藏文件、/表示一个目录、*表示一个可执行文件、@表示符号链接文件、|表示管道文件、=表示 socket文件;-l使用长格式列出信息;-R列出所有子目录;-x逐行列出项目;-1每行只列一个文件。ll为ls -asF的别名。)

ln:链接文件或目录。(-s符号链接。)

lndir:建立到目录的符号链接。(例:lndir source dest把source文件夹下的所有文件生成在dest文件夹下相应的符号链接。)

lsattr:显示文件属性。(-a显示所有目录和文件;-R显示子目录的内容。)

mkfontdir:创建x字体文件目录。(对指定的目录搜寻所有的字体文件,并生成文件fonts.dir,供X服务器和字体服务器使用。)

msginit:初始化消息目录。(关于本地化,即翻译。创建PO文件。更多内容参考http://www.gnu.org/savannah-checkouts/gnu/gettext/manual/html_node/。)

msggen:创建英语消息目录。(输入文件名是最近创建的英文PO文件或PO模板文件,通常由xgettext创建。未翻译的记录会被填上和msgid一样的字符串,并标记为模糊。)

msgcomm:匹配消息。(在两个或多个指定PO文件中找出共同的信息。)

msgcat:合并消息。(连接和合并指定的PO文件。)

mkdir:创建目录。(-m设定权限,类似于chmod;-p需要时创建上层目录。)

mv:移动或更名现有的文件和目录。

mattrib:修改或显示MS-DOS文件的属性。(模拟MS- DOS的attrib命令,+/-打开或关闭属性,属性有a:归档位,被备份程序用来标识一个文件是不是新文件;r:只读位,标识只读文件;s:系统位:标识操作系统文件;h:隐藏位,使文件在目录中不可见。-/列出包含所有子目录的文件属性;-X简明方式,列出属性,不含任何空格。

mc:可视化文件管理程序。(可以用鼠标操作。)

mcopy:复制MS-DOS文件到UNIX或从UNIX复制MS-DOS文件。

md5sum:计算和检测MD5信息摘要。(MD5是一种哈希值。例:md5sum file。)

mdel:MS-DOS文件删除。

mdir:显示MS-DOS目录。

mktemp:建立暂存文件。(该文件可供Shell脚本安全地使用。)

mmove:移动MS-DOS文件。

mren:更改MS-DOS文件名称。

mshowfat:显示分配给文件的FAT簇信息。

mtools:显示mtools支持的命令。

mtoolstest:测试并显示mtools的相关设置。

paste:对文件进行纵向合并。(例:paste file1 file2分别把两个文件中的各行合并输出到标准输出上。-s以串行方式输出两个文件。-d指定合并行的分隔符。)

rcp:远端复制文件或目录。(例:rcp [email protected] /home/src/patch /home/src。)

rm:删除文件或目录。(-r递归删除;-f强制删除;-i删前确认;-d:删除可能仍有数据的目录。)

rmdir:删除空目录。(-p删除路径中所有的空目录。)

slocate:安全查找文件或目录。(从其自己建立的数据库中查找。与locate一样。)

split:切割文件。(cat合并文件,split切割文件。-l指定每个文件包含的行数,默认为1000。-b指定每个文件的字节数;-C指定每个文件的大小,可用b、k、m作为单位。)

stat:显示inode内容。(-f显示文件系统状态而不是文件状态。-L跟随链接。-t以简洁格式显示信息。)

scp:远程复制文件。(在网络中不同主机之间复制文件。例:scp -v [email protected]:/root/test [email protected]:/home/my/。-4强制使用IPv4协议;-6强制使用IPv6协议。-P指定端口号。)

sum:计算文件的校验码。

tmpwatch:删除临时文件。(例:tmpwatch 100 /tmp/删除/tmp目录下100小时内没有使用的文件。-u基于文件的访问时间删除文件,默认值;-m基于文件的修改时间删除文件;-c基于文件i节点的修改时间删除文件,默认值;-a删除所有文件,不仅是常规文件和目录;-d不删除目录;-f强制删除;-t不删除文件,仅测试;-s删除文件之前使用 fuser命令检测文件是否正在被使用。-v冗余模式,具有2能冗余,即连续两个-v选项。)

touch:更新文件或目录时间。(如果文件不存在,则创建。-a更改存取时间;-c不创建任何文件;-d使用指定时间而非当前时间;-F sec时间提前sec秒;-m只更新变动的时间;-r使用指定文件的时间属性而非目前的时间;-t stamp使用[[CC]YY]MMDDhhmm[.ss]格式的时间而非目前的时间。)

tree:以树状图显示目录内容。

which:查找文件。(查找范围由环境变量$PATH设置,如which ls。)

lsof:查看正在被程序使用的文件。(lsof | grep 文件系统的挂载点可以找出某设备正在被哪个程序使用。)

blkid:查询设备上采用的文件系统类型。(可以找出UUID和type,如blkid /dev/sda2。)

debugfs:恢复已删除的文件。(首先需卸载要恢复文件的分区,再用命令debugfs /dev/sda1进入交互模式,交互模式中ls可查看文件,可以看到“<文件信息节点编号>”的文件,使用dump <编号> file把删除的文件恢复到file里。)

你可能感兴趣的:(Linux)