zoukankan      html  css  js  c++  java
  • Linux基础篇学习——文件目录常用管理命令mkdir,cat,more,less,ln,file,cp,find,split,mv

    mkdir 创建目录

    -p 递归创建目录
    -v 显示创建信息

    [root@zycentos7 ~]# mkdir -p {mylinux/{bin,conf,lib,logs,webapps/{docs,examples},work},test/test1}
    [root@zycentos7 ~]# tree .
    .
    ├── mylinux
    │   ├── bin
    │   ├── conf
    │   ├── lib
    │   ├── logs
    │   ├── webapps
    │   │   ├── docs
    │   │   └── examples
    │   └── work
    ├── test
    │   └── test1
    

    cat,more,less 文件查看

    cat 将文件的内容打印到标准输出

    参数 含义
    -n 对所有输出的行数编号
    -b 对输出的非空白行数编号
    -s 当遇到连续1+空白行,只输出一行
    -E 在每行结束处显示$
    -T 将Tab显示为^I

    more,less 逐屏显示内容

    参数 含义
    -num 一次显示的行数
    -f 计算时按实际行数
    -p 先清屏再显示

    less和more都可以按空格翻页
    less可以按键盘上下方向键显示上下内容,more不能
    less不必读整个文件,加载速度会比more更快
    less退出后shell不会留下刚显示的内容,而more会

    ln 创建链接文件,默认创建硬链接

    请点击了解inode知识

    硬链接 通过索引节点进行链接

      一个inode节点号对应了多个文件名,这多个文件互为硬链接,且互不影响
    在这里插入图片描述

    命令语法

    ln TARGET LINK_NAME
    

    示例

    注意先TARGET,再LINK_NAME
    可以看到硬链接的inode节点相同

    [root@localhost ~]# touch f1
    [root@localhost ~]# ln f1 f2
    [root@localhost ~]# ln f3 f1
    ln: failed to access ‘f3’: No such file or directory
    [root@localhost ~]# ls -li f*
    16838551 -rw-r--r--. 2 root root 0 Oct  6 11:18 f1
    16838551 -rw-r--r--. 2 root root 0 Oct  6 11:18 f2
    

    作用

      允许一个文件拥有多个有效路径名,通过建立硬链接到重要文件,防止“误删”。

    硬链接知识小结

      1.具有相同Inode节点号的多个文件互为硬链接文件。
      2.互为硬链接对文件系统来说是完全平等的,删除其中任何一个都不会影响另一个的访问。
      3.只有删除了源文件及所有对应的硬链接文件,文件实体才会被删除。
      4.当所有硬链接文件及源文件被删除后,再存放新的数据会占用这个文件的空间,或者磁盘fsck检查时删除的数据被系统回收。
      5.硬链接文件是文件的另一个入口。
      6.可以通过给文件设置硬链接文件,来防止重要文件被误删。
      7.对于静态文件(没有进程正在调用的文件)来说,当对应硬链接数位0(i_link),文件就被删除。 i_link的查看方法(ls -l第三列内容)

    文件真正的删除条件

      只有当最后一个连接被删除后,文件的数据块目录的连接才会被释放,即文件真正的删除条件是与之相关的所有硬链接文件均被删除

    软链接 类似于Windows的快捷方式

      软链接也叫符号链接,在符号链接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
    在这里插入图片描述

    命令语法

    ln -s TARGET LINK_NAME
    

    示例

    注意先TARGET,再LINK_NAME

    [root@localhost ~]# touch f1
    [root@localhost ~]# ln -s f1 f2
    [root@localhost ~]# ln -s f3 f1
    ln: failed to create symbolic link ‘f1’: File exists
    

    不能给两个都不存的文件创建软连接

    软链接知识小结

      1.软链接的源文件和链接文件inode节点不相同,文件类型不同,它们指向不同的数据块。
      2.软链接是“”主从”关系,“主”被删除了,“从”仍然存在(因为是两个不同的文件),但指向的是一个无效的连接。
      3. 软链接类似windows的快捷方式。
      4. 软链接类似一个文本文件,里面存放的是源文件的路径,指向源文件实体。
      5. 软链接失效的时候一般是红字白底闪烁提示。


    目录链接

    1.对于目录,不可以创建硬链接,但可以创建软链接。
    2.目录的硬链接不能跨越文件系统。
    3.每个目录下面都有一个硬链接“.”号,和对应上级目录的硬链接“..”。
    4.在父目录里面创建一个子目录,父目录的链接数增加1(子目录里都有..来指向父目录)。但是在父目录里创建文件,父目录的链接数不会增加。


    file 显示文件类型

    file namefile
    

    cp 拷贝文件或目录

    命令语法

    cp [OPTION]... [-T] SOURCE DEST
    cp [OPTION]... SOURCE... DIRECTORY
    cp [OPTION]... -t DIRECTORY SOURCE...
    

    常用 cp [OPTION]... SOURCE... DIRECTORY

    OPTION

    -f 强制覆盖目标文件
    -i 交互式复制,即覆盖之前提醒用户确认 普通用户使用-i增加交互提示,root用户默认提示
    -R,-r递归复制目录

    -p 复制的时候保留源文件目录属性,包括所有者、所属组、权限与时间
    -P --parents,保留源文件或目录的路径,此路径可以是绝对路径或相对路径,且目的目录必须已经存在
    -d 复制符号链接文件本身,而其指向的源文件
    -a -dR --preserve=all, archive,用于实现归档

    练习

    请点击了解通配符知识

    1.复制/etc目录下,所有以m开头,以非数字结尾的文件或目录至/tmp/magedu.com目录cp -r /etc/m*[^0-9] /tmp/magedu.com
    具体过程

    [root@localhost ~]# cp -r /etc/m*[^0-9] /tmp/magedu.com
    cp: target ‘/tmp/magedu.com’ is not a directory
    [root@localhost ~]# mkdir /tmp/magedu.com
    [root@localhost ~]# cp -r /etc/m*[^0-9] /tmp/magedu.com
    [root@localhost ~]# ls /tmp/magedu.com/
    machine-id  makedumpfile.conf.sample  mke2fs.conf  modules-load.d  mtab    my.cnf.d
    magic       man_db.conf               modprobe.d   motd            my.cnf
    

    DIRECTORY必须已存在(cp [OPTION]... SOURCE...DIRECTORY)
    2.复制/usr/share/man目录下,所有以man开头,后跟一个数字结尾的文件或目录至/tmp/man/目录下cp -r /usr/share/man/man[0-9] /tmp/man/

    3.复制/etc目录下,所有以.conf结尾,且以m,n,r,p开头的文件或目录至/tmp/conf.d/目录下cp -r /etc/[mnrp]*.conf/tmp/conf.d


    find 实时查找工具

    命令语法

    find [PATH] [OPTION] [action]
    

    OPTION

    与时间有关的选项 与当前系统时间有关

    -mtime n 在n天之前的【一天之内】被修改过内容的文件
    -mtime +n 在n天之前(不含n天本身)被修改过内容的文件
    -mtime -n 在n天之内(含n天本身)被修改过内容的文件
    -newer file 列出比file新的文件
    范例一: 将过去系统上面24小时内有修改过内容(mtime)的文件列出
    find / -mtime 00代表目前的时间,即从现在开始到24小时前有变动过内容的文件都会被显示
    范例二: 找出大于等于 5 天前被更动过的文件档名
    find /var -mtime +4
    范例三: 找出4 天内被更动过的文件档名
    find /var -mtime -4
    范例四: 寻找/etc下面的文件,如果文件日期比/etc/passwd新就列出
    find /etc -newer /etc/passwd-newer可以用于辨别两个文件之间的新旧关系
    范例五: 将3天前那一天的24小时内有修改过内容(mtime)的文件列出
    find / -mtime 3
    在这里插入图片描述

    与使用者或用户组名称有关的参数

    -uid n  UID
    -gid n  GID
    -user username 按文件
    属主
    来查找
    -group groupname 按文件
    所属组
    来查找
    -nouser 查找无有效属主的文件
    -nogroup 查找无有效所属组的文件
    范例一: 查找/home下面属于zhao的文件
    find /home -user zhao
    范例二: 查找系统中不属于任何人的文件
    find / -nouser

    与文件权限及名称有关的参数

    -name filename 按名字查找
    -type TYPE 按文件类型查找

    符号 文件类型
    f 普通文件
    d 目录文件
    l 符号链接文件
    b 块设备文件
    c 字符设备文件
    p 管道文件
    s 套接字文件

    -perm 按权限查找(待补充)
    -perm [/|-]modemode,精确权限匹配
    -perm mode 搜寻文件权限等于mode的文件
    -perm /mode 任何一类用户(u,g,o)的权限中的任何一位(r,w,x)符合条件即满足 9位权限之间存在“或"关系
    -perm -mode 每一类用户(u,g,o)的权限中的每一位(r,w,x)同时符合条件即满足 9位权限之间存在“与”关系

    范例一: 找出名称为passwd的文件
    find / -name passwd
    范例二: 找出文件名包含了passwd这个关键词的文件
    find / -name "*passwd"利用 -name "*key" 可以搜寻文件名包含关键词的文件
    范例三: 找出 /run 目录下,文件类型为Socket的文件
    find /run -type s

    额外可进行的动作

    -exec command 对匹配的文件执行该参数所给出的shell命令,形式为command {} ;注意{}与;之间有空格
    -ok 与exec作用相同,区别在于,在执行命令之前,都会给出提示,让用户确认是否执行
    -print 将结果输出到标准输出
    -print0 不换行输出,用于归档 find命令在查找到有空格的文件名的文件时,输出内容将被认为是多个文件

    find 【路径】【参数】【内容】-exec 【shell命令】{} ;

    在这里插入图片描述

    范例一: 将查找出来的文件删除
    find /opt -name filename -exec rm -rf {} ;
    范例二: 列出查找的文件的大小
    find /etc -type d -exec du -h {} ;
    范例三: 在执行命令之前,给出提示

    [root@localhost opt]# touch file1
    [root@localhost opt]# find -name file1 -ok rm -rf {} ;
    < rm ... ./file1 > ? y
    

    -exec 后面的shell指令不支持命令别名ll,需要使用ls -l

    其他选项

    -depthfind filename -depth加-depth先处理目录下的子内容,再处理目录本身,否则相反
    -mindepthfind / -mindepth # -name passwd从第#层目录下开始查找
    -maxdepthfind / -maxdepth # -name passwd查找到第#层目录

    -prune在当前指定的目录下查找
    -path pattern 文件名与shell模式匹配
    -size [+/-]# 指定查找文件的大小

    组合测试

    符号 文件类型
    -a
    -o
    -not,-!

    范例一 找出/tmp目录下属主为非root的所有文件

    [root@localhost tmp]# find /tmp -! -user "root"
    /tmp/file1
    [root@localhost tmp]# ls -l /tmp/file1
    -rw-r--r--. 1 zhao root 82 Oct 13 16:36 /tmp/file1
    

    范例二 找出/tmp目录下文件名中不包含fstab字符串的文件

    [root@localhost tmp]# find /tmp -not -name "*fastb*"
    /tmp
    /tmp/.X11-unix
    /tmp/.XIM-unix
    /tmp/.Test-unix
    /tmp/.font-unix
    /tmp/.ICE-unix
    /tmp/file1
    /tmp/file2
    

    范例三 找出/tmp目录下属主为非root,而且文件名不包含fstab字符串的文件

    [root@localhost tmp]# find /tmp -! -name "*fastb*" -a -! -user root
    /tmp/file1
    

    综合练习

    1)查找/var目录下属主为root,且属组为mail的所有文件或目录
    find /var -user root -a -group mail -ls
    2)用两种方法查找/usr目录下不属于root, bin或hadoop的所有文件或目录
    find /usr -not -user root -a -not -user bin -a -not -user hadoop
    find /usr -not ( -user root -o -user bin -o -user hadoop ) -ls
    3)查找/etc目录下最近一周内其内容修改过,且属主不是root用户也不是hadoop用户的文件或目录
    find /etc -mtime -7 -a -not ( -user root -o -user hadoop ) -ls
    find /etc -mtime -7 -a -not -user root -a -not -user hadoop -ls
    4)查找当前系统上没有属或属组,且最近一周内曾被访问过的文件或目录
    find / ( -nouser -o -nogroup ) -atime -7 -ls
    5)查找/etc目录下大于1M且类型为普通文件的所有文件
    find /etc -size +1M -type f -exec ls -lh {} ;
    6)查找/etc目录下所有用户都没有写权限的文件
    find /etc -not -perm /222 -type f -ls
    7)查找/etc目录至少有一类用户没有执行权限的文件
    find /etc -not -perm -111 -type f -ls
    8)查找/etc/init.d/目录下,所有用户都有执行权限,且其它用户有写权限的所有文件
    find /etc -perm -113 -type f -ls
    9)查找/etc/下,除/etc/sane.d目录的其它所有.conf后缀的文件
    find /etc/ -path /etc/sane.d -a -prune -o -name "*.conf"
    10)查找/etc/下,除/etc/sane.d目录和/etc/fonts目录的其他所有.conf后缀的文件
    find /etc/ −path /etc/sane.d −o −path /etc/fonts -a -prune -o -name "*.conf"


    split 分割文档

    split命令用于将一个文件分割成数个。该指令将大文件分割成较小的文件,在默认情况下将按照每1000行切割成一个小文件。

    命令语法

    split [OPTION]... [INPUT [PREFIX]]
    

    PREFIX:代表前导符,可作为切割文件的前导文件

    OPTION

    -b 每一输出文档的大小,单位为 byte
    -C 每一输出文档中,单行的最大 byte 数
    -a 指定数字的长度
    -d 使用数字作为分割文件的文件名后缀,默认是2位长度 与-a配合使用,指定后缀长度
    -l 为每一个分割文件输出的行数

    实例

    [root@localhost tmp]# dd if=/dev/zero of=date.file bs=10k count=1
    1+0 records in
    1+0 records out
    10240 bytes (10 kB) copied, 0.000216012 s, 47.4 MB/s
    [root@localhost tmp]# split -b 1k date.file
    [root@localhost tmp]# ls
    date.file  sys  vm  xaa  xab  xac  xad  xae  xaf  xag  xah  xai  xaj
    

    mv 变更存储位置或文件/目录改名

    mv命令是move的缩写,可以用来移动文件或者将文件改名

    命令语法

    mv [OPTION]... [-T] SOURCE DEST
    mv [OPTION]... SOURCE... DIRECTORY
    mv [OPTION]... -t DIRECTORY SOURCE...
    

    常用 mv [OPTION]... SOURCE... DIRECTORY

    OPTION

    -b 当目标文件存在时,先备份覆盖
    -f 当目标文件存在时,强制覆盖
    -i 当目标文件存在时,提示是否覆盖 普通用户使用-i增加交互提示,root用户默认提示
    -t指定目标指定文件

  • 相关阅读:
    [翻译]windows下 连接到 bitnami的phpmyadmin
    Redmine 和GitBlit仓库服务器整合
    Xshell出现要继续使用此程序必须应用到最新的更新或使用新版本
    Codeigniter 列出所有控制器和控制器的方法(类似路由列表)
    FastStone Capture 文件名设置小记录
    [转]sourceforge文件下载过慢
    Cacti 添加 CPU 监听
    Cacti 发送警告邮件
    尝试让Virtualbox的Ubuntu可以调整分辨率
    Html5+离线打包创建本地消息
  • 原文地址:https://www.cnblogs.com/zhaoya2019/p/12576852.html
Copyright © 2011-2022 走看看