Linux目录及文件的基本操作

Linux文件和目录操作命令

1. 目录从/开始

绝对目录:从根目录下开始的路径 cd /home/ap/was/AppServer/profiles/Dmgr01
相对目录:不从根目录开始的路径 cd bin
当前目录:./

2. linux命令提示符介绍:

[root@localhost ~]#
root         #用户
@           #at 在
localhost        #主机名
~            #家目录
#            #超级用户
$            #普通用户

3. linux帮助命令

man
--help

4. pwd #当前目录查看命令

5. 切换目录

cd ~ #进入用户家目录 或者直接 cd 回车
cd - #回到先前的目录
cd .. #返回上一级目录

6. tree #以树状结构显示目录下的内容

使用之前先检查是否安装了tree命令,如果没有安装<== yum install tree -y
为了防止树状结构乱码:LANG=en_US.UTF-8

常用参数选项:

  -a   显示所有文件,包括隐藏文件(以.开头的文件)
  -d   只显示目录
  -f    显示每个文件的全路径
  -L     参数后接数字,表示查看目录的层数,不带-L选项默认显示所有层数。
  -i    不显示树状,常与-f参数配合使用
  -F     后面可以加管道,来grep

基础范例:

-bash-4.1$ tree -L 1             #<== -L 参数后接数字,表示查看目录的层数,不带-L选项默认显示所有层数。
-bash-4.1$ tree -d /etc/        #<== -d 参数表示只显示目录
-bash-4.1$ tree -L 1 -f /boot/        #<== -f 显示内容的完美路径

-bash-4.1$ tree -L 1 -fi /boot/       #<== -i 不显示树枝

/boot
/boot/config-2.6.32-504.el6.x86_64
/boot/efi
/boot/grub
/boot/initramfs-2.6.32-504.el6.x86_64.img
/boot/initrd-2.6.32-504.el6.x86_64kdump.img
/boot/lost+found
/boot/symvers-2.6.32-504.el6.x86_64.gz
/boot/System.map-2.6.32-504.el6.x86_64
/boot/vmlinuz-2.6.32-504.el6.x86_64

-bash-4.1$ tree -L 1 -F /boot/ | grep /$   #<==过滤以斜线结尾的所有内容。
/boot/
├── efi/
├── grub/
├── lost+found/

7. mkidr #创建目录

参数选项:

  -p   递归创建目录
  -v   显示创建的过程
  -m     设置新创建目录的权限

基础范例:   

mkdir -m 333 dir2           #<== 新创建目录的权限333
mkdir -p /home/ap          #<== 递归创建目录

技巧性案例:   

同时创建多个目录及多级目录?
-bash-4.1$ mkdir -pv oldboy/{dir1,dir2}/{dir2_1,dir2_2}
-bash-4.1$ tree -d oldboy/
oldboy/
├── dir1
│   ├── dir2_1
│   └── dir2_2
└── dir2
├── dir2_1
└── dir2_2
-bash-4.1$ mkdir -p test/dir{1..5} old/{a..g}

扩展知识:
-bash-4.1$ echo {B,C}   #<==会把BC输出到屏幕
B C
-bash-4.1$ echo A{B,C}
AB AC
-bash-4.1$ echo A{,C}   #<==如果逗号前面什么都没有,可以认为是一个空字符
A AC

8. touch :创建空文件或者改变文件的时间戳属性

常用参数选项:

  -a   更改文件的最后访问时间和最后改变文件状态的时间
  -m     更改文件的最后修改时间和最后改变文件状态的时间
  -d   指定文件最后修改时间和最后访问时间
  -t    使用年月日时分.秒的方式更改文件的时间属性

范例:创建文件

-bash-4.1$ touch a.txt             ##创建文件
-bash-4.1$ touch a{1..4}.txt    

案例:更改文件的时间戳属性

[root@mylinux home]# stat a.txt 《==查看文件的时间戳属性
File: `a.txt'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 803h/2051d Inode: 530402 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-03-08 00:07:03.412940976 +0800     《==最后访问文件时间
Modify: 2020-03-08 00:07:03.412940976 +0800     《==最后修改文件时间
Change: 2020-03-08 00:07:03.412940976 +0800   《==最后改变文件状态的时间

[root@mylinux home]# touch -d 20200101 a.txt           《==指定文件最后修改时间和最后访问时间为20200101
[root@mylinux home]# stat a.txt
File: `a.txt'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 803h/2051d Inode: 530402 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-01-01 00:00:00.000000000 +0800
Modify: 2020-01-01 00:00:00.000000000 +0800
Change: 2020-03-08 00:16:56.074437951 +0800

