zoukankan      html  css  js  c++  java
  • 【Linux命令】《鸟哥Linux基础》第六章 Linux文件与目录管理

    第六章 Linux文件与目录管理

    6.1 目录操作

    .  当前目录
    .. 上层目录
    -  前一个工作目录
    ~  当前用户的家目录
    ~account   account用户的家目录
    
    cd 绝对路径or相对路径   切换到这个指定路径
    cd   				 不加任何路径,是回到当前家目录,等于cd ~  
    cd - 				 返回刚刚的上个目录
    
    
    pwd		直接就能显示当前目录
    pwd -P  显示链接文件的真身
    
    
    mkdir test     				创建test文件夹,默认权限
    mkdir -m 711 test2   		创建一个test2文件夹,权限为711
    mkdir -p test/test1/test2   递归创建子文件夹
    
    
    rmdir test  				直接删掉空文件夹,如果test有内容则无法删除
    rmdir -r test 				直接删掉test,不管test内有无内容
    rmdir -p test/test1/test2 	递归删除,包括空文件夹
    

    PATH

    PATH="${PATH} : /root"   将/root文件夹加入到PATH路径中
    

    从安全角度考虑,本目录(.)最好不要放到PATH中

    6.2 文件与目录管理

    ls cp rm mv basename dirname

    ls 显示文件属性
    
    ls [-aAdfFhilnrRSt] 文件或目录名称      
    		-a  全部文件,包括隐藏文件
    		-d  仅列出目录本身,而不是列出目录内的文件数据
    		-l  详细信息显示,包含文件的属性与权限等数据
    
    ls [--color={never,auto,always}] 文件或目录名称
    		--color=never  不要依据文件特性给与颜色显示
    		--color=auto   你自己看着显示
    		--color=always 要依据文件特性给与颜色显示
    		
    ls [--full-time] 文件或目录名称
    		--full-time 以完整时间输出,年月日时分
    		--time={atime,ctime}  输出access时间(atime),或改变权限属性的时间(ctime)
    
    cp  复制文件或目录
    
    cp [-adfilprsu] 源文件source  目标文件directory 
    		-a  相当于-dr --preserve=all  整个数据特性完全一模一样
    		-d  若源文件为链接,则复制链接而非文件本身
    		-r  递归复制,用于目录的复制
    		-i  若目标文件已经存在,覆盖时会先询问操作的进行
    		-p  连同文件的属性(权限、用户、时间)一起复制过去,而非使用默认属性,备份时常用
    		-l  进行硬链接的链接文件建立,而非复制文件本身
    		-s  复制成符号链接文件,也就是快捷方式文件
    		-u  当destination比source旧,才更新destination;或者destination不存在,才会复制过来,备份常用
    		--preserve=all  除了-p的权限相关参数外,还加入SELinux的属性,links、xattr等也复制
    
    
    cp [options] source1 source2 source3 ... directory   
    	这里需要注意,如果源文件有两个以上,最后一个目标文件一定得是目录
    
    
    拷贝之前了解:
    是否需要完整保留源文件的信息
    源文件是否为符号链接文件
    原文件是否为特殊文件,如FIFO、Socket
    源文件是否为目录
    
    rm  删除文件或目录
    
    rm [-fir] 文件名或目录名
    	-f  就是force,忽略不存在的文件,不会出现警告信息
    	-i  交互模式,删除前询问是否删除
    	-r  递归删除,极其危险,慎用!
    	
    rm    非空文件夹    会提示说里面有内容,删不掉
    rm -r 非空文件夹    按照提示删除就行了
    
    
    m -r 文件夹      命令前面加个反斜线,可以忽略掉alias的指定选项
    
    rm ./-aaa-        删除一个-开头的文件,加上./表示-aaa-是本目录下的文件
    rm -- -aaa-       此法也可以删除-aaa-
    
    mv  移动文件或目录,或重命名
    
    mv [-fiu] source destination
    		-f  fource强制的意思,如果目标文件已经存在,不会询问而直接覆盖
    		-i  若目标文件已经存在,询问是否覆盖
    		-u  若目标文件已经存在,且source比较新,才会更新
    
    mv 源文件a.txt 目标文件b.txt  实现将单一文件a.txt重命名为另一文件b.txt
    
    mv [option] source1 source2 source3 ... directory  多个文件移到目录中
    
    获取路径的文件名与目录名
    
    basename /etc/sysconfig/network    获取最后的文件名network
    
    dirname /etc/sysconfig/network     获取最开始的目录名/etc/sysconfig/
    

    6.3 文件内容查看

    cat tac nl more less head tail od touch

    cat 从第一行开始显示文件内容
    
    cat [-AbEnTv] 
    		-A  相当于-vET,可列出一些特殊字符而不是空白而已
    		-b  列出行号,仅针对非空白行做行号展示,空白行不标行号
    		-E  将结尾的换行符$显示出来
    		-n  打印行号,连同空白行也会有行号,与-b不同
    
    tac 从最后一行开始显示,是cat倒着写
    
    tac 文件名
    
    nl 显示的时候,同时显示行号
    
    nl [-bnw] 文件名
    		-b  指定行号指定的方式,主要有两种
    			-b a 不论是否为空行,列出行号
    			-b t 如果有空行,空的那行不要列出行号(默认值)
    		-n  列出行号表示方法,主要3种
    			-n ln 行号在屏幕的最左方显示
    			-n rn 行号在自己栏位的最右方显示,且不加0
    			-n rz 行号在自己栏位的最右方显示,且加0
    		-w  行号栏位占用的字符  
    			-w 3 表示默认栏位是3位
    		
    
    more 一页一页显示文件内容,翻页查看
    
    可用按键:
    		space: 向下翻一页
    		Enter: 向下翻一行
    		/字符串:在这个显示的内容当中,向下查找字符串这个关键词
    		:f    :立刻显示出文件名以及目前显示的行数
    		q:    :立刻离开more,不再显示该文件内容
    		b或者[ctrl]-b :往回翻页,这个操作只对文件有用,对管道无用
    
    less 可以往前翻页
    
    可用按键:
    		space:     向下翻一页
    		[pagedown]:向下翻一页
    		[pageup]:  向上翻一页
    		/字符串:    向下查找字符串这个关键词
    		?字符串:    向上查找字符串这个关键词
    		n:  重复前一个查找(与/或?命令有关)
    		N:  反向重复前一个查找(与/或?命令有关)
    		g:  前进到这个数据的第一行
    		G:  前进到这个数据的最后一行(注意大小写)
    		q:  离开less
    
    head 只看前面几行
    
    head [-n number] 文件
    		-n  后面接数字,代表显示几行 
    		-n 10 显示前10行(默认)
    		-n -100 如果数字是负数,表示后面的100行都不打印,只打印前面的所有内容
    
    tail 只看后面几行
    
    tail [-n number] 文件
    		-n  后面接数字,代表显示几行
    			-n 10   只显示后10行(默认)
    			-n 20   只显示后20行
    			-n +100 从100行以后的内容全部列出
    		-f  表示持续刷新显示后面所接文件中的内容,要等到按下Ctrl+c才结束;有数据写入时就显示
    
    显示文件的第11到第20行(先取前20行,在此基础上再取后10行)
    head -n 20 filename | tail -n 10
    
    列出正确的行号,显示文件的第11到第20行(先给全文添加行号,取前20行,在此基础上再取后10行)
    cat -n filename | head -n 20 | tail -n 10
    
    od 以二进制的方式读取文件内容
    
    od [-t TYPE] 文件
    		-t a        利用默认的字符来输出
    		-t c		使用ASCII字符输出
    		-t d[size]	利用十进制(decimal)输出数据,每个整数占size字节
    		-t f[size]	利用浮点数(floating)输出数据,每个数占size字节
    		-t o[size]	利用八进制(octal)输出数据,每个整数占size字节
    		-t x[size]	利用十六进制(hexadecimal)输出数据,每个整数占size字节
    
    echo password | od -t oCc  自助查询password这几个字母对应的ASCII对照
    

    文件3个时间:

    修改时间 mtime 文件内容改变 (默认ls列出这个修改时间mtime)
    状态时间 ctime 权限和属性改变
    读取时间 atime 被新访问了

    touch 修改文件时间或创建新文件
    
    touch filename  创建了一个空文件
    
    
    touch [-acdmt] 文件
    		-a 仅自定义atime
    		-c 仅修改文件的时间,若该文件不存在则不建立新文件
    		-d 后面可以接欲自定义的日期而不用目前的时间,或者--data="日期或时间"
    		-m 仅自定义mtime
    		-t 后面可以接欲自定义的日期而不用目前的时间, 格式为[YYYYMMDDhhmm]
    
    
    touch -d "2 days ago" filename   将atime和mtime改成2天前,ctime未变
    
    touch -t 202005251629 filename  将atime和mtime改成指定时间,ctime未变
    

    6.4 文件与目录的默认权限与隐藏权限

    将root的~/.bashrc文件复制给dj:
    cp     ~/.bashrc  ~dj/bashrc    复制文件
    chown  dj:dj      ~dj/bashrc    修改属性
    
    
    建立一个目录,所有人都可以访问目录中的文件,但是只有dj用户可以修改这些文件:
    应该建立的文件夹权限:drwxr-xr-x  755
    mkdir  /tmp/dirname            建立目录
    chown  -R  dj:dj  /tmp/dirname 修改属性
    chmod  -R  755  /tmp/dirname   修改权限
    
    umask 负责制定当前用户在建立文件或目录时候的默认权限
    
    umask  得到0022,与普通权限相关的是后三个数字022,拿掉0,2,2
    umask -S  得到以符号形式显示的权限:u=rwx,g=rx,o=rx
    
    umask 002 只将组外人拿掉一个写权限
    
    chattr 在ext2 ext3 ext4的linux传统文件系统上面可以生效,xfs文件系统对其支持不全[Aadis]
    
    chattr [+-=] [ASacdistu] 文件或目录名称
    			a  这个文件只能追加数据,不能删除也不能修改,
    			   只有root能设置该属性
     			i  可以让一个文件不能被删除、改名,设置链接,也无法写入或
     			   新增数据,有利于系统安全,只有root能修改该属性
     			s  如果改文件被删除,就会完全从硬盘删除,误删完全无法恢复
     			u  与s相反,如果文件被删除,数据内容还存在磁盘中,可以用来恢复该文件
    
    lsattr [-adR] 文件或目录
    			-a 将隐藏文件的属性也显示出来
    			-d 如果接的是目录,仅列出目录本身的属性,而非目录内的文件名
    			-R 连同子目录一同列出来
    
    chattr +aiS attrtest  	使用chattr设置属性
    lsattr attrtest  		使用lsattr查看属性
    

    特殊权限介绍:

    SUID 不可针对目录
    		仅对二进制程序有效,不可用在shell脚本上,
    		执行者对于该程序需要有x的可执行权限,
    		本权限只在执行程序过程中有效,
    		执行者将具有该程序拥有者的权限
    	例如:一般用户可以修改自己的密码
    		只有root用户可以读取保存密码的/etc/shadow文件内容,并强制写入数据
    		又因/usr/bin/passwd命令的权限是-rwsr-xr-x,文件所有者权限有s
    		dj用户可以调用passwd命令,执行过程中拥有root所有权限,
    		成功向/etc/shadow文件写入数据
    		
    		cat 命令没有这个s,因此无法在调用cat过程中享有root的权限,
    		因此无法使用cat查看/etc/shadow文件内容
    		
    
    SGID 既可以针对文件,又可针对目录
    	 对于文件来说:
    		对二进制程序有用
    		程序执行着对于该程序来说,需要具备x的权限
    		执行者在执行过程中获得该程序用户组的支持
    	 例如:
    	 	当文件mlocate.db文件的属性:-rw-r-----,
    	 	按理说组外人无法查看内容
    	 	
    	 	而普通用户dj,可以调用/usr/bin/locate命令查找这个理论上
    	 	根本无法查看的mlocate.db
    	 	
    	 	因为locate命令的属性:-rwx--s--x,在文件所属组中的x上是个s,
    	 	也就是,即使非本组人员执行这个命令,
    	 	那么恭喜你,你就具有这个命令所属组的权限,
    	 	
    	 	这个命令所属的组是root,root组用户可以查看mlocate.db文件,
    	 	因此查询成功
    
    
    	  对于目录来说:
    	  	若用户对于此目录具有r或x权限时,该用户能够进入该目录
    	  	用户在此目录下的有效用户组,将会变成该目录的用户组
    	  	用途:若用户在此目录下具有w的权限(可以新建文件),
    	  		 该文件的用户组与此目录的用户组相同
    
    		
    
    SBIT 不可针对文件
    		如果用户对此目录具有w、x的权限,即具有写入权限
    		当用户在该目录下建立文件或目录时,仅有自己与root才有权利删除该文件
    	 例如:
    	  	用户dj对于A目录具有用户组或其他人的身份,并拥有目录w权限,
    	  	这表示dj用户对A目录内任何人建立的目录或文件具有删除、改名、移动等操作
    	  	但是,如果把A目录权限加上了SBIT权限,
    	  	则dj用户只能对自己建立的文件删除、改名、移动等,无法删除他人文件
    
    	 例如: 
    		/tmp目录的权限是:drwxrwxrwt,最后组外人的权限中有个t
    		任何人都可以在/tmp文件夹下新增修改文件,
    		但仅有该文件/目录建立者和root能删除自己的目录或文件
    

    特殊权限设置:

    4  SUID
    2  SGID
    1  SBIT
    
    chmod 4755 filename    将一个文件权限改为-rwsr-xr-x   SUID
    chmod 6755 filename    将一个文件权限改为-rwsr-sr-x   SUID+SGID
    chmod 1755 filename    将权限改为-rwxr-xr-t          SBIT
    chmod 7666 filename    将权限改为-rwSrwSrwT    根本不具备w,都是空
    
    file  查看文件类型:
    		属于ASCII文件、数据文件、二进制文件
    		有没有用到动态链接库等信息,可以利用file来看
    file filename
    

    6.5 命令与文件查找

    脚本文件的查找:

    which  查找执行文件
    
    which [-a] commod  
    		-a  将所有由PATH目录中可以找到的命令均列出,
    			而不止第一个被找到的命令名称
    
    which config
    which which 
    which history   找不到,因为which是查找【path】这个环境变量所规定的路径
    				而history是bash内置的命令,得通过type找
    

    文件查找:

    whereis  只查找特定目录下的文件
    
    whereis [-bmsu] 文件或目录名
    			-l  可以列出whereis会去查询的几个主要目录
    			-b  只找binary格式的文件,二进制文件
    			-m  只找在说明文件manual路径下的文件
    			-s  只找source源文件
    			-u  查找不在上述三个项目中的其他特殊文件
    
    whereis ifconfig  列出与ifconfig有关的文件名
    whereis passwd
    whereis -m passwd
    
    
    whereis -l  可以列出whereis命令到底查询了哪些文件夹
    			主要在/bin、/sbin目录和/usr/share/man目录里查找
    
    locate  只查找已建立的数据库/var/lib/mlocate
    locate [-irclS] keyword  关键字检索
    			-i 忽略大小写的差异
    			-c 不输出文件名,仅计算找到的文件数量
    			-l 仅输出几行,若-l 5 则只输出前5行
    			-S 输出locate所用的数据库文件的相关信息,包括该数据库记录的文件目录数量等
    			-r 后面可接正则表达式的显示方式
    
    locate -l 5 passwd
    locate -S
    
    
    
    locate查询基于建立的数据库,
    但数据库每天才更新一次,如果新建了一个文件,这个文件自然一时半会不在数据库内,
    需要手动更新数据库,否则会提示找不到数据
    
    updatedb     这个命令是用来更新数据库,根据 /etc/updatedb.conf的设置
    			 去查找系统硬盘内的文件,
    			 并更新/var/lib/mlocate内的数据库文件
    			 
    			 由于要去硬盘里查找文件名,最后更新整个数据库,要等数分钟
    
    find  
    1、
    find [PATH] [option] [action]
    	与时间有关的选项:-atime,-ctime,-mtime
    		-mtime  n:  n是数字,在n天之前的【一天之内】被修改过内容的文件
    					 [n-1,n]
    					 
    		-mtime +n:  列出在n天之前(不含n天本身)被修改过内容的文件
    					 (负无穷,n-1]
    					 
    		-mtime -n:  列出在n天之内(含n天本身)被修改过内容的文件
    					 [n,现在]
    					 
    		-newer file:file为一个存在的文件,列出比file还要新的文件
    
    
    find / -mtime 0    列出过去系统上面24h内修改过内容的文件,
    				   0表示当前,从现在开始往前推24h
    find / -mtime 3    列出3天之前那一天的24小时内修改过内容的文件
    
    find /etc -newer /etc/passwd  列出/etc下面的文件,如果文件日期比/etc/passwd新就列出
    
    
    
    
    2、
    find /home -user dj  找出dj用户的在系统中的所有数据
    find / -nouser       找出不太正常的文件,
    					 列出这些不属于系统任何用户的文件,以源代码自行编译软件时会出现这种情况;
    					 删除了一个用户,这个用户曾在系统留下很多文件时也会出现这种情况
    
    
    3、
    find -name filename  查找文件名为filename的文件
    find -size [+-]SIZE  查找比SIZE还要大(+)或小(-)的文件,
    					 SIZE规格:c:Bytes;k:1024Bytes;
    find -size +50k      找到大于50kb的文件
    find -type TYPE      查找文件类型是TYPE的,类型主要有:
    					 一般正规文件 f
    					 设备文件  b,c
    					 目录    d
    					 链接文件 l
    					 socket  s
    					 FIFO    p
    find -perm mode      查找权限==mode的文件
    find -perm -mode     列出的文件权限必然要能囊括这个mode
    find -perm /mode     查找文件权限中包含任一mode的权限的文件
    
    find / -name passwd  找出文件名为passwd的文件
    find / -name "*passwd*"  find只能查找完整文件名,若查找关键字,用正则
    find /run -type s    找出socket文件,-type有利于找出类型怪异的文件
    find / -perm /7000   所谓7000:---s--s--t,只要含有s或t就列出
    find / -perm -7000   必须同时含有s或t,---s--s--t,才列出
    find /usr/bin /usr/sbin -perm /6000  这两个文件夹中只要有SUID或SGID就列出
    
    find会递归查找子目录
    
    
    4、
    find [PATH] [option] [action] 这个action
    -exec commod  接额外别的命令处理找到的结果
    -print 将结果打印输出到屏幕(默认)
    
    find /usr/bin /usr/sbin -perm /7000 -exec ls -l {} ;
    此处只能用命令本名ls -l,不可用命令别名ll
    
    find / -size +1M   找出系统中大于1MB的文章
    
    find /etc -name '*http*'   找出/etc下面的文件名包含http的文件 
    
    不要有事没事用find,它很消耗硬盘资源,可以用whereis和locate
    

    6.6 权限与命令的关系

    什么命令 在什么权限下才能够运行

    1、
    让用户能进入某目录并查看目录中有哪些文件的基本权限: 
    cd 目录
    用户首先要能进入这个目录,对这个目录要有x权限
    额外,如果要在这个目录内ls查看文件名,则要求用户对这个目录还需要r权限
    
    2、
    用户在某个目录内,读取一个文件的基本权限:
    catmoreless 等
    用户首先要能进入这个目录,对这个目录要有x权限
    用户想读这个文件内容,对这个文件要有r权限
    
    3、
    让用户可以修改一个文件的基本权限:
    用 nano 或 gedit 或 vi 等
    用户首先要能进入这个目录,对这个目录要有x权限
    用户想要修改这个文件,要能看到文件内容(r),要能修改内容(w)
    
    4、
    让用户可以建立一个文件的基本权限:
    用户在该目录要具有w和x的权限,
    首先要能进去目录(x),
    然后要能新建文件,就是修改目录中的内容(w)
    
    5、
    让用户能执行 cp /dir1/file1 /dir2 的基本权限:
    用户首先要能读取源文件,并写入目标文件
    dir1   用户至少要能进到dir1中(x)
    file1  用户要能看到file1的内容(r)
    dir2   用户要能往dir2里写入内容(w、x)
    

    课后习题中的部分:

    8.尝试用find找出目前Linux系统中所有具有SUID的文件有哪些?

    find / -perm /4000 -print
    

    9.找出/etc下面,文件大小介于50KB到60KB之间的文件,并且将权限完整地列出(ls-l)

    find /etc -size +50k -a -size -60k -exec ls -l {} ;
    

    注意到 -a ,那个 -a 是 and 的意思,为符合两者才算成功

    10.找出/etc下面,文件容量大于50KB且文件所有者不是root的文件名,且将权限完整地列出(ls-l)

    find /etc -size +50k -a ! -user root -exec ls -ld {} ;
    

    11.找出/etc下面,容量大于1500KB以及容量等于0的文件

    find /etc -size +1500k -o -size 0
    

    那个 -o 就是或 (or) 的意思

  • 相关阅读:
    UEditor中多图上传的bug
    Mysql 5.5 数据库命令大全
    Android学习书籍
    众方中继使用说明
    MyEclipse 2015优化技巧
    Android studio1.3.1 快捷键
    你有没有这样的猜疑?
    右键新建没有Word_Excel_PowerPoint的解决方法
    电脑清理桌面快捷图标小箭头
    Spring3.1+Hibernate3+Struts2的最新整合所需要的jar包
  • 原文地址:https://www.cnblogs.com/dindin1995/p/13059063.html
Copyright © 2011-2022 走看看