Linux操作系统--文件系统命令

一,目录结构

/ 为根目录 无论设备、驱动、分区都分布在/ 目录下。FHS仅仅是常规传统,没有任何规定阻止你把你的文件放到任何目录。

其FHS的一般规定如下:

系统范围内:

/ 根目录。

/bin 二进制文件,一般对于系统的所有用户,都通用的可执行二进制文件和脚本。ls、cp、mv等都在/bin下边。

/boot 系统boot的时候,使用的决定性的文件

/dev 设备和一些特殊文件

/etc 其它。一般是对于系统服务和程序的,系统范围内的配置文件。例如Nginx软件的服务配置文件和虚拟主机文件。

/media 一个让你可以轻松的访问可移动媒体的挂接点。例如USB、CD-ROMs。

/mnt 临时挂载文件系统。对于管理员希望在一个临时情况下挂在文件系统,是很合适的。

/opt 可选择软件包。主要的应用程序和不是与操作系统默认安装一起的附加的包。实际上很少用。

/proc 内核和程序信息虚拟文件系统 提供对包含运行的进程的信息和统计的虚拟文件系统的访问。

/lib 系统范围的共享库和内核模块,是/bin和/sbin所需要的

/srv 系统中服务的数据信息的目录。很少使用

/tmp 临时文件。不需要在程序运行后保存的文件。许多操作系统在重启时清理该目录内容。

/var 那些期望被正在运行的程序或者服务所改变的文件,例如cache、spool、logfiles等。

它的结构为:

/var/lib 可变的与程序和操作系统相关的状态信息。例如MySQL数据库文件一般存储在/var/lib/mysql中

/var/lock 用于程序间同步资源的Lock文件。

/var/log 系统内核、服务、程序产生的log

/var/mail 用户email相关文件。一般是/var/spool/mail的符号链接

/var/run 运行时系统变量数据。系统重启的时候清除。系统开启后运行的状态信息。

/var/spool 一个希望被注入emails和print作业所处理的文件的目录。

/var/tmp 系统重启后,不能删除的临时文件。

用户范围:

1,所有用户范围

/usr 只读用户数据。其实是给用户提供了对于共享只读用户数据的第二层目录。/user一般包含如下文件目录:

/usr/bin 对所有用户的非必要的二进制和脚本程序,例如wget、gzip、firefox

/usr/include 来自c库函数的需要编译时包含的头文件

/usr/lib /usr/bin或者/usr/sbin程序需要使用的库

/usr/sbin 对所有用户的非必要的系统可执行文件和脚本,例如useradd等。

/usr/share 结构无关的数据文件

/usr/src 内核和安装程序的源代码

/usr/X11R6 X Window System (v11 release 6)相关文件

/usr/local 第三层的仅用于本地数据的目录层次

2,超级用户范围

/root 超级用户的用户目录

/sbin系统管理员尝试用的管理工具,只能由root用户使用。例如ifconfig、halt、service等。

3,普通用户范围

/home home目录。除了root用户目录在/root下,其他用户的用户目录都在/home/下。

三,特殊文件和设备

linux操作系统有对于设备文件的目录:/dev。实际上,这个文件目录下包含很多nodes,每个node代表系统上的一个不同设备。这些设备可以是真正的或者假的设备。另外,将他们作为文件系统的部分列出的原因是简化与程序和服务的输入和输出交互--软件开发人员可以如同读取或者写入文件一样访问设备。

/dev目录下有很多的设备类型,它们的名字很让人费解。设备文件根据Linux操作系统的习惯进行命名。由于有潜在的无限的设备数量,我们仅仅介绍最有用的一些。设备文件由一个根据驱动类型开始,如果有多于一个设备,则会跟着一个数字。

一般惯例为:

cdrom:CD和DVD-ROM设备

fd: 软盘(floppy硬盘驱动)

hd:IDE-连接 的设备,例如硬盘驱动和CD-ROMs

md:metadisks和RAID设备,例如硬盘驱动

ram:RAM硬盘

sd:SCSI-连接 的块存储设备

usb:USB连接的设备

假设备:

一些在/dev目录下的并不是真实的硬件设备的反映,而是提供给管理员和开发者对特殊资源的简单的输入和输出访问的目的放置到这里的。因此被称作“pseudo devices”。

例如:

/dev/null Null 设备 别名“黑洞”。目的是漠视所有发给它的数据。例如写入的时候,它总会报告写入成功,而读出时,设备不返回任何数据。这样,如果想格式化一个存储设备,则可以将/dev/null的输出输入到该存储设备。