[root@mylinux home]# touch -t 202002021230.03 a.txt     《== -t 使用年月日时分.秒的方式更改文件的时间属性
[root@mylinux home]# stat a.txt
File: `a.txt'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 803h/2051d Inode: 530402 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-02-02 12:30:03.000000000 +0800
Modify: 2020-02-02 12:30:03.000000000 +0800
Change: 2020-03-08 00:25:27.280949397 +0800

9. ls :显示目录下的内容及相关属性信息常用

参数选项:

  -l    使用长格式列出文件与目录信息 ※※※
  -a   显示目录下的所有文件,包括以"."字符开始的隐藏文件 ※※※
  -t    根据文件的最后修改时间排序,默认是以文件名排序 ※※※
  -r    相反次序排序 ※※※
  -F   在条目后加上文件类型的指定符号(/、=、@、|、*,其中的一个) ※※※
  -p   只在目录后加"/" ※※※
  -i    显示inode节点信息 ※※※
  -d   当遇到目录时,列出目录本身而非目录内的文件,并且并不跟随符号链接 ※※※
  -h   以人类可读的方式显示文件或目录大小,如1kb,234mb,2gb ※※※
  -A   列出所有文件,包括隐藏文件,但不包括"." "..",这两个目录
  -S   根据文件大小排序
  -R   递归列出所有子目录
  -x   逐行列出项目
  -X   根据扩展名排序
  -c   根据状态改变时间排序
  -u   根据最后访问时间排序
  --color=auto    给匹配的关键字加颜色 ※※※
  --full-time    以完整的时间格式输出 (个人感觉此类最直观)※※※
  --time-style=long-iso    以不同的时间格式输出(不推荐)
  --time={atime,ctime}     按不同的时间属性输出,atime表示按访问时间,ctime表示按改变时间,如果不加参数则默认最后修改时间 ※※※

范例一:将目录下面的文件都列出来(含属性与隐藏文件)

[root@dsetl tmp]# ls -al
drwx------ 2 fex 602 4096 Jan 9 11:41 keyring-XoSvfl

范例二:完整的显示文件的修改时间

[root@dsetl tmp]# ls -al --full-time
rwx------ 2 fex 602 4096 2014-01-09 11:41:48.000000000 +0800 .esd-602

范例三:查看文件的最后访问时间

[root@dsetl tmp]#ls -l --full-time --time=atime

范例四:在条目后加上文件类型的指定符号

[root@mylinux home]# ls -F
a.txt was/

※※※ ls命令输出内容解读 ※※※

[root@mylinux home]# ls -lhi
35652793 drwxr-xr-x. 4 was was 4.0K 5月 29 17:37 temp
35652809 -rw-r--r--. 1 was was 9.3K 4月 1 09:22 velocity.log
  第一列 i  node索引节点,他是文件目录的唯一标识。linux读取文件首先读取这个索引节点。
  第二列的第一字符 :  文件类型 -: 普通文件 d:目录
  第二列的后面字符 :  文件权限 ,三个为一组
  -rw-r--r--.    ### r:read w:write x:执行 -代表没有 .selinux相关的东西,查看getenforce
  -rw   文件所有者
  -r-    与文件所有者同一组的用户的权限
  r--    其他用户
  第三列:   文件的硬链接数。文件硬链接是文件的又一个入口。
  第四列:   文件属主或用户
  第五列:   文件对应的属组或用户组
  第六列:   文件的大小
  第七八九列 :   最近修改的时间
  最后一列:  文件或目录的名字

10. cp #复制文件或目录

常用选项说明:

  -p    复制时保持源文件的所有者,权限信息及时间属性
  -d    如果复制的源文件是符号链接,那么仅复制符号链接本身,而且保留符号链接所指的目录文件或目录
  -r     递归复制目录
  -a    相当于pdr ※※※
  -i     覆盖已有文件前提示用户确认
  -t     默认情况下"cp 源文件 目标",使用-t 可以颠倒顺序,"cp -t 目标 源文件"

范例:cp覆盖文件之前不提示是否覆盖的几种方法 ※※※

[root@mylinux home]# cp a.txt b.txt
cp: overwrite `b.txt'? y    《==提示用户是否覆盖
[root@mylinux home]# which cp
alias cp='cp -i'
/bin/cp

