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

时间:2023-03-09 01:24:51
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节点号对应了多个文件名,这多个文件互为硬链接,且互不影响

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

命令语法

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的快捷方式

  软链接也叫符号链接,在符号链接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。

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

命令语法

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 0 0代表目前的时间,即从现在开始到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

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

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

-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 [/|-]mode mode,精确权限匹配

-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命令】{} ;

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

范例一: 将查找出来的文件删除

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