Linux基础篇学习——文件目录常用管理命令mkdir,cat,more,less,ln,file,cp,find,split,mv

By | 2020年3月27日

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指定目标指定文件

请关注公众号获取更多资料

发表评论