解决办法:※※※
[root@mylinux home]# \cp a.txt b.txt

范例:快速备份文件 ※※※

[root@mylinux home]# cp /etc/yum.repos.d/redhat.repo{,.back}

11. alias 别名:别名的作用:添加一些保护参数,防止人为五操作,把复杂的字符串变成一个简单的字符串

alias    #查看系统现有的别名和设置别名
unalias cp    #取消cp的别名
alias tail ='tail -fn 500'    #设置别名

范例:

[root@mylinux home]# unalias ls    #取消ls的别名
[root@mylinux home]# alias ls='ls -l --full-time'   #取消ls的别名
[root@mylinux home]# ls
total 4
-rw-r--r--. 1 root root 0 2020-02-02 12:30:03.000000000 +0800 a.txt
-rw-r--r--. 1 root root 0 2020-03-08 01:11:20.519228905 +0800 b.txt
drwx------. 26 was was 4096 2020-03-07 23:43:31.499041527 +0800 was

12. mv #移动或重命名

常用选项说明:

  -f   若目标文件已经存在,则不会询问而是直接覆盖
  -i   若目标文件已经存在,则会询问覆盖
  -n     不覆盖已存在的文件
  -t   指定mv的目标目录,适用于移动多个源文件到一个目录的情况,此时目录目录在前,源文件在后,

13. rm #删除

常用选项说明:

  -r   强制删除。忽略不存在的文件,不提示确认 ※※※
  -i   删除前提示需要确认
  -r   递归删除目录及其内容 ※※※

14. rmdir  #删除空目录

15. ln  #硬链接与软连接

常用选项说明:

  -s      创建软连接 ※※※
  无参数    创建硬链接 ※※※

硬链接是通过索引节点来进行连接,多个文件执行同一个索引节点,这种情况的文件被称为硬链接。
硬链接(hard link):A是B的硬链接(A和B都是文件名),则A的目录项中的inode节点号与B的目录项中的inode节点号相同。
即一个inode节点对应两个不同的文件名,两个文件名指向同一个文件,A和B对文件系统来说是完全平等的。如果删除了其中一个,对另外一个没有影响。
每增加一个文件名,inode节点上的链接数增加一,每删除一个对应的文件名,inode节点上的链接数减一,直到为0,inode节点和对应的数据块被回收。
注:文件和文件名是不同的东西,rm A删除的只是A这个文件名,而A对应的数据块(文件)只有在inode节点链接数减少为0的时候才会被系统回收。

创建命令 语法: ln 源文件 硬链接文件
[root@localhost oldboy]# ln oldboyfile oldboyfile_hard_link
硬链接小结:
1.具有相同inode节点号的多个文件是互为硬链接文件。硬链接文件的inode是相同的。
2.删除硬链接文件或源文件任意之一,文件实体并未被删除。(只是把链接的指向删除了)-------》找回源文件按或硬链接文件 ln oldboyfile_hard_link oldboyfile
3.只有把源文件和源文件对应的所有链接文件删除,文件实体才会被删除。
4.没有链接指向的文件会被系统回收。
5.硬链接文件就是文件的另一个入口,相当于超市的前门后门。
6.可以创建硬链接文件,来防止重要的文件被误删除。
7.可以通过执行命令 “ln 源文件 硬链接文件” ,即创建硬链接。
8.硬链接文件rm 命令删除。
9.硬链接文件相当于文件的入口(相当于超市的前后门)
10.当对应硬链接数量为0(i_link)时,文件就会被回收。i_link的查看方法ls -lhi,查看结果第三列,就是硬链接数量
11.目录的硬链接不允许ln ※※※※※※※※※※※※

软链接(soft link):A是B的软链接(A和B都是文件名),A的目录项中的inode节点号与B的目录项中的inode节点号不相同,
A和B指向的是两个不同的inode,继而指向两块不同的数据块。但是A的数据块中存放的只是B的路径名(可以根据这个找到B的目录项)。
A和B之间是“主从”关系,如果B被删除了,A仍然存在(因为两个是不同的文件),但指向的是一个无效的链接。

