• 十、文件管理、属性、查找和软硬链接


    一、文件和目录的创建和删除

    1、文件创建:touch
    如:touch /tmp/aa.txt 在/tmp目录创建aa.txt文件
    如:touch /tmp/aa{1..10} 在/tmp目录批量创建文件
    touch /tmp/{aa,bb,cc}.txt

    2、目录创建:mkdir
    如:mkdir /tmp/centos 在/tmp目录下创建centos目录
    如:mkdir -p /tmp/linux/centos -p递归创建目录

    3、删除文件和文件
    rm
    -r 递归删除目录及其内容
    -d 删除空目录
    -f 不询问直接删除
    如:rm -f aa.txt 不询问直接删除aa.txt文件
    如:rm -rf /tmp/centos 不询问直接递归删除centos目录及其内容

    二、文件的查看与编辑

    1、cat
    用法:
    1)查看文件内容
    cat /etc/issue 查看/etc/目录下issue文件里的内容
    2)通过>和>>把内容加入到文件
    cat /etc/redhat-release >> /tmp/cc.txt 把/etc/redhat-release里的内容追加到/tmp/cc.txt结尾
    cat /etc/redhat-release >> /tmp/cc.txt 先清空/tmp/cc.txt文件再把/etc/redhat-release里的内容添加到里面
    3)合并查看多个文件
    cat a.txt cc.txt 合并查看a.txt和cc.txt两个文件
    4)创建文件并添加多行内容
    cat >>dd.txt<<EOF
    如:[root@localhost.localdomain /tmp]# cat >>dd.txt<<EOF
    > hellow world!
    > centos7
    > nginx
    > apache
    > php
    > EOF
    [root@localhost.localdomain /tmp]# cat dd.txt
    hellow world!
    centos7
    nginx
    apache
    php

    2、head head 命令主要用于查看文件内容
    head -10 /var/log/messages 查看该文件前10行内容
    head -c 显示每个文件的前k 字节内容,如果附加“-”参数,则除了每个文件的最后k字节数据外显示剩余全部内容
    head -n 显示每个文件的前k行内容,则除了每个文件的最后k行外显示剩余全部内容
    例如:
    head -n 1 显示文件前1行内容
    head -n -1 显示文件除了最后1行的内容
    head -c 5 显示文件前n个字节
    head -c -5 显示文件除了最后5个字节的内容

    3、tail
    tail +20 notes.log 显示文件 notes.log 的内容,从第 20 行至文件末尾
    tail -c 10 notes.log 显示文件 notes.log 的最后 10 个字符:
    tail -f追踪文件信息时: 文件被删除或移动走, 需要进行重新追踪
    tail -F追踪文件信息时: 文件被删除或移动轴, 不需要进行重新追踪,只要文件恢复回来会继续追踪

    日志文件: 文件数据会不断增加,历史悠久的日志文件会清空
    tail -F 日志信息

    4、less 查看文件内容
    less 1.log 查看档案内容
    history  | less 查看history,通过less来分页
    less 1.log test.txt 通过less查看多个文件

    5、tr 命令用于转换或删除文件中的字符
    cat testfile |tr a-z A-Z 将文件testfile中的小写字母全部转换成大写字母

    6、vi和vim 编辑文件
    vim需要单独通过yum install vim -y安装才能使用

    三、文件类型和文件属性 

    1、文类型
    在Linux中无论压缩文件file.tar.gz还是file.txt 都称为普通文件,后缀对Linux中没多大的意义
    在Linux中,可以说一切设备(包括目录、普通文件)皆为文件
    Linux文件类型常见的有:普通文件、目录、字符设备文件、块设备文件、符号链接文件等;

    [root@iter ~]# ll /
    total 158
    -rw-r--r-- 1 root root 39 Jul 27 12:14 =
    drwxr-xr-x 2 root root 4096 Jul 26 12:32 bin
    drwxr-xr-x 4 root root 1024 Jul 26 12:01 boot
    drwxr-xr-x 12 root root 4300 Jul 26 11:24 dev
    drwxr-xr-x 84 root root 4096 Jul 27 13:13 etc

    l表示一个符号链接文件 d表示一个目录 -表示这是一个普通文件 c字符设备

    d(directory) 表示这是一个目录,如/etc 在ext2fs中,目录是一个特殊的文件
    -(regularfile) 表示这是一个普通的文件,如dingjian
    l(link) 表示这是一个符号链接文件,实际上它指向另一个文件,如win的快捷方式
    b(block) 表示块设备和其他的外围设备,是一个特殊类型的文件
    c(character) 表示字符设备文件
    s(socket) 表示Socket文件
    p(named pipe) 表示管道文件

    ls -l|grep ^d 过滤并以长模式列出当前目录中属性为d的文件

    [root@localhost.localdomain ~]# ls -l / |grep ^d
    dr-xr-xr-x. 5 root root 4096 Sep 16 03:11 boot
    drwxr-xr-x. 19 root root 3180 Sep 21 21:22 dev
    drwxr-xr-x. 75 root root 8192 Sep 24 12:50 etc
    drwxr-xr-x. 3 root root 17 Sep 22 16:29 home
    drwxr-xr-x. 2 root root 6 Apr 11 2018 media

    ls –F|grep / 过滤出当前目录中属性为d的文件

    [root@localhost.localdomain ~]# ls -F /|grep /
    boot/
    dev/
    etc/
    home/
    media/
    mnt/

    Linux下扩展名的作用
    在linux中,虽然扩展名没什么实际意义,但习惯通过扩展名来表示不同的文件类型,
    .tar、.tar.gz、.tgz、.zip、.tar.bz 表示压缩文件,创建命令一般为tar,gzip,unzip等
    .sh表示shell脚本文件,通过shell语言开发的程序
    .pl表示perl语言文件,通过perl语言开发的程序
    .py 表示python语言文件,通过python语言开发的程序
    .html、.htm、.php、.jsp、.do表示网页语言的文件
    .conf表示系统的配置文件
    .rpm表示rpm安装包文件

    2、文件属性
    inux系统中文件或目录的属性主要包括:文件或目录的索引节点(inode)、类型、权限属性、链接数、所归属的用户和用户组、最近修改时间等内容
    ls –lhi /etc i索引号 h显示常用大小 l显示长列表格式

    [root@dingjian ~]# ls -lhi /etc
    total 1.3M
    658494 drwxr-xr-x. 3 root root 4.0K Nov 5 05:48 abrt
    660078 -rw-r--r--. 1 root root 49 Nov 8 01:58 adjtime
    654098 -rw-r--r--. 1 root root 1.5K Jan 12 2010 aliases
    661160 -rw-r--r--. 1 root root 12K Nov 7 02:24 aliases.db
    654162 drwxr-xr-x. 2 root root 4.0K Nov 7 02:24 alternatives

    455171 -rw-r--r-- 1 root root 3.8K Jul 24 17:39 install.log.syslog
    Indoe 文件类型 硬链 属主及 文件或 最近修改 文件或目录名称
    节点号 及权限 接数 所属组 目录大小 时间

    inode 的值是:2408949
    文件类型:文件类型是-,表示这是一个普通文件; 关于文件的类型,
    文件权限:文件权限是rwxr-xr-x ,表示文件属主可读、可写、可执行,文件所归属的用户组可读可执行,其它用户可读可执行;
    硬链接个数: lsfile.sh这个文件没有硬链接;因为数值是1,就是他本身;
    文件属主:也就是这个文件归哪于哪个用户 ,它归于root,也就是第一个root;
    文件属组:也就是说,对于这个文件,它归属于哪个用户组,在这里是root用户组;
    文件大小:文件大小是7个字节;
    访问可修改时间 :这里的时间是最后访问的时间,最后访问和文件被修改或创建的时间,有时并不是一致的;

    四、文件查找

    find 查找文件命令
    -type 查找文件类型

    [root@localhost.localdomain ~]# find /dev/ -type b |xargs ls -l
    brw-rw----. 1 root disk 8, 0 Sep 21 21:22 /dev/sda
    brw-rw----. 1 root disk 8, 1 Sep 21 21:22 /dev/sda1
    brw-rw----. 1 root disk 8, 2 Sep 21 21:22 /dev/sda2
    brw-rw----. 1 root disk 8, 3 Sep 21 21:22 /dev/sda3
    brw-rw----. 1 root cdrom 11, 0 Sep 21 21:22 /dev/sr0
    [root@localhost.localdomain ~]# find /root -type f -exec ls -l {} ;
    -rw-r--r--. 1 root root 18 Dec 29 2013 /root/.bash_logout
    -rw-r--r--. 1 root root 176 Dec 29 2013 /root/.bash_profile
    -rw-r--r--. 1 root root 176 Dec 29 2013 /root/.bashrc
    -rw-r--r--. 1 root root 100 Dec 29 2013 /root/.cshrc
    -rw-r--r--. 1 root root 129 Dec 29 2013 /root/.tcshrc
    -rw-------. 1 root root 1487 Sep 16 03:10 /root/anaconda-ks.cfg
    -rw-------. 1 root root 3131 Sep 22 19:38 /root/.bash_history

    -name 查找文件名称

    [root@localhost.localdomain ~]# find / -name redhat-release
    /etc/redhat-release
    /usr/share/doc/redhat-release
    /usr/share/redhat-release

    五、软链接和硬链接

    链接的概念
    在linux系统中,链接可以分为两种:
    一种被称为硬链接(Hard Link),另一种被称为软链接或符号链接(Symbolic Link)。在默认不带参数情况下,执行ln命令创建的链接是硬链接。

    硬链接:
    硬链接作用之一是允许一个文件拥有多个有效路径名,这样用户就可以建立硬链接到重要的文件,防止“误删”源数据(很多硬件存储,如netapp存储中的快照功能就应用了这个原理,增加一个快照就多了一个硬链接。)  保存在磁盘分区中的文件不管是什么类型都会给它分配一个编号,这个编吃称为索引节点编号(inode index)或者称为inode,在Linux系统中,多个文件名指向同一个索引节点(即具备相同的Inode数字编号)是正常的。一般这种链接就称为硬链接。
    软链接:
    软链接也称为符号链接(Symbolic Link) ,类似于windows系统中的快捷方式

    ls –li 查看索引节点的信息
    硬链接的文件与原文件节点号是相同的,软链接的文件与原文件的节点号是不同的

    硬链接和硬链接的创建示例:
    示例一:分别创建一个文件的硬链接和软链接

    [root@localhost.localdomain ~]# mkdir -p /test/mrxiong    #创建递归目录/test/iter 
    [root@localhost.localdomain ~]# touch /test/mrxiong/iterfile     #在/test/iter/目录中创建文件iterfile
    [root@localhost.localdomain ~]# ls -l /test/mrxiong/
    total 0
    -rw-r--r--. 1 root root 0 Sep 24 14:17 iterfile
    [root@localhost.localdomain ~]# cd /test/mrxiong/
    [root@localhost.localdomain /test/mrxiong]# ln iterfile iterfile_hard_link     #创建iterfile硬链接
    [root@localhost.localdomain /test/mrxiong]# ls -l
    total 0
    -rw-r--r--. 2 root root 0 Sep 24 14:17 iterfile
    -rw-r--r--. 2 root root 0 Sep 24 14:17 iterfile_hard_link
    [root@localhost.localdomain /test/mrxiong]# ln -s iterfile iterfile_soft_link     #创建iterfile软链接
    [root@localhost.localdomain /test/mrxiong]# ls -l
    total 0
    -rw-r--r--. 2 root root 0 Sep 24 14:17 iterfile
    -rw-r--r--. 2 root root 0 Sep 24 14:17 iterfile_hard_link     #己创建的硬链接的属性
    lrwxrwxrwx. 1 root root 8 Sep 24 14:19 iterfile_soft_link -> iterfile     #己创建的软链接属性

    示例二:分别为目录创建硬链接和软链接

    [root@localhost.localdomain ~]# cd /tmp
    [root@localhost.localdomain /tmp]# mkdir iterdir    #创建一个目录iterdir
    [root@localhost.localdomain /tmp]# ln iterdir iterdir_hard_link #为iterdir目录创建硬链接
    ln: ‘iterdir’: hard link not allowed for directory #提示错误目录无法创建硬链接 
    [root@localhost.localdomain /tmp]# ln -s iterdir iterdir_soft_link #但目录可以创建软链接
    [root@localhost.localdomain /tmp]# ls -lirt
    total 0
    489387 drwxr-xr-x. 2 root root 6 Sep 24 14:21 iterdir
    33554505 lrwxrwxrwx. 1 root root 7 Sep 24 14:23 iterdir_soft_link -> iterdir

    总结:ln 命令不能对目录创建硬链接,但可以对目录创建软链接,对于目录的软链接也是生产场景运维中常用的功能
    对于一个文件创建硬链接和软链接,我们无论访问其软链接还是硬链接都可以访问其源文件内容

    示例三:删除硬链接和软链接
    实验一、创建iterfile文件,分别创建iterfile_hard_link 硬链接和iterfile_soft_link软连接 删除iterfile_soft_link

    [root@localhost.localdomain /tmp]# touch iterfile
    [root@localhost.localdomain /tmp]# echo "i am mary" > iterfile
    [root@localhost.localdomain /tmp]# ln -s iterfile iterfile_soft_link
    [root@localhost.localdomain /tmp]# ln iterfile iterfile_hard_link
    [root@localhost.localdomain /tmp]# ls -li
    total 8
    33554505 -rw-r--r--. 2 root root 10 Sep 24 14:29 iterfile
    33554505 -rw-r--r--. 2 root root 10 Sep 24 14:29 iterfile_hard_link
    33568083 lrwxrwxrwx. 1 root root 8 Sep 24 14:29 iterfile_soft_link -> iterfile
    [root@localhost.localdomain /tmp]# rm iterfile_soft_link -f
    [root@localhost.localdomain /tmp]# ls -l
    total 8
    -rw-r--r--. 2 root root 10 Sep 24 14:29 iterfile
    -rw-r--r--. 2 root root 10 Sep 24 14:29 iterfile_hard_link
    [root@localhost.localdomain /tmp]# cat iterfile_hard_link
    i am mary

    实验二、创建iterfile文件,分别创建iterfile_hard_link 硬链接和iterfile_soft_link软连接 ,删除iterfile_hard_link硬链接

    [root@localhost.localdomain /tmp]# touch iterfile
    [root@localhost.localdomain /tmp]# echo "i am mary" > iterfile
    [root@localhost.localdomain /tmp]# ln -s iterfile iterfile_soft_link
    [root@localhost.localdomain /tmp]# ln iterfile iterfile_hard_link
    [root@localhost.localdomain /tmp]# ls -li
    total 8
    33554505 -rw-r--r--. 2 root root 10 Sep 24 14:29 iterfile
    33554505 -rw-r--r--. 2 root root 10 Sep 24 14:29 iterfile_hard_link
    33568083 lrwxrwxrwx. 1 root root 8 Sep 24 14:29 iterfile_soft_link -> iterfile
    [root@localhost.localdomain /tmp]# rm -f iterfile_hard_link
    [root@localhost.localdomain /tmp]# ls -l
    total 4
    -rw-r--r--. 1 root root 10 Sep 24 14:29 iterfile
    lrwxrwxrwx. 1 root root 8 Sep 24 14:32 iterfile_soft_link -> iterfile
    [root@localhost.localdomain /tmp]# cat iterfile iterfile_soft_link
    i am mary
    i am mary

    实验三、创建iterfile文件,分别创建iterfile_hard_link 硬链接和iterfile_soft_link软连接, 删除原文件iterfile

    [root@localhost.localdomain /tmp]# touch iterfile
    [root@localhost.localdomain /tmp]# echo "i am mary" > iterfile
    [root@localhost.localdomain /tmp]# ln -s iterfile iterfile_soft_link
    [root@localhost.localdomain /tmp]# ln iterfile iterfile_hard_link
    [root@localhost.localdomain /tmp]# ls -li
    total 8
    33554505 -rw-r--r--. 2 root root 10 Sep 24 14:29 iterfile
    33554505 -rw-r--r--. 2 root root 10 Sep 24 14:29 iterfile_hard_link
    33568083 lrwxrwxrwx. 1 root root 8 Sep 24 14:29 iterfile_soft_link -> iterfile    
    [root@localhost.localdomain /tmp]# rm -f iterfile
    [root@localhost.localdomain /tmp]# ls -l
    total 4
    -rw-r--r--. 1 root root 10 Sep 24 14:29 iterfile_hard_link # 软链接闪跃证明失效
    lrwxrwxrwx. 1 root root 8 Sep 24 14:32 iterfile_soft_link -> iterfile    
    [root@localhost.localdomain /tmp]# cat iterfile_hard_link
    i am mary

    总结:通过上面的测试可以看出:当删除原始文件iterfile后,硬链接iterfile_hard_link不受影响,但是软链接文件iterfile_soft_link失效,显示为闪烁状态
    ls lrit   r颠倒顺序的排序  t 看最近更新的文件  i查看索引节点

    通过以上的测试,我们可以得到以下几个结论:
    删除软链接iterfile_soft_link,对于iterfile,iterfile_hard_link无影响
    删除硬链接iterfile_hard_link,对iterfile,iterfile_soft_link也无影响
    删除原文件iterfile,对硬链接iterfile_hard_link没有影响,导致软链接失效
    同时删除原文件iterfile,硬链接iterfile_hard_link,整个文件会真正的被删除
    很多硬件设备中的快照功能,就是利用了硬链接的原理。
    源文件和硬链接文件具有相同的索引节点,可以认为是同一个文


    对于目录,不可以创建硬链接,但可以创建软链接
    对于目录的软链接是生产环景运维中常用的技巧
    硬链接不能跨文件系统

    链接知识拓展
    软链接的生产使用案例:
    在编译apache软件时,编译路径带着版本号/application/apache2.2.21(为了区分版本用,因此路径很长),而在访问目录又希望简便,此时就可以通过建立一个简单的链接路径文件
    ln –s /application/apache2.2.21 /application/apache 来达到方便访问的目的

    硬链接的生产使用案例:
    硬件存储的快照功能。或者为备份数据创建多个硬链接,防止误删数据。

    描述linux下软链接和硬链接的区别
    解答:
    在linux系统中,链接分为两种:一种是硬链接(hard link),另一种是软链接或符号链接(symbolic link)
    1)默认不带参数情况下,ln命令创建的是硬链接,带-s参数的ln命令创建的是软链接
    2)硬链接文件与源文件的inode节点号相同,而软链接文件的inode节点号与源文件不同
    3)ln命令不能对目录创建硬链接,但可以创建软链接,对目录的软链接会经常被用到
    4)删除软链接文件,对源文件和硬链接文件无任何影响
    5)删除文件的硬链接文件,对源文件及软链接文件无任何影响
    6)删除链接文件的源文件,对硬链接文件无影响,会导致其软链接失效(红底白字闪烁状态)
    7)同时删除源文件及其硬链接文件,整个文件才会被真正的删除
    8)很多硬件设备中的快照功能,使用的就类似硬链接的原理
    9)软链接可以跨文件系统,硬链接不可以跨文件系统

  • 相关阅读:
    AngularJS(3)-过滤器
    AngularJS(2)-Scope作用域和控制器
    iOS局部刷新
    python(一)入门
    Java基础
    AngularJS(1)随笔
    mac下如何查看指定端口被谁占用并且杀死该进程
    Python 字节码bytecode
    Python 作用域和命名空间
    Python函数的默认参数的设计【原创】
  • 原文地址:https://www.cnblogs.com/mr-xiong/p/13728879.html
Copyright © 2020-2023  润新知