文件管理

作者: 不知岁月惜 | 来源:发表于2017-08-06 16:25 被阅读0次

    文件系统结构

    Linux中,所有的文件与目录都由根目录/ 开始。那是所有目录与文件的源头。然后再一个一个分支下来,有点像树状。因此,我们也称这种目录配置方式为:“目录树(directory tree)”。这个目录树主要特性有:
    根目录是整个系统最重要的一个目录,因为所有的目录都是由它衍生出来,而且根目录也与开机,还原,系统修复等操作有关。
    由于系统开机需要特定的开机软件、内核文件、开机所需要的程序、函数库等文件数据,若系统出现异常时,根目录也要有能够修复文件系统的程序。由此可见根目录的重要性,所以FHS建议,根目录不要放在非常大的分区内,因为越大防止的文件越多,出错的几率也越大,性能也越不好,所以,根目录应该越小越好,且应用程序所安装的软件最好不要与根目录放在一个分区内。
    由此我们来说说下面的文件都是什么,又怎么放置才好。


    /bin

    /bin 基础系统所需要的那些命令位于此目录,也是最小系统所需要的命令;比如 ls、cp、mkdir等命令;功能和/usr/bin类似,这个目录中的文件都是可执行的,普通用户都可以使用的命令。做为基础系统所需要的最基础的命令就是放在这里。

    /boot

    /boot Linux的内核及引导系统程序所需要的文件。

    /dev

    /dev 设备文件存储目录,比如声卡、磁盘... ...

    /etc

    /etc 系统配置文件的所在地,一些服务器的配置文件也在这里;比如用户帐号及密码配置文件;

    /home

    /home 普通用户家目录默认存放目录;

    /lib

    /lib 库文件存放目录

    /lost+found

    /lost+found 在ext2或ext3文件系统中,当系统意外崩溃或机器意外关机,而产生一些文件碎片放在这里。当系统启动的过程中fsck工具会检查这里,并修复已经损坏的文件系统。 有时系统发生问题,有很多的文件被移到这个目录中,可能会用手工的方式来修复,或移到文件到原来的位置上。

    /media

    /media 即插即用型存储设备的挂载点自动在这个目录下创建,比如USB盘系统自动挂载后,会在这个目录下产生一个目录 ;CDROM/DVD自动挂载后,也会在这个目录中创建一个目录,类似cdrom 的目录。这个只有在最新的发行套件上才有,比如Fedora Core 4.0 5.0 等。可以参看/etc/fstab的定义;

    /mnt

    /mnt 这个目录一般是用于存放挂载储存设备的挂载目录的,比如有cdrom 等目录。可以参看/etc/fstab的定义。有时我们可以把让系统开机自动挂载文件系统,把挂载点放在这里也是可以的。主要看/etc/fstab中怎么定义了;比如光驱可以挂载到/mnt/cdrom 。

    /opt

    /opt 表示的是可选择的意思,有些软件包也会被安装在这里,也就是自定义软件包,比如在Fedora Core 5.0中,OpenOffice就是安装在这里。有些我们自己编译的软件包,就可以安装在这个目录中;通过源码包安装的软件,可以通过 ./configure --prefix=/opt/目录 。

    /proc

    /proc 操作系统运行时,进程(正在运行中的程序)信息及内核信息(比如cpu、硬盘分区、内存信息等)存放在这里。/proc目录伪装的文件系统proc的挂载目录,proc并不是真正的文件系统,它的定义可以参见 /etc/fstab 。

    /root

    /root Linux超级权限用户root的家目录;

    /sbin

    /sbin 大多是涉及系统管理的命令的存放,是超级权限用户root的可执行命令存放地,普通用户无权限执行这个目录下的命令,这个目录和/usr/sbin;/usr/X11R6/sbin或/usr/local/sbin目录是相似的; 我们记住就行了,凡是目录sbin中包含的都是root权限才能执行的。

    /tmp

    /tmp 临时文件目录,有时用户运行程序的时候,会产生临时文件。/tmp就用来存放临时文件的。/var/tmp目录和这个目录相似。

    /usr

    /usr 这个是系统存放程序的目录,比如命令、帮助文件等。这个目录下有很多的文件和目录。当我们安装一个Linux发行版官方提供的软件包时,大多安装在这里。如果有涉及服务器配置文件的,会把配置文件安装在/etc目录中。/usr目录下包括涉及字体目录/usr/share/fonts ,帮助目录 /usr/share/man或/usr/share/doc,普通用户可执行文件目录/usr/bin 或/usr/local/bin 或/usr/X11R6/bin ,超级权限用户root的可执行命令存放目录,比如 /usr/sbin 或/usr/X11R6/sbin 或/usr/local/sbin 等;还有程序的头文件存放目录/usr/include。

    /var

    /var 这个目录的内容是经常变动的,看名字就知道,我们可以理解为vary的缩写,/var下有/var/log 这是用来存放系统日志的目录。/var/www目录是定义Apache服务器站点存放目录;/var/lib 用来存放一些库文件,比如MySQL的,以及MySQL数据库的的存放地;

    /usr/bin

    /usr/bin 这个目录是可执行程序的目录,普通用户就有权限执行; 当我们从系统自带的软件包安装一个程序时,他的可执行文件大多会放在这个目录。比如安装gaim软件包时。相似的目录是/usr/local/bin; 有时/usr/bin中的文件是/usr/local/bin的链接文件;

    /usr/sbin

    /usr/sbin 这个目录也是可执行程序的目录,但大多存放涉及系统管理的命令。只有root权限才能执行;相似目录是/sbin 或/usr/local/sbin或/usr/X11R6/sbin等;

    /usr/local

    /usr/local 这个目录一般是用来存放用户自编译安装软件的存放目录;一般是通过源码包安装的软件,如果没有特别指定安装目录的话,一般是安装在这个目录中。这个目录下面有子目录。自己看看吧。

    /usr/lib

    /usr/lib 和/lib 目录相似,是库文件的存储目录;

    /usr/share

    /usr/share 系统共用的东西存放地,比如 /usr/share/fonts 是字体目录,是用户都共用的吧。

    /usr/share/doc

    /usr/share/doc和/usr/share/man帮助文件,也是共用的吧;

    usr/src

    usr/src 是内核源码存放的目录,比如下面有内核源码目录,比如 linux 、linux-2.xxx.xx 目录等。有的系统也会把源码软件包安装在这里。比如Fedora/Redhat,当我们安装file.src.rpm的时候,这些软件包会安装在/usr/src/redhat相应的目录中。另外Fedhat 4.0 5.0,他的内核源码包的目录位于/usr/src/kernels目录下的某个目录中(只有安装后才会生成相应目录);

    /var/adm

    /var/adm 比如软件包安装信息、日志、管理信息等,在Slackware操作系统中是有这个目录的。在Fedora中好象没有;自己看看吧。

    /var/log

    /var/log 系统日志存放,分析日志要看这个目录的东西;

    /var/spool

    /var/spool 打印机、邮件、代理服务器等假脱机目录;

    Linux文件类型

    Linux文件类型和Linux文件的文件名所代表的意义是两个不同的概念。我们通过一般应用程序而创建的比如file.txt、file.tar.gz ,这些文件虽然要用不同的程序来打开,但放在Linux文件类型中衡量的话,大多是常规文件(也被称为普通文件)。
    Linux文件类型常见的有:普通文件、目录、字符设备文件、块设备文件、符号链接文件等;现在我们进行一个简要的说明;
    linux下ll命令列出的文件类型:

    Linux下可以用ls –l 命令来判断文件类型,可以根据ll命令列出的前十个字母判断第一列中的10个字符来判断。
    -rw-r—r—   "-"开头的都是普通文件;
    [root@centos7 /app]#ll a
    -rw-r--r--. 1 root root 0 Aug  6 11:07 a
    drw-r—r—   "d"开头的是目录文件;
    drwxr-xr-x.   2 root root        6 Aug  6 11:08 2
    brw-r—r—   "b"开头的文件都是块设备文件;
    [root@centos7 ~]#ll /dev/sda
    brw-rw----. 1 root disk 8, 0 Aug  5 09:57 /dev/sda
    crw-r—r—   "c"开头的文件都是字符设备文件;
    [root@centos7 ~]#ll /dev/zero
    crw-rw-rw-. 1 root root 1, 5 Aug  5 09:57 /dev/zero
    srw-r—r—   "s"开头的文件都是socket文件;
    [root@centos7 ~]#ll /dev/log
    srw-rw-rw-. 1 root root 0 Aug  5 09:57 /dev/log
    prw-r—r—   "p"开头的文件都是管道文件;
    [root@centos7 /app]#ll /run/dmeventd-client
    prw-------. 1 root root 0 Aug  5 09:57 /run/dmeventd-client
    lrw-r—r—   "l"开头的文件都是软链接文件;
    [root@centos7 ~]#ls /bin -dl
    lrwxrwxrwx. 1 root root 7 Jul 15 09:42 /bin -> usr/bin
    
    显示当前工作目录
    当前路径
    [root@centos7 /app]#pwd
    /app
    
    绝对路径   在app目录下进入dir2
    [root@centos7 /app]#cd /app/dir1/dir2
    [root@centos7 /app/dir1/dir2]#
    
    
    相对路径  返回app目录下    
    [root@centos7 /app]#cd /app/dir1/dir2
    [root@centos7 /app/dir1/dir2]#cd ../../
    [root@centos7 /app]#
    
    

    基名:basename
    目录名:dirname

    dir2是基名,cd /app/dir1/是目录名
    [root@centos7 /app]#cd /app/dir1/dir2
    
    列出目录内容

    列出当前目录的内容或指定目录
    用法: ls [options] [files_or_dirs]
    示例:
    ls -a 包含隐藏文件 前面带 "." 都是隐藏文件

    [root@centos7 ~]#ls -a
    .                .bash_profile.swn  Desktop               .local          .tcshrc
    ..               .bash_profile.swo  Documents             Music           Templates
    

    ls -l 显示额外的信息

    ls -R 目录递归通过 显示目录下所有文件
    [root@centos7 ~]#ls -R /app/dir1
    /app/dir1:
    dir2
    /app/dir1/dir2:
    12345
    

    ls -ld 目录和符号链接信息
    ls -1 文件分行显示
    ls –S 按从大到小排序
    ls –t 按mtime排序
    ls –u 配合-t选项,显示并按atime从新到旧排序
    ls –U 按目录存放顺序显示
    ls –X 按文件后缀排序

    文件通配符

    • 匹配零个或多个字符
    [root@centos7 /app]#cat 22.txt
    nihao
    [root@centos7 /app]#cat *2.txt
    nihao
    

    ? 匹配任何单个字符
    ~ 当前用户家目录
    ~mage 用户mage家目录
    ~+ 当前工作目录
    ~- 前一个工作目录

    [0-9] 匹配数字范围
    [root@centos7 /app]#ls
    2             bin      erdong.sh  f3            nihaoliu.sh  somefile2.tar      z1
    a1            |cut     f1         hello.sh      Rescue.asd   somefile3.tar.xz2
    bianliang.sh  dir1     f2         liuerdong.sh  scp70.sh     tmp
    [root@centos7 /app]#ls f[0-9]
    f1  f2  f3
    

    [a-z]:字母
    [A-Z]:字母
    [wang] 匹配列表中的任何的一个字符

    [^wang] 匹配列表中的所有字符以外的字符
    [root@centos7 /app/2]#ls
    fa.txt  fb.txt  fc.txt  fd.txt  fe.txt  ff.txt  fg.txt
    fA.txt  fB.txt  fC.txt  fD.txt  fE.txt  fF.txt  fG.txt
    [root@centos7 /app/2]#ls f[^A].txt
    fa.txt  fB.txt  fC.txt  fD.txt  fE.txt  fF.txt  fG.txt
    fb.txt  fc.txt  fd.txt  fe.txt  ff.txt  fg.txt
    

    文件通配符

    预定义的字符类: #man 7 glob
    [:digit:]:任意数字,相当于0-9
    [:lower:]:任意小写字母

    [:upper:]: 任意大写字母
    [root@centos7 /app/2]#ls f[[:upper:]].txt
    fA.txt  fB.txt  fC.txt  fD.txt  fE.txt  fF.txt  fG.txt
    

    [:alnum:]:任意数字或字母
    [:blank:]:水平空白字符
    [:space:]:水平或垂直空白字符
    [:punct:]:标点符号
    [:print:]:可打印字符
    [:cntrl:]:控制(非打印)字符
    [:graph:]:图形字符
    [:xdigit:]:十六进制字符

    创建空文件和刷新时间

    touch命令:

    touch [OPTION]... FILE...

    -a 仅改变 atime和ctime
    [root@centos7 /app/dir1]#touch f1                 创建f1文件
    [root@centos7 /app/dir1]#ll
    total 0
    drwxr-xr-x. 2 root root 36 Aug  6 11:48 dir2
    -rw-r--r--. 1 root root  0 Aug  6 14:50 f1         原始时间
    [root@centos7 /app/dir1]#touch -a f1            -a  修改时间
    [root@centos7 /app/dir1]#ll
    total 0
    drwxr-xr-x. 2 root root 36 Aug  6 11:48 dir2
    -rw-r--r--. 1 root root  0 Aug  6 14:50 f1
    [root@centos7 /app/dir1]#stat f1
      File: ‘f1’
      Size: 0           Blocks: 0          IO Block: 4096   regular empty file
    Device: 803h/2051d  Inode: 100678878   Links: 1
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Context: unconfined_u:object_r:default_t:s0
    Access: 2017-08-06 14:51:18.781898364 +0800     a时间改变
    Modify: 2017-08-06 14:50:37.535899292 +0800
    Change: 2017-08-06 14:51:18.781898364 +0800    c 时间改变
     Birth: -
    
    -m 仅改变 mtime和ctime

    -t [[CC]YY]MMDDhhmm[.ss]

    [root@centos7 /app/dir1]#touch -t 202012011830.30 f1
    [root@centos7 /app/dir1]#stat f1
      File: ‘f1’
      Size: 0           Blocks: 0          IO Block: 4096   regular empty file
    Device: 803h/2051d  Inode: 100678878   Links: 1
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Context: unconfined_u:object_r:default_t:s0
    Access: 2020-12-01 18:30:30.000000000 +0800             a时间改变
    Modify: 2020-12-01 18:30:30.000000000 +0800             m时间改变
    Change: 2017-08-06 15:00:49.629885517 +0800
     Birth: -
    

    指定atime和mtime的时间戳
    -c 如果文件不存在,则不予创建

    cp常用选项

    -i:覆盖前提示 –n:不覆盖,注意两者顺序
    [root@centos7 /app/dir1]#ll                                              root管理员 cp=cp- i 
    total 0
    drwxr-xr-x. 2 root root 36 Aug  6 11:48 dir2 -i
    -rw-r--r--. 1 root root  0 Dec  1  2020 f1                                源文件f1
    [root@centos7 /app/dir1]#cp /app/f2 /app/dir1/f1
    cp: overwrite ‘/app/dir1/f1’? y                                           普通用户不提醒覆盖
    [root@centos7 /app/dir1]#ll
    total 4
    drwxr-xr-x. 2 root root   36 Aug  6 11:48 dir2
    -rw-r--r--. 1 root root 2586 Aug  6 15:13 f1                             文件大小发生改变
    
    -r, -R: 递归复制目录及内部的所有内容

    将etc内容全部复制并改名成zzz

    [root@centos7 /app/dir1]#cp -r /etc /app/dir1/zzz                  
    [root@centos7 /app/dir1]#rm -rf dev
    [root@centos7 /app/dir1]#ll
    total 16
    drwxr-xr-x.   2 root root   36 Aug  6 11:48 dir2
    -rw-r--r--.   1 root root 2586 Aug  6 15:13 f1
    drwxr-xr-x. 136 root root 8192 Aug  6 15:38 zzz
    

    -a: 归档,相当于-dR --preserv=all
    -d: --no-dereference --preserv=links 不复制原文件,只复制链接名
    --preserv[=ATTR_LIST]
    mode: 权限
    ownership: 属主属组
    timestamp:
    links
    xattr
    context
    all
    -p: 等同--preserv=mode,ownership,timestamp -v: --verbose

    -f: --force

    zzz文件中已经有issue, 是否覆盖 -f 效果跟i相反

    root@centos7 /app/dir1/zzz]#cp /etc/issue /app/dir1/zzz -f
    cp: overwrite ‘/app/dir1/zzz/issue’? y
    [root@centos7 /app/dir1/zzz]#ll
    drwxr-xr-x.   2 root root     52 Aug  6 15:38 iscsi
    -rw-r--r--.   1 root root     23 Aug  6 15:51 issue
    -rw-r--r--.   1 root root     22 Aug  6 15:38 issue.net
    

    rm命令

    选项 -r 递归,删除目录 ;-f 不提示,直接删除;-i 提示
    rm命令删除一个大文件技巧
    rm删除一个大文件时,如果文件正在使用,即使删除了这个大文件,磁盘空间也无法释放,为了让磁盘空间尽快释放,可以先用> 清空这个文件,再用rm删除这个文件,就可以马上释放磁盘空间。

    如何安全的删除一个文件,可以使用如下命令
    [root@centos6 app]#shred -zuvn5 f3  #shred相当于碎纸机,z清理;v过程可见;n5重复五次;u最后把文件删除
    shred: f3: pass 1/6 (random)...
    shred: f3: pass 2/6 (ffffff)...
    shred: f3: pass 3/6 (random)...
    shred: f3: pass 4/6 (000000)...
    shred: f3: pass 5/6 (random)...
    shred: f3: pass 6/6 (000000)...
    shred: f3: removing
    shred: f3: renamed to 00
    shred: 00: renamed to 0
    shred: f3: removed
    
    rm删除点打头的文件
    [root@centos6 app]#touch .a
    [root@centos6 app]#ls -a
    .  ..  .a  f1  f1.txt.bak  f2  f2.txt.bak  f3.txt.bak  sda1  xxx  zero
    [root@centos6 app]#rm -f *   #不能删除点打头的文件
    [root@centos6 app]#ls -a
    .  ..  .a  #点打头的文件还在
    [root@centos6 app]#rm -f .*  #执行这条命令才能删除点打头的文件
    [root@centos6 app]#ls -a
    
    rm删除目录
    [root@centos6 app]#mkdir f1
    [root@centos6 app]#ls
    f1
    [root@centos6 app]#rm -rf /app #提示要把目录也删除,但/app是个分区挂载点,
    无法删除,只把目录里的内容删除
    rm: cannot remove `/app': Device or resource busy
    [root@centos6 app]#ls
    [root@centos6 app]#mkdir f1
    [root@centos6 app]#ls
    f1
    [root@centos6 app]#rm -rf /app/* #不提示删除/app
    [root@centos6 app]#ls
    总结:分区挂载点无法删除,要想删除一个目录下的文件而不删除目录
    的写法为rm -rf /D/* ,如果rm-rf /D 则会连目录也删除。
    
    

    软连接和硬链接、inode

    ln 创建硬链接 ln-s 创建软连接
    软连接和硬链接的区别

    本质:硬链接本质上是同一个文件,只是一个文件具有两个名字,彼此之间是平等的关系,节点号相同;
    软连接本质上不是同一个文件,节点号不同,相当于windows里面的快捷方式。
    区别:

    硬链接不允许对目录创建,软连接可以,如果要想使目录的链接数增加,可以在当前目录内创建多个子目录来实现;
    硬链接不允许跨分区,软链接可以;
    创建硬链接后连接数加1,软链接链接数不增长;
    删除硬链接后互相不影响,删除软连接源文件后,软连接就失效了;
    硬链接文件的大小和属性完全相同,软链接大小、属性和源文件不同,软链接的大小由源文件的名的字符多少决定;
    软链接的相对路径不是相对于当前工作目录,而是相对于软连接的当前工作目录,硬链接相对于当前工作目录和相对于硬链接的工作目录都可以。

    [root@centos6 app]#ln -s f1 f2 #创建f1文件的软连接
    [root@centos6 app]#ll
    total 0
    -rw-r--r--. 1 root root 0 Jul 19 22:06 f1
    lrwxrwxrwx. 1 root root 2 Jul 19 22:06 f2 -> f1   #f2大小为f1的字符数
    

    相关文章

      网友评论

        本文标题:文件管理

        本文链接:https://www.haomeiwen.com/subject/tvfulxtx.html