软链接 创建命令语法 : ln -s 源文件 软链接文件
ln -s oldboyfile oldboyfile_hard_link
软链接小结:
1.软链接类似于WINDOW的快捷方式。linux 中的软链接时特殊的文件,文件类型是l
2.软链接类似一个文件文件,里面存放的是源文件的路径,指向源文件实体。
3.删除源文件,软连接文件依然存在,但是无法访问指向的源文件路径内容了。
4.失效的时候一般是白字红底闪烁提示。
5.执行命令 ln -s 源文件 软链接文件,即可创建软连接文件。
6.软连接和源文件是不同类型的文件,也是不同的文件,inode号也是不同的。
7.软链接文件rm 命令删除。
8.目录的软连接可以ln -s

区别:
使用限制上:
硬链接:
a.不能对目录创建硬链接,原因有几种,最重要的是:文件系统不能存在链接环(目录创建时的".."除外,这个系统可以识别出来),
存在环的后果会导致例如文件遍历等操作的混乱(du,pwd等命令的运作原理就是基于文件硬链接,顺便一提,ls -l结果的第二列也是文件的硬链接数,即inode节点的链接数)
b:不能对不同的文件系统创建硬链接,即两个文件名要在相同的文件系统
c:不能对不存在的文件创建硬链接,由原理即可知原因。

软链接:
a.可以对目录创建软链接,遍历操作会忽略目录的软链接。
b:可以跨文件系统

16. find : 按照文件属性去查找

  1).文件名:
    find 查找的目录 -name '*.log' ## -name 根据文件名查找(精确查找)
    find 查找的目录 -iname ## -name 根据文件名查找,但是不区分大小写
  2).文件大小:
    find 查找的目录 -size +10M ##查找大于10M的文件
    find 查找的目录 -size 1000c ##查找等于1000C的文件
  3).文件的类型:
    find . -type f/d/
  4).文件的时间:
    find . -type f -mtime +7 -exec rm -f {} \; ##-mtime 时间 +7 ##7天之前 -7 最近7天
    find . -type f -mtime +7 | xargs ls -l ##同样效果
  5).文件权限
    find /opt -perm 777 ##查找/opt目录下 权限为 777的文件
  6).指定时间内修改的文件
    find . -atime -2 ##查找两天内受到访问的文件
    find /date/ -mtime -5 ##查找修改时间在5天内的文件
  7).文件属主
    find . -user was ##查找用户属was的文件
    find . -nouser ##查找没有对应任何用户的文件
  8).反向查找
    find . -type d ##查找文件类型为目录的
    find . ! type d ##查找文件类型不为目录的
  9).用户组
    find . -group was ##查找用户组为was的文件
    find . -nogroup ##查找没有对应任何用户组的文件

扩展知识:将找到的文件移动到指定位置的几种方法:!!!!!!!!!

  方法1:
    [root@mylinux home]# find . -name '*.txt' | xargs -i mv {} Dir2    <==xargs的-i参数使得{}可替代find找到的内容
  方法2:
    [root@mylinux home]# find . -name '*.txt' | xargs mv -t Dir2/    <==mv -t可以颠倒源文件和目录
  方法3:
    [root@mylinux home]# mv `find . -name '*.txt'` Dir2/    <==使用``优先执行命令

  扩展知识: find 一般结合和exec和xagrs来使用

    两者的区别:
      -exec
        该参数是逐个将查找到的结果文件传递给后面的参数执行,如果文件比较多则执行的效率比较低;
        文件名中有空格等特殊字符也照常处理 ※※※
      -xargs
        该命令是将查找到的结果一次性传递给后面的命令来执行,命令的执行效率高,可以使用-n 参数控制一次传递文件的个数
        特殊的文件名需要处理(find . -name "*edu*" -print0 | xargs -0 ls -lh)

17. xargs:将标准输入转换成命令行

常用选项说明:

  -n   指定每行的最大参数值n,可以将标准输入的文件划分为多行
  -d   自定义分隔符
  -i    使得{}可替代find找到的内容
  -p   提示用户确认是否执行后米的命令
  -0   用null代替空格作为分割符,配合find命令的 -print0 选项的输出使用

范例:

  [root@mylinux Dir2]# cat a.txt
  a b c d f g s d f h d
  [root@mylinux Dir2]# xargs < a.txt
  a b c d f g s d f h d
  [root@mylinux Dir2]# xargs -n 3 < a.txt
  a b c
  d f g
  s d f
  h d

