文件系统:

 

  • 文件有两类数据:元数据和数据

元数据与数据存在相关的关系,但并不存放在一起。

查看详细的元数据:#stat /etc/issue

Access:文件访问时间

Modify:文件修改时间(文件内容数据更新的时间)

Change:文件改动时间(元数据变化的时间)

 

查看数据:#cat /etc/issue

 

 

  • 文件名规则:

 

1、包括路径在内文件名称最长4095个字节,用/分隔的路径不能超过255个字节。

  2、蓝色-->目录;绿色-->可执行文件;红色-->压缩文件;浅蓝色-->链接文件;灰色-->其他文件

  3、除了斜杠(/)NUL,所有字符都有效.但使用特殊字符的目录名和文件不推荐使用,有些字符需要     用引号来引用它们。

  4、标准Linux文件系统(如ext4),文件名称大小写敏感。例如:MAIL,Mail,mail, mAiL

 

eg:新建一个文件为“-mm

 

#nano

 

如下图新建:

删除这种特殊命名的文件,必须使用绝对路径方可删除,如下图:

 

三、文件系统结构:

/boot:引导文件存放目录,内核文件(vmlinuz)、引导加载器(bootloader, grub)都存放于此目录

 /bin:供所有用户使用的基本命令;不能关联至独立分区,OS启动即会用到的程序

 /sbin:管理类的基本命令;不能关联至独立分区,OS启动即会用到的程序

 /lib:启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules)

 /lib64:专用于x86_64系统上的辅助共享库文件存放位置

 /etc:配置文件目录

 /home/USERNAME:普通用户家目录

 /root:管理员的家目录

 /media:便携式移动设备挂载点

 /mnt:临时文件系统挂载点

 /dev:设备文件及特殊文件存储位置

b: block device,随机访问

c: character device,线性访问

 /opt:第三方应用程序的安装位置

 /srv:系统上运行的服务用到的数据

 /tmp:临时文件存储位置

 /usr:universal shared, read-only data

bin: 保证系统拥有完整功能而提供的应用程序

sbin:

lib32位使用

lib64:只存在64位系统

include: C程序的头文件(header files)

share:结构化独立的数据,例如doc, man

local:第三方应用程序的安装位置

bin, sbin, lib, lib64, etc, share

 /var:variable data files

cache: 应用程序缓存数据目录

lib: 应用程序状态信息数据

local:专用于为/usr/local下的应用程序存储可变数据;

lock: 锁文件

log: 日志目录及文件

opt: 专用于为/opt下的应用程序存储可变数据;

run: 运行中的进程相关数据;通常用于存储进程pid文件

spool: 应用程序数据池

tmp: 保存系统两次重启之间产生的临时数据

    /proc: 用于输出内核与进程信息相关的虚拟文件系统

    /sys:用于输出当前系统上硬件设备相关信息虚拟文件系统

   /selinux: security enhanced Linuxselinux相关的安全策略等信息的存储位置

 

 

四、应用程序的组成部分:

二进制程序:/bin,/sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin

 库文件:/lib, /lib64,/usr/lib, /usr/lib64, /usr/local/lib, /usr/local/lib64

 配置文件:/etc,/etc/DIRECTORY, /usr/local/etc

 帮助文件:/usr/share/man,/usr/share/doc, /usr/local/share/man, /usr/local/share/doc

 

五、CentOS7对比CentOS6的变化:

   /bin /usr/bin

   /sbin /usr/sbin

   /lib /usr/lib

   /lib64 /usr/lib64

六、文件类型:

  -:普通文件

  d: 目录文件

  b: 块设备

  c: 字符设备

  l: 符号链接文件

  p: 管道文件pipe

  s: 套接字文件socket

块设备和字符设备,如下图:

块设备都是随机访问的,会有缓存的;字符设备必须是顺序访问的,一般没有缓存的。

 

 

eg:

0设备读取内容输入到指定的文件中,命令:# dd if=/dev/zero of=f1 bs=1k count=2

查看二进制文件的命令#hexdumpfilename (如需显示全部的二进制内容,可添加-v选项即可)或者xxd filename

如下图:

修改文件二进制数据内容,命令:#hexeditfilename

Linux中将Windows的文本文件转换成纯文件,命令:#dos2unix filename

Linux文本转换成Windows的文本,命令:#unix2dos filename

 

七、显示当前工作目录:

每个shell和系统进程都有一个当前的工作目录;

查看路径的命令为:#pwd(显示当前shellCWD的绝对路径)

 

八、cd更改目录

1、到上一级目录:#cd..

2、回到自己的主目录:cd

3、回到以前的目录(即上一条命令操作的目录):cd –

相关的环境变量:

PWD:保存了当前目录路径

