zoukankan      html  css  js  c++  java
  • Linux基础之文件管理(基础)等相关内容-95

    文件管理(基础)

    一 Linux系统的单根目录结构

    linux与windows的目录结构对比

    文件的时间

    ls -l 文件名 仅看的是文件的修改时间
    Linux文件有
    三种时间,用stat查看
    例如:stat anaconda-ks.cfg
    访问时间:atime,查看内容,用cat检测
    修改时间:mtime,修改内容
    改变时间:ctime,修改内容,修改权限等属性,凡是有改动都会变

    文件的扩展名

    Linux文件是没有扩展名!!!
    // 方法一:
    ls -l 文件名 //看第一个字符
    - 普通文件(文本文件,二进制,压缩文件,电影,图片。。。),例如:/bin/ls
    d 目录文件(蓝色),例如/home/
    b 设备文件(块设备)存储设备硬盘,U盘,例如:/dev/sda
    c 设备文件(字符设备)打印机,例如:终端/dev/tty1
    s 套接字文件,例如:/run/rpcbind.sock
    p 管道文件,例如:/run/systemd/initctl/fifo
    l 链接文件(淡蓝色),例如:/bin
    ps:通过颜色判断文件的类型是错误的!!!
    // 方法二:
    [root@xxx ~]# file /etc/grub.conf
    bash shell对文件进行管理:
    1. 创建
    2. 复制
    3. 删除
    4. 移动
    5. 查看
    6. 编辑
    7. 压缩
    8. 权限操作
    9. 查找

    一切皆文件的设计思想

    二 系统目录结构与作用

    Windows: 以多根的方式组织文件 C: D: E:
    Linux: 以单根的方式组织文件 /
    FHS(Filesystem Hierarchy Standard)指的是文件系统层次化标准,多数Linux版本采用这种文件组
    织形式,是以树形的结构来组织文件的。

    [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 # 硬件设备的驱动程序信息

    三 绝对路径与相对路径

    绝对路径: 从/开头的路径 /home ~alice
    相对路径: 相对于当前目录开始
    . 链接到当前目录
    .. 链接到上一级目录
    ~ 当前用户的家目录

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

    四 文件管理

    4.1 文件管理之:基本命令

    # 1、查看当前所在的目录
    [root@localhost ~]# pwd
    /root

    # 2、切换目录
    cd 绝对路径 如:cd /home/alice cd ~alice
    cd 相对路径 如:cd home/alice cd ..
    cd - # 返回上次目录
    cd # 直接回家,等同于cd ~
    cd . #保持当前目录不变
    cd .. #切换到当前目录的上一级目录

    # 3、查看目录树:需要先安装tree命令,执行yum install tree -y
    tree -a 目录 # 显示所有文件,包括隐藏文件
    tree -d 目录 # 只显示子目录
    tree -L 1 目录 # -L 遍历目录的最大层数,-L后应该是大于0的正整数
    tree -F 目录 # -F 在条目后加上文件类型的指示符号,例如会在显示出的目录后面加上左斜杠/
    [root@localhost ~]# tree /a
    /a
    ├── b
    │ ├── 1.txt
    │ ├── 2.txt
    │ └── 3.txt
    ├── bb
    │ ├── a.txt
    │ ├── b.txt
    │ └── c.txt
    └── bbbb

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

    # 4、浏览
    ls # 默认浏览当目录
    ls -l 目录 # 浏览目录下的子目录子文件名的详细信息
    ls -al 目录 # 浏览的结果中包含隐藏文件
    ls -dl 目录 # 查看目录
    [root@localhost ~]# ll a.txt
    -rw-r--r--. 1 root root 0 12月 15 14:02 a.txt

    # 各部分解析如下
    -rw-r--r--. 权限,后面的点代表是否在selinux开启的情况下(enforcing或者permissive都属于开
    启)创建的文件
    1 硬链接个数
    root 属主
    root 属组
    0 文件大小,单位字节
    12月 15 14:02 文件修改时间
    a.txt 文件名字

    # 权限的第一个为代表文件类型
    格式 说明
    - 普通文件(文本, 二进制, 压缩包, 图片, 日志等)
    d 目录文件
    b 设备文件(块设备)存储设备硬盘 /dev/sda1, /dev/sda2
    c 设备文件(字符设备)打印机,终端 /dev/tty1, /dev/zero
    s 套接字文件, 进程间通信(socket)
    p 管道文件
    l 链接文件
    注意: Linux文件扩展名不代表任何含义, 仅仅是为了运维人员便于识别

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

    创建
    # 1、=============创建文件:touch
    touch file1.txt //无则创建,有则修改时间
    touch /home/file10.txt
    touch file{1..20}
    touch Ego{n,N}.txt //等价touch Egon.txt EgoN.txt
    touch -t 2011111111 2018.rmvb
    修改文件时间 语法:
    -t STAMP
    use [[CC]YY]MMDDhhmm[.ss] instead of current time
    了解文件的三个时间参数:https://www.cnblogs.com/linhaifeng/articles/13324247.html

    # 2、=============创建目录:mkdir
    mkdir dir1
    mkdir /home/dir2 /home/dir3
    mkdir /home/{dir4,dir5}
    mkdir -v /home/{dir6,dir7}
    mkdir: 已创建目录 “/home/dir6”
    mkdir: 已创建目录 “/home/dir7”
    mkdir -p /home/dir8/111/222 //包括其父母的创建

    复制
    # 1、=============复制:cp
    cp 源 目标
    cp -v install.log /home/dir1
    cp -v install.log /home/dir1/aaa.txt
    cp -r /etc /home/dir1
    cp install.log /home/dir2
    cp anaconda-ks.cfg !$
    cp anaconda-ks.cfg /home/dir2
    cp -r /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/passwd /etc/grub.conf
    /etc/hosts .
    cp -rv /etc /tmp
    cp -rv /etc /tmp
    扩展用法:
    cp -rfv /etc/hosts{,.old}
    cp -rvf /etc/sysconfig/network-scripts/ifcfg-eth0{,.old}

    关于-f参数的一个实验
    [root@aliyum ~]# echo "1111" > /opt/a.txt
    [root@aliyum ~]# echo "2222" > /t2/a.txt
    [root@aliyum ~]#
    [root@aliyum ~]# chmod o=wx /t2
    [root@aliyum ~]# chmod o=- /t2/a.txt
    [root@aliyum ~]#
    [root@aliyum ~]# ll -d /t2
    drwxr-x-wx 2 root root 4096 Oct 20 00:07 /t2
    [root@aliyum ~]# ll /t2/a.txt
    -rw-r----- 1 root root 5 Oct 20 00:07 /t2/a.txt
    [root@aliyum ~]#
    [root@aliyum ~]# su - xxx
    Last login: Tue Oct 20 00:05:43 CST 2020 on pts/2
    [xxx@aliyum ~]$ cp /opt/a.txt /t2/a.txt # 失败
    cp: cannot create regular file ‘/t2/a.txt’: Permission denied
    [xxx@aliyum ~]$ cp /opt/a.txt /t2/a.txt # 失败
    cp: cannot create regular file ‘/t2/a.txt’: Permission denied
    [xxx@aliyum ~]$
    [xxx@aliyum ~]$
    [xxx@aliyum ~]$ cp -f /opt/a.txt /t2/a.txt # 成功
    [xxx@aliyum ~]$ exit
    logout
    [root@aliyum ~]# cat /t2/a.txt
    1111
    [root@aliyum ~]#

    ========================================================
    小知识:root用户使用cp (默认有一个别名 alias cp='cp -i') -i 显示提示信息(是否覆盖)
    1. /bin/cp -rf /etc /tmp
    2. # unalias cp
    # cp -rf /etc /tmp
    3. # cp -rf /etc /tmp
    4.-f 参数是强制复制,比如你在A文件夹里面有个文件名叫B,然后你把C文件夹里面的另一个文件名叫B的复
    制到A里面,这个时候会照成冲突,然后会提示你要不要继续复制.加上-f 就不会提示你了.
    你输入-f 还是会提示你的原因是
    -------------------------------------------------------------
    有的系统在安装的时候,cp - i 的 alias 就是 cp
    也就是说你在执行cp的时候,其实是执行的cp -i
    取消掉cp的alias就好了
    ==========================================
    解决办法
    unalias cp
    ========================================================

    移动与删除
    # 1、=============复制:mv
    mv 源 目标
    # mv file2 /home/dir3 将file2移动到/home/dir3里
    # mv file4 file5 将file4重命名为file5,当前位置里的移动就是重命名

    # 2、=============复制:rm
    示例:删除/home/dir1
    # cd /home
    # rm -rf dir1
    -r 递归
    -f force强制
    -v 详细过程

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

    ==文本文件 (cat less more head tail grep)
    /etc/hosts
    /etc/sysconfig/network
    /etc/sysconfig/network-scripts/ifcfg-eth0
    /etc/passwd
    /etc/shadow
    /etc/group
    /etc/grub.conf
    /etc/resolv.conf
    /var/log/messages //系统的主日志文件
    cat
    -n 显示行号
    -A 包括控制字符(换行符)linux $ Windows ^M$
    ========================================================
    扩展知识:
    dos2unix 将Windows格式的文件转换成Unix格式
    unix2dos 将Unix格式的文件转换成Windows格式
    例如
    # unix2dos file1
    # dos2unix file2
    ========================================================
    less more head tail
    # head /etc/passwd
    # head -2 /etc/passwd
    # tail /etc/passwd
    # tail -1 /etc/passwd
    # more /etc/passwd # 使用more命令之后,每次在屏幕上显示一屏(一页)的文件内容,并且在屏幕
    的尾部将会出现“—More--(n%)”的信息,其中,n%是已经显示文件内容的百分比。按空格下一页,按b上一
    页,more +40 a.txt从第40行开始查看
    # tail -f /var/log/messages //-f 动态查看文件的尾部
    # logger xxxxxxxxx //手动产生日志信息

    grep 针对文件内容进行过滤
    # grep 'root' /etc/passwd
    # grep --color 'root' /etc/passwd
    # grep --color '^root' /etc/passwd
    # grep --color 'bash$' /etc/passwd

    4.4 文件管理之:修改文件内容

    1、什么是vim
    可以理解为windows下面的文本编辑器,比如记事本,比如word文档。
    vi编辑器通常被简称为vi,而vi又是visual editor的简称。它在Linux上的地位就像Edit程序在DOS上
    一样。它可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行
    定制,这是其他编辑程序所没有的。
    vi 编辑器并不是一个排版程序,它不像Word或WPS那样可以对字体、格式、段落等其他属性进行编排,它只
    是一个文本编辑程序。没有菜单,只有命令,且命令繁多。
    2、为何要用vim
    1.修改配置
    2.写脚本
    3、vi与vim的区别
    vi不显示高亮颜色语法
    vim显示高亮颜色语法。
    其他功能没有什么区别。
    所以在linux系统下,使用vi还是vim取决个人习惯。
    默认vi是安装的 , vim需要通过yum install vim -y
    4、vi编辑器的操作模式

    # 1、命令行模式:在编辑模式下按下ESC键返回命令行模式。
    vi的默认模式。在这一模式中,所有的输入被解释成vi命令,可以执行修改、复制、移动、粘贴和删除正文等
    命令,也可以进行移动光标、搜索字符串和退出vi的操作等。
    # 2、编辑/插入模式:输入a、i、o之一
    在编辑模式中,可以往一个文件中输入正文。在这一模式下,输入的每一个字符都被vi编辑器解释为输入的正
    文。使用ESC键返回命令行模式。
    a:进入插入模式并在光标之后进行添加。
    i:进入插入模式并在光标之前进行插入。
    o:进入插入模式并在当前(光标所在)行之下开启新的一行。
    # 3、扩展/末行模式:输入冒号:
    在一些UNIX系统上也叫最后一行模式。在这一模式下,可以使用一些高级编辑命令,如搜寻和替代字符串、存
    盘或退出vi编辑器等。要进入最后一行模式,需要在命令行模式中输入冒号(:),冒号这一操作将把光标移
    到屏幕的最后一行。
    5、在vi编辑器中光标的移动

    6、在命令行模式下删除与复制的操作

    7、粘贴命令

    8、复原和重做命令

    9、掌握扩展模式下常用的命令

    10、掌握快速移动光标在文件中的位置的命令

    11、掌握快速在屏幕中移动光标的位置的命令

    12、三种模式下的操作汇总与补充
    vi ===> vim 文件编辑器
    # vim /boot/grub2/grub.cfg
    # vim /etc/sysconfig/network-scripts/ifcfg-eth0
    命令模式:
       a. 光标定位
           hjkl
           0 $
           gg G
           3G 进入第三行
           /string(n N 可以循环的) 快速定位到某一行
       b. 文本编辑(少量)
           y 复制 yy 3yy ygg yG (以行为单位)
           d .删除 dd 3dd dgg dG (以行为单位)
           p 粘贴
           x 删除光标所在的字符
           D 从光标处删除到行尾
           u undo撤销
           ^r redo重做
           r 可以用来修改一个字符
       c. 进入其它模式
           a 进入插入模式
           i 进入插入模式
           o 进入插入模式
           A 进入插入模式
           : 进入末行模式
           ^v 进入可视块模式
           R 进入替换模式
           
    插入模式:
       ^p 唯一补齐
       
    末行模式:
       a. 保存退出
           :10 进入第10行
           :w 保存
           :q 退出
           :wq 保存并退出
           :w! 强制保存
           :q! 不保存并退出
           :wq! 强制保存退出
           :x 保存并退出
       b. 查找替换
           :范围 s/old/new/选项
           :1,5 s/Note/yyy/ 从1-5行的Note 替换为yyy
           :5,$ s/Note/yyy/ $表示最后一行
           :1,$ s/to/xxx/g = :% s/to/xxx/g %表示全文 g表示全局
           :4,9 s/^#// 4-9行的以#开头的替换为空
           :% s#/dev/sda#/var/ccc#g
           :,8 s/to/xxx/ 从当前行到第8行
       c. 读入文件/写文件
           :w
           :w /aaa.txt 另存为/aaa.txt
           :1,3 w /2.txt
           :1 w! /root/ccc.txt 如果目标文件已经存在则需要加!号
           :r /etc/hosts
       d. 设置环境
           临时设置:
           :set nu 设置行号
           :set ic 不区分大小写
           :set ai 自动缩进
           :set list
           :set nonu 取消设置行号
           :set noic
           
           永久的环境:
           /etc/vimrc 影响所有系统用户
           ~/.vimrc 影响某一个用户
           # vim ~/.vimrc # 在家目录下新增一个文件,输入下述内容
           set ic
           set nu
           
    # vim -O /etc/hosts /etc/grub.conf ^w 按两次切换
    # vimdiff grub.conf /etc/grub.conf 对比文件,^w 按两次切换
    # vim -p /etc/hosts /etc/grub.conf ^PgUp, ^PgDn
    13、同时编辑多个文件
    #1、
    vim -o 文件1 文件2 # 水平分隔
    vim -O 文件1 文件2 # 垂直分隔
    使用ctrl + ww切换
    #2、
    vim -p /etc/hosts /etc/grub.conf
    使用 ^PgUp, ^PgDn切换
    14、文件内容对比
    # 相同文件之间差异对比,通常用于对比修改前后的差异。
    diff #文件对比(No)
    vimdiff #以vim方式打开两个文件对比,高亮显示不同的内容
    # patch实验:
    touch a.txt b.txt
    [root@localhost ~]# echo 111 >> a.txt
    [root@localhost ~]# echo 222 >> b.txt
    [root@localhost ~]# diff -u a.txt b.txt > patch.diff
    [root@localhost ~]# patch a.txt patch.diff
    patching file a.txt
    [root@localhost ~]# cat a.txt
    222
    15、vim执行过程

    ==============Vim非正常退出===============
    (1)、模拟故障:
    编辑文件的时候断开连接即可(断网或断电)
    重新连接服务器
    再次进行编辑文件
    (2)、故障报错:
    Found a swap file by the name ".vim.log.swp"
    Swap file ".vim.log.swp" already exists
    (3)、故障解决:
    删除临时文件或者先恢复内容再删除
    使用-r选项进行恢复。

     

  • 相关阅读:
    TSQL与PL/SQL的比较
    春天预防生病
    PyG(pytorchgeometric)安装
    TensorFlow 安装与环境配置(anaconda下)
    古诗今语
    多标签分类和多分类
    RequestsDependencyWarning: urllib3 (1.26.7) or chardet (2.3.0)/charset_normalizer (2.0.4) doesn't match a supported version!
    Anacoda 安装pytorch
    所有的业务系统都是在做数据的维护和读取
    解决ORA04091行触发器中访问变异表的难题
  • 原文地址:https://www.cnblogs.com/usherwang/p/14041610.html
Copyright © 2011-2022 走看看