• linux命令_文件目录操作命令


    linux命令--文件和目录操作命令


    pwd

    "print working directory" 打印工作目录的绝对路径
    范例: 在bash命令行显示当前用户的完整路径
    	系统Bash命令行的提示符是由一个称为PSI的系统环境变量控制的。
    	修改PSI变量对应的值。
    	page 15
    

    cd

    cd -  切换到当前用户上一次所在的目录路径
    

    tree

    -d 只显示目录
    -f 显示每个文件的全路径
    -i 不显示树枝,常与-f参数配合使用
    -L level 便利目录的最大层数,level为大于0的正整数
    -F 不同文件类型结尾加不同符号 
    

    mkdir

    -p 递归创建目录
    -v 显示创建过程
    -m 设置目录的默认权限
    
    范例: 克隆目录结构
    tree -fid --noreport olfboy >> ~/oldboy.txt
    cd /tmp
    mkdir -p `cat ~/oldboy.txt`  # mkdir命令后可以接很多目录名来批量创建目录。
    tree -d /tmp/oldboy
    

    touch

    有两个功能: 一是创建新的空文件;二是改变已有文件的时间戳属性。
    touch stu{1..5} 批量创建文件
    
    GNU/Linux 的文件有三种类型的时间戳
    
    Access: 2018-07-17 14:05:03.361270580 +0800  # 最后访问文件的时间
    Modify: 2018-07-17 14:04:59.344291470 +0800  # 最后修改文件的时间
    Change: 2018-07-17 14:04:59.344291470 +0800  # 最后改变文件状态的时间	
    

    ls

    -l 此处的时间属性列默认是显示的文件的最后一次修改时间。
    显示完成时间属性的参数:
    	ls -l --time-style=long-iso
    
    ls -l --time-style=long-iso --time=atime  # 显示访问时间
    mtime:最后修改时间 修改文件内容、文件的mtime会改变
    ctime:状态改变时间 修改文件内容、移动文件或改变文件属性等,ctime会改变
    atime:最后访问时间 查看文件内容时,atime会改变。
    
    -F 目录的结尾都加上了/
    	ls -F | grep /   过滤目录
    	ls -F | grep -v /   过滤普通文件
    	加上* 表示可执行的普通文件
    	page 37
    -d 只显示目录本身的信息
    	ls -ld dir1
    
    ls别名 
    	alias lst='ls -l --time-style=long-iso'  # 配置命令别名
    	alias | grep lst  # 检查命令别名是否生效
    		alias lst='ls -l --time-style=long-iso' 
    	lst  # 执行命令别名,检查效果。
    
    查找最近更新过得文件
    	ls -lrt /etc/  -t按时间mtime排序;-r 倒叙;
    	ls -lrt /etc/ | tail -1 # tail -1 只显示一个文件
    
    删除占用inode节点的垃圾:比如邮件
    	ls | xargs rm -f 如果文件特别多,rm -rf * 是无法删除的。
    
    输出内容的属性解读:
    	ls -lhi
    		inode 索引节点编号
    		文件类型权限
    		硬链接个数
    		属主(属组)
    		文件或目录的大小
    		修改时间
    		名字
    

    cp

    -p 保持源文件的所有者、权限信息以及时间属性
    -d 源文件是符号链接,仅复制符号链接本身,保留指向的目标文件或目录
    -r 递归复制目录
    -a 包含了-p、-d、-r
    -i 提示用户缺
    -t 可以颠倒顺序,cp -t 目标文件 源文件
    
    cp覆盖文件之前不提示是否覆盖的几种方法:
    	1. 使用命令全路径
    		which cp  # 查看cp的系统别名
    		/bin/cp file1 file2
    	2. 命令开头使用反斜线
    		cp file1 file2
    
    cp /etc/ssh/sshd_config{,.ori} 
    	原理是bash对大括号的展开操作,展开成/etc/ssh/sshd_config /etc/ssh/sshd_config.ori 再传给cp命令
    

    mv

    alias mv # 查看mv的别名 
    

    rm

    关于删除的经验:
    1. 用mv代替rm,不要急着删除,而是先移动到回收站/tmp
    2. 删除前务必备份。最好是异机备份。
    3. 请用find替代rm
    	find ./ -type f -name "*.txt" -mtime +7 | xargs rm -f
    4. 最多使用 rm -f 文件名。 rm -rf 误删目录时不会有提示。
    5. 如果要使用通配符,最多使用rm -f ./* ,rm -rf /oldboy/ * ,会把当前目录下所有目录都删除。
    6. 额外补充一点,要慎用 rsync --delete
    

    rmdir

    删除空目录
    -p 子目录删除后其父目录也为空时,也一并删除。
    

    ln,创建文件间的链接。

    无参数, 创建硬链接
    -s, 创建软连接(符号链接)
    
    多个文件名指向同一个索引节点(inode),这种情况下的文件就称为硬链接。相当于文件的另一个入口。
    
    ln -s 源文件 目标文件  # 目标文件不能事先存在,需要用ln命令创建。
    

    readlink

    -f 显示最后一个非符号链接文件
    查看符号链接文件的内容
    

    find 用于查找目录下的文件

    -mtime
    	-n 表示文件更改时间距离现在n天以内
    	+n n天以前
    	n 距离现在第n天
    -name 只支持*、?、【】等特殊通配符。
    	find /var/log/ -mtime +5 -name '*.log' # 在/var/log 目录下查找5天前以.log结尾的文件
    
    find ./ -size +10M -size -20M # 查找大于 10M 小于 20M 的文件
    
    find ./ ! -type d # !表示取反,查找不是目录的文件,注意!位置。
    
    find正则表达式: find / -regex ".*find"
    
    ls -l 放在-exec的选项中执行:
    	find ./ -type f -exec ls -l {} ;
    	;号表示结束,转义,{}代指前边find查找到的内容。
    
    使用xargs执行mv:
    	find . -name '*.log' | xargs -i mv {} dir2/
    
    在/oldboy目录以及子目录下的所有以扩展名.sh结尾的文件中,做字符串替换,吧./hostlists.txt替换为../idctest_iplist。
    find /oldboy -name '*.sh' -exec sed -i 's#./hostlists.txt#../idctest_iplist#g' {} ;   #  文件多是效率低
    find /oldboy -name '*.sh' | xargs sed -i 's#./hostlists.txt#../idctest_iplist#g'
    sed -i 's#./hostlists.txt#../idctest_iplist#g' `find /oldboy -name '*.sh'`  # 命令语句中如果有反引号,先执行反引号中的命令。
    
    现在有 file1 file2 file3 这 3 个文件打包 . 打包文件为niliu.tar
    	#tar cvf niliu.tar file1 file2 file3
    find ./ -type f -name 'test.txt' | xargs tar -zcvf oldboy01.tar.gz
    
    find ./ -type f ! -name 'test1' | xargs  rm -f  
    find /root -maxdepth 1 -type f ! -name '.*'  # 只显示一级目录下的文件,不包含隐藏文件
    
    清理指定的内容:
    	find . -type f | xargs sed -i '/*content*/d'
    
    只保留7天的日志:
    	find . -type f -name 'access.log' -mtime +7 | xargs rm -f 
    
    将找到的文件移动到指定位置:
    	 find . -name '*.log' | xargs -i mv {} dir2/
    	 find . -name '*.log' | xargs mv -t dir2/ # 因为find找到的结果通过xargs会默认作为命令的目标,即mv dir2/ 目标,显然是错误的。
    	 mv `find . -name '*.log'` dir2/
    

    xargs

    -i 以{}代替前边的结果
    -p 提示让用户确认是否执行后边的命令,y执行,n不执行。
    -n 指定每行的最大参数量,可以将标准输入的文本划分为多行,每行n个参数,默认空格分隔。
    
    多行输入变单行:
    	xargs < test.txt
    

    rename

    rename from to file
    	from: 需要替换或处理的字符串
    	to: 替换后的内容
    	file: 待处理的文件,可以用* 匹配所有文件。
    
    rename .jpg .oldboy *.jpg
    

    basename

    dirname

    chattr 改变文件的扩展属性

    chmod只是改变文件的读、写、执行权限,更底层的属性控制是chattr来改变的。
    设置只能往文件追加内容,不能删除文件。
    	chattr +a test
    
    给文件枷锁,使其只能是只读。
    	chattr +i test
    

    lsattr

    查看文件的扩展属性: lsattr file1.txt
    查看目录的扩展属性: 
    	chattr +i dir1  # 目录也可以加只读权限。
    	lsattr -d dir1
    

    file

    显示文件的类型	
    

    md5sum 计算和校验文件的md5值

    -c 从指定文件中读取MD5校验值,并进行校验。
    md5sum oldboy.txt > md5.log  # 先生成校验文件
    md5sum -c md5.log  # 检查使用-c参数
    

    chown 用于改变文件或目录的用户和用户组。

    常用格式:
    	chown 用户 文件或目录  # 仅仅授权用户
    	chown :组 文件或目录  # 仅仅授权组
    	chown 用户:组 文件或目录  # 表示授权用户和组
    
    其中的:可以用.来替代;
    用户和组名,必须是实际存在的。
    
    -R 递归改变目录的用户和用户组
    

    chmod 改变文件或目录权限

    -R 递归处理
    文件、目录的读、写、执行权限说明: page85
    

    chgrp

    只用于更改文件的用户组,功能被chown取代了。
    

    umask 显示设置权限掩码

    文件权限计算:  666 - umask;
    目录权限计算:  777 - umask;
    
    umask 044
    touch file2;ll -h file2  # 两条命令通过分号链接在一起,可以再一起执行。
    My name is 侯冰雷 ~~欢迎转载 ~~欢迎关注 ~~欢迎留言
  • 相关阅读:
    javascript创建对象的方法--基本模式
    javascript进阶课程--第二章--对象
    JavaScript中的global对象,window对象以及document对象的区别和联系
    onblur 对象失去焦点事件
    php排序
    php数组插入数据
    thinkphp多层volist实现多表查询
    数据转换
    循环赛日程安排问题
    JS中setTimeout()的使用方法具体解释
  • 原文地址:https://www.cnblogs.com/houbinglei/p/9330441.html
Copyright © 2020-2023  润新知