OLDPWD:上一次所在目录路径

显示软链接的真实路径:

切换到软链接的真实路径:

九、相对路径和绝对路径:

 绝对路径:以正斜杠开始;完整的文件的位置路径;可用于任何想指定一个文件名的时候

 

 相对路径名:不以斜线开始;指定相对于当前工作目录或某目录的位置;可以作为一个简短的形式  指定一个文件名

 当前目录相对路径:

  

  

 

十、罗列目录的内容:列出当前目录的内容或指定目录

使用格式:ls[options] [files_or_dirs]

使用选项:

ls -a包含隐藏文件

ls -l显示额外的信息

ls -R目录递归通过

ls -ld目录和符号链接信息

ls -1(数字1文件分行显示

ls -S 按从大到小排序

ls -u 配合-t选项,显示并按atime从新到旧排序

ls -U 不排序按目录存放顺序显示

 

将文件以大小的数值显示出来,以便我们阅读获取信息,如下图:

显示目录本身:# ls -ld /etc/

目录递归显示:# ls -R

文件分行显示:

显示文件从大到小的显示:ll -S

显示文件从小到大的显示:ll -Sr

按照字母倒叙排序(列排序):ls -r

不排序按目录存放顺序显示

显示并按atime从新到旧排序# ls-utl

 

十一、文件状态(stat):

    三个时间戳:

access time:访问时间,atime,读取文件内容

modify time: 修改时间, mtime,改变文件内容(数据)

change time: 改变时间, ctime,元数据发生改变(更改文件名、属主或者属组、增加文件大小等可            以改变元数据)

查看文件状态时间命令:#ll--time=atime/mtime/ctime filename

mtime查看:

atimectime查看:

锁死和解锁:chattr +A  filename chattr –A filename,以达到让访问文件后,atime不发生           改变。

 

十二、文件通配符:

  * 匹配零个或多个字符

  ? 匹配任何单个字符

  ~ 当前用户家目录

  ~username:用户家目录

  ~+ 当前工作目录

  ~- 前一个工作目录

  [0-9]匹配一个数字范围

  [a-z]:大写和小写字母

  [A-Z]:大写字母

  [wxc]  匹配列表中的任何的一个字符

  [^wxc]匹配列表中的所有字符以外的字符

 

预定义的字符类:#man7 globman帮助查看)

[:digit:]:任意数字,相当于0-9

[:lower:]:任意小写字母

[:upper:]: 任意大写字母

[:alpha:]: 任意大小写字母

[:alnum:]:任意数字或字母

[:space:]:空格

[:punct:]:标点符号

十三、空文件的创建于刷新时间:      

     touch命令:

用法格式:touch[OPTION]... FILE...

用法选项:-a: 仅改变atime

-m: 仅改变mtime

-tSTAMP:[[CC]YY]MMDDhhmm[.ss]

-c: 如果文件不存在,则不予创建

-d:#touch –d yesterday filename

     

十四、CP:复制文件或目录:

     用法格式: cp[OPTION]...[-T] SOURCE DEST

             cp[OPTION]... SOURCE... DIRECTORY

             cp[OPTION]... -t DIRECTORY SOURCE...

   1、复制的源是文件,目标也是文件:

如果目标文件不存在:新建目标文件,并将源文件中内容填充至新建的目标文件中

如果目标存在:是文件,将源文件中的内容覆盖至目标文件中(基于安全,建议为cp命令使用-i选              项)

如果目标是目录:在目标目录下新建与原文件同名的文件,并将源文件中内容填充至新文件中

 

 2、复制的源是多个文件,目标必须存在,且为目录,其它情形均会出错;

复制的源是目录:此时使用选项:-r

A、如果目标不存在:则创建指定目录,复制源目录中所有文件至新建的目标目录中;

B、如果目标存在:则直接将源目录下的文件复制过去填充到目标目录下;

C、如果目标是文件:直接报错;

3、如果复制的源是多个目录:(如果复制的源目录是一个,而目标目录不存在,则将源目录复制      过去并以目标目录的名称重命名)

如果目标目录不存在,则直接报错;

如果目标目录存在,则将源的多个目录复制到目标目录下作为子目录

   复制源文件(一个或者多个),到目标文件(或目录下)的情形,如下图:

   

     

   CP选项使用:

     -i:交互式

     -r, -R: 递归复制目录及内部的所有内容;

     -a: 归档,相当于-dR--preserv=all

     -d--no-dereference --preserv=links 不复制原文件,只复制链接名

       --preserv[=ATTR_LIST]mode: 权限;ownership:属主属组;timestamp: linksxattrcontextall

     -p: 等同--preserv=mode,ownership,timestamp

     -v: --verbose

     -f: --force(相当于将目标文件删除后,重新建一个与目标文件名称一样的文件)

     

十五、命令别名(alias):

显示当前shell进程所有可用的命令别名:#alias

定义别名NAME,其相当于执行命令VALUE#alias name=””

   # alias vinet="vi /etc/sysconfig/network-scripts/ifcfg-eno16777736"

   

  取消别名:unalias name:

#unalias vinet

  在命令行中定义的别名,仅对当前shell进程有效

  如果想永久有效,要定义在配置文件中:

     仅对当前用户:~/.bashrc

     对所有用户有效:/etc/bashrc

编辑配置给出的新配置不会立即生效,bash进程重新读取配置文件,执行如下命令:

#source /path/to/config_file       #. /path/to/config_file

如果别名同原命令同名,如果要执行原命令,可使用“\COMMAND”  ’COMMAND’

/PATH/COMMAND:外部命令

 

十六、移动和重命名文件(mv):

  用法格式: mv[OPTION]... [-T] SOURCE DEST

          mv [OPTION]... SOURCE...DIRECTORY

          mv [OPTION]... -t DIRECTORYSOURCE...

常用选项:-i: 交互式

 -f: 强制

Root用户和普通用户使用mv不同:root使用mv会提示是否覆盖;而普通用户则强行直接覆盖(操作需谨慎)。

 

十七、删除(rm):

   用法格式:rm[OPTION]... FILE...

常用选项:-i: 交互式

-f: 强制删除

-r: 递归

--no-preserve-root

  强行删除一个目录(不是空目录),命令使用:#rm –rf /path/file #\rm –r /path/file

 

** 删除一个比较的大的文件,如果该文件有用户在使用,使用rm –f /filename删除,磁盘空间不会马上释放出来;使用命令# > /path/filename 直接将文件删除掉,并把该文件的空间直接从磁盘上释放出来**

 

  例:rm –f /  (该命令操作需要谨慎,但在从CentOS6CentOS7版本开始,该命令不能够直接执     行使用)

如果确实需要删除 / :则需要添加--no-preserve-root选项,命令:#rm –rf--no-preserve-       root /

 

十八、目录的操作:

   命令tree :显示目录树

   

  格式选项:-d : 只显示目录

 -L level:指定显示的层级数目

 -P pattern: 只显示由指定pattern匹配到的路径

 

 命令mkdir:创建目录

        -p: 存在于不报错,且可自动创建所需的各目录;

   -v: 显示详细信息

   -m MODE: 创建目录时直接指定权限;

 

 命令rmdir:删除空目录

   -p: 递归删除父空目录

   -v: 显示详细信息

        rm -r递归删除目录树

 

十九、练习:

1、  显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录

   ls /var/l*[[:digit:]][[:lower:]]

2、显示/etc目录下以任意一位数字开头,且以非数字结尾的文件或目录

   ls/etc/[[:digit:]*][^[[:digit:]]]

3、显示/etc/目录下以非字母开头,后面跟了一个字母及其它任意长度任意字符的文件或目录

   ls/etc[^[:alpha:]][[:alpha:]]*

4、显示/etc目录下所有以m开头以非数字结尾的文件或目录

   ls/etc/m*[^[:digit:]]

5、显示/etc目录下,所有以.d结尾的文件或目录

   ls-d /etc/*.d

6、显示/etc目录下,所有.conf结尾,且以m,n,r,p开头的文件或目录

   ls /etc/[mnrp]*.conf

7、使用别名命令,每日将/etc/目录下所有文件,备份到/testdir/下独立的新目录下,并要求新目录格式为backupYYYY-mm-dd,备份过程可见

   alias cpb=”cp –rpv /eetc/ /testdir/ backup`date+%`”

8、先创建/testdir/rootdir目录,再复制/root所有下文件到该目录内,并要求保留原有权限

   cp –rp /root/ /testdir/rootdir

9 如何创建/testdir/dir1/x,/testdir/dir1/y, /testdir/dir1/x/a, /testdir/dir1/x/b,      /testdir/dir1/y/a,/testdir/dir1/y/b

   mkdir–pv /testdir/dir1/{x/{a,b},y/{a,b}}

10如何创建/testdir/dir2/x,/testdir/dir2/y,/testdir/dir2/x/a,/testdir/dir2/x/b

   mkdir -pv/testdir/dir2/{x/{a,b},y}

11如何创建/testdir/dir3, /testdir/dir4, /testdir/dir5,/testdir/dir5/dir3,

  /testdir/dir5/dir4

    mkdir –pv /testdir/dir{3,4,5/dir{3,4}}

二十、作业:

1、  只显示指定目录隐藏文件

ls –d /etc/.*

2、  只显示指定目录下的子目录(不看文件)

ls -d /etc/*/