zoukankan      html  css  js  c++  java
  • 文件管理(基础)

    一、Linux系统的单根目录结构:

                      一切皆文件的设计思想

    文件的时间

    ls -l 文件名 仅查看的是文件的修改时间
    Linux文件有三种时间,用stat查看
    例如:[root@localhost ~]# stat anaconda-ks.cfg

    访问时间:atime,查看内容,用cat检测
    修改时间:mtime,修改内容
    改变时间:ctime,修改内容,修改权限等属性,凡是有改动都会变

    文件的扩展名     

    Linux文件是没有扩展名!!!

    Linux文件是没有扩展名!!!

    //方法一:
    ls(英文全拼:list files)命令用于显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录)
    语法:
    ls [-alrAFR] [name...]
    参数:
    -a 显示所有文件及目录(.开头的隐藏文件也会列出)
    -l 除文件名称外,亦将文件型态,权限,拥有者,文件大小等资讯详细列出
    -r 将文件以相反次序显示(原定依英文字母次序)
    -t 将文件依建立时间之先后次序列出
    -A 同-a,但不列出"."(目前目录)以及".."(父目录)
    -F 在列出的文件名称后加一符号;例如可执行当则加"*",目录则加"/"
    -R 若目录下只有文件,则以下之文件亦皆依序列出

    示例:
    列出根目录()下的所有目录
    [root@localhost ~]# ls /
    bin dev home lib64 mnt proc run srv test01 usr
    boot etc lib media opt root sbin sys tmp var
    列出目前工作目录下所有名称是s开头的文件,越新的越排后面:
    [root@localhost ~]# ls -ltr s*
    将/bin目录以下的所有目录及文件详细的资料列出
    [root@localhost ~]# ls -lR /bin
    列出目前工作目录下所有文件及目录;目录于名称后加'/',可执行档于名称后加'*'
    [root@localhost ~]# ls -AF

    二 系统目录结构与作用

    [root@aliyun ~]# ls -l /  # /是所有linux操作系统的顶点目录,不像windows,每个分区都有一个顶点目录
    total 64
    ​
    # 1、命令相关目录
    lrwxrwxrwx.  1 root root     7 Jul 11  2019 bin -> usr/bin # 普通用户使用的命令如ls、date
    lrwxrwxrwx.  1 root root     8 Jul 11  2019 sbin -> usr/sbin # 管理员使用的命令
    ​
    ​
    #2、启动目录
    dr-xr-xr-x.  5 root root  4096 Feb 11 19:06 boot # 存放的启动相关的文件,例如kernel,grub(引导装载程序)
        
        
    #3、系统文件目录
    drwxr-xr-x. 13 root root  4096 Jul 11  2019 usr # 系统文件,相当于C:Windows
    lrwxrwxrwx.  1 root root     7 Jul 11  2019 lib -> usr/lib # 库文件Glibc
    lrwxrwxrwx.  1 root root     9 Jul 11  2019 lib64 -> usr/lib64 # 库文件Glibc
    ​
    #4、用户家目录
    drwxr-xr-x.  5 root root  4096 Feb 24 16:42 home # 普通用户家目录
    dr-xr-x---. 11 root root  4096 Jul  8 17:03 root # root用户的HOME
    ​
    #5、配置文件目录
    drwxr-xr-x. 79 root root  4096 Jul  8 17:04 etc # 配置文件,很重要,系统级服务配置文件都在这里
    """
    /etc/sysconfig/network-script/ifcfg-*,网络配置文件
    /etc/hostname,系统主机名配置文件
    /etc/resolv.conf,dns客户端配置文件
    /etc/hosts,本地域名解析配置文件
    /etc/fstab    系统挂载目录 开机自启动挂载列表
    /etc/passwd  系统用户文件
    """
    ​
    #6、设备目录文件
    drwxr-xr-x  19 root root  2960 Feb 15 17:22 dev # 设备文件,/dev/sda /dev/sr0
    """
    /dev/cdrom 和/dev/sr0,系统光盘镜像设备
    /dev/null,黑洞设备,只进不出。类似于垃圾回收站
    /dev/random,生成随机数的设备
    /dev/zero,能源源不断地产生数据,类似于取款机,随时随地取钱
    /dev/pts/0,虚拟的Bash Shell终端,提供给远程用户使用 0代表第一个终端 1代表第2个终端
    以此类推
    /dev/stderr,错误输出    
    /dev/stdin,标准输入
    /dev/stdout,标准输出
    """
    ​
    #7、虚拟文件系统:类似于小汽车的仪表板,能够看到汽车是否有故障,或者是否缺油了。
    dr-xr-xr-x  89 root root     0 Feb 15 17:22 proc # 虚拟的文件系统,反映出来的是内核,进程信息或实时状态 
    """
    反映系统当前进程的实时状态
    /proc/meminfo:内存信息
    /proc/cpuinfo:cpu信息
    """
        
    ​
    #8、可变的目录与临时目录
    drwxr-xr-x. 19 root root  4096 Jul 11  2019 var  #存放的是一些变化文件,比如数据库,日志,邮件.... 
    """
    /tmp,系统临时目录(类似于公共厕所),系统会定时删除该目录下长时间没有访问的文件。
    /var,存放一些变化文件,如下
                        mysql:          /var/lib/mysql
                        vsftpd:         /var/ftp
                        mail:           /var/spool/mail
                        cron:           /var/spool/cron
                        log:            /var/log 系统日志文件存放目录
                                        /var/log/messages系统日志
                                        /var/log/secure系统登录日志
                        /var/tmp        临时文件(主要是程序产生的临时文件)
    ​
    """ 
    ​
    ​
    # 9、设备(主要指存储设备)挂载目录
    drwxr-xr-x.  2 root root  4096 Apr 11  2018 media # 移动设备默认的挂载点
    drwxr-xr-x.  2 root root  4096 Apr 11  2018 mnt # 手工挂载设备的挂载点
    drwxr-xr-x.  2 root root  4096 Apr 11  2018 opt # 早期第三方厂商的软件存放的目录.
    drwxrwxrwt. 10 root root  4096 Jul  9 15:16 tmp # 临时存放文件,类似于回收站,超过十天自动删除
        
    #10、其他的一些重要目录
    drwx------.  2 root root 16384 Jul 11  2019 lost+found # 孤儿文件
    这个目录是使用标准的ext2/ext3档案系统格式才会产生的一个目录,目的在于当档案系统发生错误时, 将一些遗失的片段放置到这个目录下。
    这个目录通常会在分割槽的最顶层存在,例如你加装一颗硬盘于/disk中,那在这个系统下就会自动产生一个这样的目录『/disk/lost+found lost+found这个目录一般情况下是空的,当系统非法关机后,如果你丢失了一些文件,在这里能找回来用来存放fsck过程中部分修复的文件的 lost+found:几乎每个被格式化过的Linux分区都会有,意外后找回的文件一般在这里面。 这个目录是储存发生意外后丢失的文件的。只有root用户才能打开 ​ drwxrwxr-x 6 root root 4096 Feb 23 19:24 application drwxr-xr-x 25 root root 660 Jul 8 17:00 run # 存放程序运行后所产生的pid文件 drwxr-xr-x. 2 root root 4096 Apr 11 2018 srv # 物理设备产生的一些文件 dr-xr-xr-x 13 root root 0 Feb 16 01:22 sys # 硬件设备的驱动程序信息 ​ ​

    三 绝对路径与相对路径

    # 1、绝对路径示例
    touch /home/alice/file1
    touch ~alice/file2
    ​
    # 2、相对路径示例
    touch ../file3
    touch file4
    touch abc/file5

    四 文件管理

    处理目录的常用命令

    ls(英文全拼:list files)   列出目录及文件名
    cd(英文全拼:change directory) 切换目录
    pwd(英文全拼:print work directory) 显示目前的目录
    mkdir(英文全拼:make directory) 创建一个新的目录
    rmdir(英文全拼:remove directory) 删除一个空的目录
    cp(英文全拼:copy file) 复制文件或目录
    rm (英文全拼:remove) 移除文件或目录
    mv (英文全拼:move file) 移动文件或目录,或修改文件与目录的名称

    * 你可以使用man[命令] 来查看各个命令的使用文档,如:man cp

    4.1 文件管理之:基本命令

    # 1、查看当前所在的目录   pwd
        [root@localhost ~]# pwd
        /root
    # 2、切换目录   cd
        cd [dirName] dirName:要切换的目录
        cd 相对路径 [root@localhost ~]# cd test01
        cd 绝对路径 [root@localhost ~]# cd /root/test01
        cd - # 返回上次目录
        cd # 直接回家,等同于cd ~
        cd .   # 保持当前目录不变
        cd .. # 切换到当前目录的上一级目录

    # 3、查看目录树:需要先安装tree命令,执行yum install tree -y
        语法:
        参数说明:
          -a 显示所有文件和目录
          -A 使用ASNI绘图字符显示树状图而非以ASCII字符组合
          -C 在文件和目录清单上加上色彩,便于区分各种类型
          -d 显示目录名称而非内容
          -D 列出文件或目录的更改时间
          -f 在每个文件或目录之前,显示完整的相对路径名称
          -F 在执行文件目录,Socket,符号连接,管道名称名称,各自加上"*" "/" "=" "@" "|" 号
          -g 列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码
          -i 不以阶梯状列出文件或目录名称
          -L level 限制目录显示层级
          -l 如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录
          -n 不在文件和目录上加色彩
          -N 直接列出文件和目录名称,包括控制字符
          -p 列出权限标示
          -P <范本样式>只显示符合范本样式的文件或目录名称
          -q 用"?"号取代控制字符,列出文件和目录名称
          -s 列出文件或目录大小
          -t 用文件和目录的更改时间排序
          -u 列出文件或目录的拥有者的名称,没有对应的名称时,则显示用户识别码
          -x 将范围局限在现行的文件系统中,若指定目录下的某些子目录,其存与另一个文件系统上
    ,则将该子目录予以排除在寻找范围外

    # 4、浏览
        ls # 默认浏览当前目录
        ls -l 目录 #浏览目录下的子目录子文件的详细信息
        ls -al 目录 #浏览的结果包含隐藏文件
        ls -dl 目录 #查看目录

    在Linux中我们可以使用 ll 或者 ls -l 命令来显示一个文件的属性以及文件所属的用户和组,如:
        [root@localhost ~]# ls -l
        total 4
        -rw-------. 1 root root 1504 Dec 2 09:39 anaconda-ks.cfg
        drwxr-xr-x. 2 root root 172 Dec 5 07:27 test01
    # 各部分分析如下:
    drwxr-xr-x. 后面的 . 代表是否在selinux开启的情况下(enforcing 或者 permissive 都属于开启)创建文件
    1 硬链接个数
    root 属主
    root 属组
    172 文件大小,单位字节
    Dec 5 07:27 文件修改时间
    test01 文件名字

    实例中,bin文件的第一个属性用 d 表示。 d 在Linux中代表该文件时一个目录文件
    在Linux中第一个字符代表这个文件是目录、文件或链接文件等等
    * 当为 d 则是目录
    * 当为 - 则是文件
    * 若是 l 则表示为链接文档(link file)
    * 若是 b 则表示为装置文件里面的可供存储的接口设备(可随机存取装置)
    * 若是 c 则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)
    * 若是 s 套接字文件,进程间通信(socket)
    * 若是 p 管道文件

    接下来的字符中,以三个为一组,且均为rwx的三个参数的组合。其中,r 代表可读(read)、w代表可写(write)、x代表可执行(execute)
    要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号 - 而已。

     每个文件的属性由左边第一部分的10个字符来确定

     

     从左至右用0-9这些数字来表示

    第 0 位确定文件类型

    第 1-3 位确定属主(该文件的所有者)拥有该文件的权限

    第 4-6 位确定属组(所有者的同组用户)拥有该文件的权限

    第 7-9 位确定其他用户拥有该文件的权限

    其中,第1、4、7位表示读权限,如果用 r 字符表示,则有读权限,如果用 - 字符表示,则没有读权限;

    第2,5,8位表示写权限,如果用 w 字符表示,则有写权限,如果用 - 字符表示没有写权限;

    第3,6,9位表示可执行权限,如果用 x 字符表示,则有执行权限,如果用 - 字符表示,则没有执行权限

    4.2文件管理之:创建、复制、移动、删除

    创建

    1、创建文件  touch
    [root@localhost test01]# touch file1.txt //无则创建文件,有则修改时间
    [root@localhost test01]# touch /root/test01/ file2.txt
    [root@localhost test02]# touch file{1..20} //创建多个文件,后缀依次为file1 file2 file3 ... file20
    [root@localhost test02]# touch Ego{n,N}.txt //等价touch Egon.txt EgoN.txt
    [root@localhost test02]# touch -t 2011111111 2018.rmvb


    2、创建目录 mkdir [-mp] 目录名称
    -m 配置文件的权限哦!直接配置,不需要默认权限(umask)的脸色
    -p 帮助你直接将所需要的目录(包含上一级目录)递归创建起来
    实例:创建数个目录
    [root@localhost test02]# mkdir dir1 //创建名为dir1的新目录
    [root@localhost test02]# mkdir dir2/dir3/dir4
    mkdir: cannot create directory ‘dir2/dir3/dir4’: No such file or directory //没办法直接创建此目录
    [root@localhost test02]# mkdir -p dir2/dir3/dir4 //加了这个 -p 的选项,可以自行帮你创建多层目录
    实例:创建权限为rwx--x--x的目录  
    各权限的分数对照表如下:
    r:4
    w:2
    x:1
    -:0
    [root@localhost test02]# mkdir -m 711 test2
    [root@localhost test02]# ls -l
    drwx--x--x. 2 root root  6 Dec  8 11:31 test2
    上面的权限部分,如果没有加上 -m 来强制配置属性,系统会使用默认属性
    如果我们使用 -m ,如上例我们给予-m 711 来给予新的目录 drwx--x--x 的权限

    cp复制

    语法:cp [options] source dest
    或 cp [options] soure...directory
    参数说明:
    -a 此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合
    -d 复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式
    -f 覆盖已经存在的目标文件而不给出提示
    -i 与-f选项相反,在覆盖目标未结案之前给出提示,要求用户曲儿是否覆盖,回答“y”时目标文件将被覆盖
    -p 除复制文件的内容外,还把修改时间和访问权限也复制到新文件中
    -r 若给出的源文件是一个目录文件,此时将复制给目录下的所有子目录和文件
    -l 不复制文件,只生产链接文件
    -v 显示执行过程
    -s 复制成为符号连结档,亦即捷径文件


    用 root 身份,将 root 目录下的 .bashrc 复制到 /tmp 下,并命名为 bashrc
    [root@www ~]# cp ~/.bashrc /tmp/bashrc
    [root@www ~]# cp -i ~/.bashrc /tmp/bashrc
    cp: overwrite `/tmp/bashrc'? n  <==n不覆盖,y为覆盖

    rmdir(删除空的目录)

    语法:
    rmdir [-p] 目录名称
    选项与参数:
    -p 连同上一级[空的]目录也一起删除
    [root@localhost test01]# rmdir 2
    [root@localhost test02]# ls -l <== 看看有多少目录存在
    total 0
    drwxr-xr-x. 2 root root 6 Dec 8 11:22 dir1
    drwxr-xr-x. 3 root root 18 Dec 8 11:27 dir
    -rw-r--r--. 1 root root 0 Dec 8 11:17 file1
    -rw-r--r--. 1 root root 0 Dec 8 11:17 file2
    -rw-r--r--. 1 root root 0 Dec 8 11:17 file3
    drwx--x--x. 2 root root 6 Dec 8 11:31 test2
    [root@localhost test02]# rmdir dir1 <== 可以直接删除,没问题
    [root@localhost test02]# rmdir test1 <== 因为尚有内容,所以无法删除
    rmdir: failed to remove ‘test1’: Directory not empty
    [root@localhost test02]# rmdir -p test1/test2/test3/test4

    利用 -p 这个选项,立刻就可以将
    test1/test2/test3/test4 一次删除
    不过要注意的是,这个 rmdir 仅能删除空的目录,你可以使用 rm 命令来删除非空目录

    rm(移除文件或目录)

    语法:
       rm [-fir] 文件或目录
    选项与参数:
    -f 就是force的意思,忽略不存在的文件,不会出现警告信息
    -i 互动模式,在删除前会询问使用者是否动作
    -r 递归删除!最常用在目录的删除了!这也是非常危险的选项!!!
    [root@localhost test02]# rm -i file1
    rm: remove regular empty file ‘file1’? y

    * 如果加上 -i 的选项就会主动询问,避免你删除到错误的档名

    mv(移除文件与目录,或修改名称)

    语法:
    [root@www ~]# mv [-fiu] source destination
    [root@www ~]# mv [options] source1 source2 source3 .... directory

    选项与参数
    -f force强制的意思,如果目标文件已经存在,不会询问而直接覆盖
    -i 若目标文件(destination)已经存在时,就会询问覆盖
    -u 若目标文件已经存在,且source比较新,才会升级(update)

    1、移动
    [root@localhost test2]# mv file2 /root/test01 #将file2移动到/root/test01里面

    2、修改名称
    将目录名称更名为test2
    [root@localhost ~]# mv test02 test2

    4.3 文件管理之:查看文件内容

    Linux系统中使用以下命令来查看文件的内容:

    * cat  由第一行开始显示文件内容

    选项与参数:
    * -A 相当于 -vET 的整合选项,可列出一些特殊字符而不是空白而已
    * -b 列出行号,仅针对非空白行做行号显示,空白行不标行号
    * -E 将结尾的断行字节 $ 显示出来
    * -n 列印出行号,连同空白行也会有行号,与 -b 的选项不同
    * -T 将[tab] 按键以 ^| 显示出来
    * -v 列出一些看不出的特殊字符

    示例:
    [root@localhost test01]# cat b.txt

    * tac  从最后一行开始显示,可以看出tac是cat的倒着写

    [root@localhost test01]# tac b.txt

    * nl 显示的时候,顺道输出行号

    语法:
    nl [-bnw] 文件
    选项与参数:
    -b 指定行号指定的方式,主要有两种:
    -ba 表示不论是否为空行,也同样列出行号(类似 cat -n)
    -bt 如果有空行,空的那一行不要列出行号(默认值)

    -n 列出行号表示的方法,主要有三种:
    -nln 行号在荧幕的最左方显示
    -nrn 行号在自己栏位的最右方显示,且不加0
    -nrz 行号在自己栏位的最右方显示,且加0

    -w 行号栏位的占用的位数

    [root@localhost test01]# nl b.txt

    * more  一页一页的显示文件内容

    [root@www ~]# more /etc/man_db.config 
    #
    # Generated automatically from man.conf.in by the
    # configure script.
    #
    # man.conf from man-1.6d
    ....(中间省略)....
    --More--(28%)  <== 重点在这一行喔!你的光标也会在这里等待你的命令

    在more这个程序的运行过程中,你有这几个按键可以按:
    * 空白键(space) 代表向下翻页
    * Enter 代表向下翻[一行]
    * /字串 代表在这个显示的内容中,向下搜寻[字串]这个关键字
    :f 立刻显示出档名以及目前显示的行数
    q 代表立刻离开more,不再显示该文件内容
    b 或 [ctrl]-b 代表往回翻页,不过这动作只对文件有用,对管线无用

    * less 与 more 类似,但是比more更好的是,它可以往前翻页

    一页一页翻动,以下实例输出/etc/man.config文件的内容:
    [root@www ~]# less /etc/man.config
    #
    # Generated automatically from man.conf.in by the
    # configure script.
    #
    # man.conf from man-1.6d
    ....(中间省略)....
    :   <== 这里可以等待你输入命令!
    less运行时可以输入的命令有:
    
    空白键    :向下翻动一页;
    [pagedown]:向下翻动一页;
    [pageup]  :向上翻动一页;
    /字串     :向下搜寻『字串』的功能;
    ?字串     :向上搜寻『字串』的功能;
    n         :重复前一个搜寻 (与 / 或 ? 有关!)
    N         :反向的重复前一个搜寻 (与 / 或 ? 有关!)
    q         :离开 less 这个程序

    * head  只看头几行

    语法:hade [-n number] 文件
    示例:[root@localhost test01]# head -3 b.txt

    * tail   只看尾巴几行

    语法: tail [-n number] 文件
    选项与参数:
    * -n 后面接数字,代表显示几行的意思
    * -f 表示持续侦测后面所接的档名,要等到按下[ctrl]-c才会结束tail的侦测
    示例:[root@localhost test01]
    # tail -3 b.txt

    [root@www ~]# tail /etc/man.config
    # 默认的情况中,显示最后的十行!若要显示最后的 20 行,就得要这样:
    [root@www ~]# tail -n 20 /etc/man.config
     

    你可以使用man[命令] 来查看各个命令的使用文档,如:man cp

  • 相关阅读:
    渲染管线
    C++windows内核编程笔记day13 进程、线程与信号量
    稻盛和夫:真正的聪明人,善于把事物简单化
    学会把复杂问题简单化
    任何事物,只要抓住了规律,就等于牵住了牛鼻子
    菩萨奶奶引领我学佛
    数据库每分钟运行监控SQL
    MySQL 从库down机
    sql server 跟踪日志
    胡小林:把日常生活中碰到的事变成我们发露忏悔的机会
  • 原文地址:https://www.cnblogs.com/ZhZhang12138/p/14099707.html
Copyright © 2011-2022 走看看