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
		
 
	
 
                    
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号