这个在你不希望重定向程序输出到任何地方的时候,也就是,你希望程序运行,但是不显示文字到屏幕的时候很有用。

/dev/random 随机数生成器(设备)

/dev/urandom 生成随机数的流的设备。/dev/random产生真实随机数,而/dev/urandom提供假随机数(pseudorandom numbers)。由于他们是二进制数据,/dev/random和/dev/urandom中的数字不能显示到控制终端(看起来是乱码)。这些设备一般由开发人员用以收集可靠的随机数字。

/dev/full Full设备 这个假设备是一个返回错误的流。当写入的时候,它总是被认为是溢出了。从其中读取的时候,它返回一个无穷无尽的“null字符”组成的流。

/dev/full设备的目的是提供给程序员和管理员一个总是触发错误的操作。

/dev/zero Zero数据 像/dev/null,该设备总是在写入的时候,返回成功代码,但当读取的时候,则是一个无穷无尽的由null字符组成的流。

四,挂接存储设备

可以看到/dev 下的设备,有些是存储设备,例如硬盘驱动、solid-state驱动(SSD),软盘和CD-ROMS。然而,访问这些设备文件目录,需要将存储设备(或者说设备文件)进行挂接。

例如 cd /dev/md1 返回 is not a directory。

mount /dev/md1 /mnt/alexdrive 则将/dev/md1这个设备文件挂接到了/mnt/alexdrive中,可以如下访问:

cd /mnt/alexdrive

只有挂接后,才能像访问其他文件系统一样访问存储设备。

在一些现在Linux版本中,CD-ROMs和其他一般设备,都被系统自动的挂载了。

mount命令可用以查看当前每个挂载的设备。

如果你希望设备自动的在系统启动时挂载,或则简单的设置一个目录作为一个设备的默认挂接点,你需要编辑/etc/fstab文件。它是文本文件,可以使用nano、vim等编辑。/etc/fstab使用的语法参考 tuxfiles.org,不适当的使用可对系统造成破坏。

在你移除设备的时候,也应该首先unmount它。例如一个usb设备: umont /dev/usb1。参数可以是设备挂载点或者设备名,效果一样。

五,文件和节点

存储设备有独立的硬盘文件系统。EXT3是Linux系统最常用的存储设备文件格式。

Windows下的FAT32文件系统仅仅允许文件最大4G大小,而EXT32则允许16T(取决于块大小)。最大的一个设备上EXT3可用的存储空间是32T,所以你可以在数年里使用而不会遇到麻烦,除非存储驱动容量突然迅速上升。一个EXT3的有趣的特性是,其使用了使得它的存储设备上文件碎片最少并且不影响系统性能的布局方式。因此在你的驱动上进行碎片整理是不必要的。

六,文件名字

EXT3文件系统支持最大256字节名字。文件拓展名不需要,尽管有的时候它们存在来表明文件提供的内容。另外一点是,文件名字是大小写区分的。

七,Inodes

伴随硬盘文件系统,例如EXT3,每个文件的一系列的信息被存储了。这些信息是与文件本身在逻辑和物理上都分开的。这些数据被存储到一个特殊的称为inode(index node)的数据结构中。一些inode中存储的数据指示OS如何检索设备上的文件内容。不仅仅这样,inode还包含文件权限、用户组和用户拥有关系,文件大小、访问和修改时间等等。注意它不包含实际的文件名。

Inodes都有对设备独特的标识符。这被称作inode号,或者i-number,并可以在许多场合使用。ls -i命令可以获取到其值。

八,Atime、ctime和mtime

在一个inode中包含的元数据中,我们可以发现三种涉及文件的不同的时间戳,即atime、ctime和mtime。

atime Acess time。最后访问时间。程序或者服务使用系统调用访问文件的时候,atime都会被更新。

mtime 修改时间 文件中内容被修改的时候,修改时间被更新

ctime 最后被改变的时间。这个时间戳对于文件属性的改变也是关心的(也就是不仅仅是文件内容,也包括inode的内容)。

stat 命令可以查看所有时间戳。

对于SSD(Solid-State Drive)用户的重要信息:

频繁的访问和更新文件会由于需要更新时间戳导致性能下降。对于存储设备,这是很大的问题。你可以拒绝文件访问时间的更新。在/etc/fstab文件中有永久开启的选项。使用noatime ssd 在网上搜索更多信息吧。

九,符号和硬链接

