zoukankan      html  css  js  c++  java
  • 十、文件管理、属性、查找和软硬链接

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

    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)软链接可以跨文件系统,硬链接不可以跨文件系统

  • 相关阅读:
    PHP数组(数组正则表达式、数组、预定义数组)
    面向对象。OOP三大特征:封装,继承,多态。 这个讲的是【封存】
    uvalive 3938 "Ray, Pass me the dishes!" 线段树 区间合并
    LA4329 Ping pong 树状数组
    HDU 1257 最少拦截系统
    HDU 1260 Tickets
    codeforce 621D
    codeforce 621C Wet Shark and Flowers
    codeforce 621B Wet Shark and Bishops
    codeforce 621A Wet Shark and Odd and Even
  • 原文地址:https://www.cnblogs.com/mr-xiong/p/13728879.html
Copyright © 2011-2022 走看看