18. rename: 重命名文件 ※※※

范例:批量更改文件名称

[root@mylinux Dir2]# ls -al
total 8
drwxr-xr-x 2 root root 4096 Mar 8 16:58 .
drwxr-xr-x. 4 root root 4096 Mar 8 16:30 ..
-rw-r--r-- 1 root root 0 Mar 8 16:57 stu_102999_1_finished.jpg
-rw-r--r-- 1 root root 0 Mar 8 16:57 stu_102999_2_finished.jpg
-rw-r--r-- 1 root root 0 Mar 8 16:57 stu_102999_3_finished.jpg
-rw-r--r-- 1 root root 0 Mar 8 16:57 stu_102999_4_finished.jpg
-rw-r--r-- 1 root root 0 Mar 8 16:57 stu_102999_5_finished.jpg
-rw-r--r-- 1 root root 0 Mar 8 16:57 stu_102999_6_finished.jpg
-rw-r--r-- 1 root root 0 Mar 8 16:57 stu_102999_7_finished.jpg
-rw-r--r-- 1 root root 0 Mar 8 16:57 stu_102999_8_finished.jpg
-rw-r--r-- 1 root root 0 Mar 8 16:57 stu_102999_9_finished.jpg

[root@mylinux Dir2]# rename "_finished" "" *    <==将所有的_finished替换为空 ※※※
[root@mylinux Dir2]# ls -al
total 8
drwxr-xr-x 2 root root 4096 Mar 8 16:58 .
drwxr-xr-x. 4 root root 4096 Mar 8 16:30 ..
-rw-r--r-- 1 root root 0 Mar 8 16:57 stu_102999_1.jpg
-rw-r--r-- 1 root root 0 Mar 8 16:57 stu_102999_2.jpg
-rw-r--r-- 1 root root 0 Mar 8 16:57 stu_102999_3.jpg
-rw-r--r-- 1 root root 0 Mar 8 16:57 stu_102999_4.jpg
-rw-r--r-- 1 root root 0 Mar 8 16:57 stu_102999_5.jpg
-rw-r--r-- 1 root root 0 Mar 8 16:57 stu_102999_6.jpg
-rw-r--r-- 1 root root 0 Mar 8 16:57 stu_102999_7.jpg
-rw-r--r-- 1 root root 0 Mar 8 16:57 stu_102999_8.jpg
-rw-r--r-- 1 root root 0 Mar 8 16:57 stu_102999_9.jpg

19. basename 显示文件名或目录名 ※※※

范例:


[root@mylinux dir1]# basename /date/dir1/file1.txt
file1.txt
[root@mylinux dir1]# basename /date/dir1/file1.txt .txt
file1

20. dirname 显示文件或目录名称 ※※※

范例:


[root@mylinux dir1]# dirname /date/dir1/file1.txt <==只显示文件所在的路径
/date/dir1

21. file 显示文件的类型

范例:


[root@mylinux date]# file dir1/
dir1/: directory

22. md5sum 计算和校验文件的MD5值

常用选项说明:


  -c      从指定文件中获取MD5校验值,并进行校验 ※※※
  --status    校验文件使用的参数,不输出任何信息,可以通过命令的返回值来判断

范例:

[root@mylinux Dir2]# md5sum oldboy.txt    <==得到文件的MD5值
c188b0ec73677745f5c78bf5b2fb96d3   oldboy.txt    <==第一部分:文件的md5值,第二部分,文件的名称

[root@mylinux Dir2]# md5sum oldboy.txt >md5.log    <==先生成校验文件
[root@mylinux Dir2]# md5sum -c md5.log        <== -c 校验MD5值
oldboy.txt: OK
[root@mylinux Dir2]# md5sum --status -c md5.log     <==不输出任何信息,可以通过命令的返回值来判断
[root@mylinux Dir2]# echo $?
0

23. du 计算文件或目录的容量

常用选项说明:

  -h  人性化显示容量信息

       -s        仅显示总容量

范例:

[user@mylinux STATUS]$ du -h *
196K    a.txt
8.0K    PX_Monitor
8.0K    status.sh
44K    SystemCatalog

 


 

 

 

 

 

 

 

 



posted @ 2020-06-04 16:30  quanscd  阅读(556)  评论(0编辑  收藏  举报