符号链接类似Windows下的shortcuts。任何访问其实都是对其链接的目标进行的。但是cp、rm命令却影响的是链接。

使用ln -s命令来创建,第一个参数是文件名,第二个参数是链接名:

ln -s shoppinglist.txt link_to_list

与shortcuts不同的是,软连接可以使用相对路径。这个对于在一个文档中使用软连接和有用,因为整个文档可以被解压到任何路径。这样就不能用shortcuts类似的绝对路径的软链接。

shortcuts有包含附加的元数据的能力,允许用户选择一个icon、一个键盘快捷键等,符号链接仅仅是对目标的一个路径链接。

硬链接是实际文件数据的实际链接。在存储设备上,可以有多个到同一个数据的链接。当这些链接被删除,实际数据不受到影响。只有最后一个链接被删除,数据才从存储设备上删除。

ln 不带-s即是创建硬链接。例如 ln shoppinglist.txt hard_link_to_list

如果你决定删除shoppinglist.txt,则hard_link_to_list指向的数据依然可用。对于ls命令,该硬链接被视作另外一个文件。例如占用大小、文件多少都在创建一个硬链接后增大了。但是诸如 du(Disk Usage)则可以更深入的发掘,并报告实际的存储占用情况。

十,文件操作

由于使用的是终端,所以文字、图片、音频、视频等二进制数据格式都不能在其上显示,所以以文本文件为例。

读取:cat 、less

编辑:vim、nano、emacs nano是Nginx Http Server的作者推荐的。nano有语法高亮、关键字搜索和替换、键盘快捷键等功能。最大的好处是,其界面很直观。这对于长时间使用windows的用户,比较容易学习。可以使用的快捷键都在nano的下边显示出来,显示中^即contrl键。

其他的编辑,例如 >重定向,可以将原文件内容删除,替换成新的。>>则追加到文件尾部。

另外,touch命令可以用以更新access time和modification time,而无需要真实改变其内容。

压缩和解压

Linux世界中,一般ZIP和RAR格式不是最好的选择,因为他们不是开源免费的。其他格式,即Gzip和bzip2则是更好选择。当然,ZIP和RAR也是有支持的程序的,但是多数文件包都是 .tar.gz(也就是tgz)或者.tar.bz2(也就是tbz)。

.tar表明的是文件组织在一起的方式,而第二个则表明的是压缩的算法。Tar (Tape archive)是一个工具,用以将多个文件组织连接成一个文件,称为tarball。它也给你对tar包压缩的选项,有多种算法选择。

例如 tar czvf archive.tar.gz file1 是创建并使用gzip压缩算法

tar cjvf archive.tar.bz2 file1则是创建并使用bzip2压缩算法

tar xzvf archive.tar.gz 解压缩

tar xjvf archive.tar.bz2解压缩

其他的压缩格式有LZMA(.tar.lzma)和compress(.tar.z),但是它们是过时的,最好别去用它们。

unrar和unzip也是不错的工具。

unrar x file.rar

unzip file.zip

十一,文件权限

ls -l查看

第一列一般是文件权限:

drwxrwxrwx

-rw-rw-r--

第一个字符:

-:file d:directory,l:link,其他

第二个到第四个字符:

拥有者的权限

第四个到第七个:

组权限

第八个到第十个:

其他用户的权限

对于目录的权限,其具有特殊的属性:sticky bit和set group ID。第一个是目录下文件仅仅能够被root或其拥有者删除,第二个是,在目录下新建的文件,保存目录的group ID。

对于权限的意义,r表示是否可以list其中的文件;w表示是否可以在其中新建文件;x表示是否可以进入,例如cd。

八进制写法:

第一个八进制往往是0,是可选的,表明特殊属性。例如上述文件目录的sticky bit。

第二个是对于文件拥有者的属性权限,第三个是文件group的属性权限,第四个是所有用户的属性权限。其计算为,r=1,w=2,x=4,因此全权限值为1+2+4=7。

Linux操作系统--文件系统命令

改变:

chmod who +/- what filename

who可以是u(表示用户),g(组),o(其他用户),a(所有)的组合。

what可以是r、w、x的组合

chmod -R 则在整个目录下的文件上,递归进行改变。

改变文件所属和组:

chown user filename 只能由系统管理员进行。

chgrp group filename 管理员或者文件所有者可以进行

chown user:group filename 管理员,改变所有者和组。

-R选项可对目录下文件递归进行。

你可能感兴趣的:(数据结构,linux,算法,nginx,vim)