Linux常用命令——文件管理

发布于 2021-03-17  261 次阅读


文件管理

cp

复制

参数说明:

  • -i 提示
  • -r 复制目录及目录内所有项目

注意:命令行复制,如果目标文件已经存在,会提示是否覆盖,shell 脚本中,如果不加 -i 参数,则不会提示直接覆盖!

mv

移动文件(也可以修改文件名)

本质是 复制(cp)+删除(rm)

#  重命名filename1 -> filename2
mv filename1 filename2
# 移动文件 file -> dir
mv filenames dir

注意:当第二个参数为目录时,第一个参数可以是多个以空格分隔的文件或目录

which

PATH 指定的路径中,搜索某个系统命令的位置

返回第一个搜索结果(执行的哪个)

# 查看 ls 命令是否存在,执行哪个
which ls
# 查找cd
which cd
# 显示不存在,因为 cd 是内建命令
# 而 which 查找显示是 PATH 中的命令

whereis

只能用于程序名的搜索

参数说明:

  • -b 查找可执行文件
  • -m 查找帮助文件
  • -s 查找源代码文件
  • -u 查找其它文件

locate

在 /var/lib/slocate 数据库中查找,数据库由 updatedb 程序更新,updatedb 由 cron daemon 周期性调用。一般,搜索数据库(locate)比搜索整个硬盘(find)快,但如果档案最近才建立或刚更名,可能会找不到。在内定值中,updatedb 每天执行一次,可以修改 crontab 来更新设定值 (etc/crontab)。

参数说明:

  • -l num 限制显示的行数
  • -r 使用正则运算式

find

在磁盘中搜索文件

注意:

  • 在find后第一个 - ( ) , ! 之前的部分为 path,之后的是 expression
  • path 为空则使用当前路径
  • expression 为空则使用 -print

参数说明:

  • -name 按照文件名查找文件
  • -perm 按文件权限查找文件
  • -user 按文件属主查找文件
  • -group 按照文件所属的组来查找文件
  • -type 查找某一类型的文件
  • -amin n 查找系统中最后N分钟访问的文件
  • -atime n 查找系统中最后n天访问的文件
  • -cmin n 查找系统中最后N分钟被改变文件状态的文件
  • -ctime n 查找系统中最后n天被改变文件状态的文件
  • -mmin n 查找系统中最后N分钟被改变文件数据的文件
  • -mtime n 查找系统中最后n天被改变文件数据的文件
    • 用减号 - 来限定更改时间在距今n日以内的文件
    • 而用加号 + 来限定更改时间在距今n日以前的文件
  • -maxdepth n 最大查找目录深度
  • -depth 查找完目录中所有的文件后才进入子目录
  • -prune 指出需要忽略的目录 (如果同时使用了-depth,那么-prune会被忽略)
  • -newer 查找更改时间比某个文件新但比另一个文件旧的所有文件
  • -print 将匹配的文件输出到标准输出
  • -print0 在find的每一个结果之后加一个NULL字符,而不是默认的\n
# 查找当前目录中以一个小写字母开头,最后是 4 到 9 加上 .log 结束的文件:
find . -name '[a-z]*[4-9].log' -print

# 在 test 目录查找不在 test4 子目录查找
find test -path 'test/test4' -prune -o -print

# 查找更改时间比文件 log2012.log新但比文件 log2017.log 旧的文件
find -newer log2012.log ! -newer log2017.log

特殊参数:

-exec 参数后面跟的是 command 命令,它的终止是以 ; 为结束标志的,所以这句命令后面的分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠。{} 花括号代表前面find查找出来的文件名。

-ok 和-exec的作用相同,只不过在执行每个命令前,让用户确定是否执行

# 在当前目录中查找更改时间在10日以前的文件并删除它们(无提醒)
find . -type f -mtime +10 -exec rm -f {} \;

# 当前目录下查找文件名以 passwd 开头,内容包含 "pkg" 字符的文件
find . -f -name 'passwd*' -exec grep "pkg" {} \;

# 用 exec 选项执行 cp 命令
find . -name '*.log' -exec cp {} test3 \;

四种查找的区别

  • which 查看可执行文件的位置
  • whereis 查看文件的位置
  • locate 配合数据库查看文件位置
  • find 实际搜寻硬盘查询文件名称

whereis 及 locate 都是基于系统内建的数据库进行搜索,因此效率很高,而find则是遍历硬盘查找文件。

查看当前 PATH 配置:

echo $PATH

或使用 env 查看所有环境变量及对应值

chmod

改变文件访问权限(详见linux基础)

命令格式:

chmod [参数] [权限] [文件或目录]

参数说明:

  • -c 显示更改的部分的信息
  • -R 处理指定目录以及子目录

chown

改变文件指定的用户或组

参数说明:

  • -c 显示更改的部分的信息
  • -R 处理指定目录以及子目录
# 改变拥有者和群组 并显示改变信息
chown -c mail:mail log2012.log

ln

为文件在另外一个位置建立一个同步的链接

命令格式:

ln [option] source link

常用参数:

  • -b 删除,覆盖以前建立的链接
  • -s 软链接(符号链接)
  • -v 显示详细处理过程

lsattr

显示文件属性

命令格式:

lsattr [参数] [文件或目录]

参数说明:

  • -a  显示所有文件和目录
  • -R  递归处理,将指定目录下的所有文件及子目录一并处理。
  • -v  显示文件或目录版本。
  • -V  显示版本信息。

chattr

改变文件属性

属性说明:

  • a:仅允许追加数据
  • i:不允许任何操作

命令格式:

chattr [参数][+/-/=<属性>][文件或目录]

参数说明:

  • -R 递归处理,将指定目录下的所有文件及子目录一并处理。
  • -v<版本编号> 设置文件或目录版本。
  • -V 显示指令执行过程。
  • +<属性> 开启文件或目录的该项属性。
  • -<属性> 关闭文件或目录的该项属性。
  • =<属性> 指定文件或目录的该项属性。
#用chattr命令防止系统中某个关键文件被修改:
#root用户也无法做任何操作
chattr +i /etc/resolv.conf

lsattr /etc/resolv.conf
#会显示如下属性
----i-------- /etc/resolv.conf

#让某个文件只能往里面追加数据,适用于各种日志文件:
chattr +a /var/log/messages