专栏首页懒人的Linux100个Linux命令(1)-文件处理类
原创

100个Linux命令(1)-文件处理类

写在前面

这是一个系列文章,关于 Linux 中最基本的操作和原理,以命令的使用为线索,加以相应的原理解释。

100个Linux命令(1)-文件处理类

100个Linux命令(2)-用户管理

100个linux命令(3)-权限管理

100个Linux命令(4)-管理文件系统

100个Linux命令(5)-LVM

100个Linux命令(6)-软件管理 rpm 和 yum

100个Linux命令(7)-进程管理

100个 Linux 命令(8)-统计和查看系统状态

Linux 基础-RAID

本文主要包含文件(目录)的查看、创建和删除、以及查找命令的使用。

1.cd命令

cd命令用于切换路径。

路径分为绝对路径相对路径,绝对路径是由根 "/" 开始的路径,相对路径无需从根开始,并且可以使用路径展开符,如:

  • . :当前目录
  • .. :当前目录的父目录
    • :上一个工作目录
  • ~ :当前用户的家目录,cd命令的默认值

区分/dir/与/dir 一般情况下,/dir/与/dir都表示dir目录中的文件。 对于严格区分尾随斜线的情况时: 附带尾随斜线的表示此目录的所有文件; 不附加尾随斜线表示此目录本身和此目录的文件。

2.pwd命令

pwd命令用于显示当前的工作目录。

如果当前目录是链接目录,则显示链接目录的文件路径,使用-P选项显示定位到链接的原始目录。

pwd命令

3.basename & dirname 命令

basename命令用于获取路径的文件名,dirname用于获取路径的目录名。

这两个命令不检查路径是否存在,只要给出路径,即可获得文件名或者目录名。

4.ls命令

ls命令用于列出目录中的内容,默认以制表符分隔文件,默认以文件首字母排序。该命令等价于dir命令。

选项

  • l:长格式显示
  • R:递归显示
  • h:与-l一起,以易于阅读的格式输出文件大小,将字节换成k,将K换成M,将M换成G
  • p:对目录加上/标识符以作区分
  • a:不隐藏任何以"."开头的项目
  • A:列出除"."及".."以外的任何项目
  • d:显示目录本身的属性信息
  • i:显示文件innodeinnode
  • F:对不同类型的文件加上不同的标识符,如目录文件后的尾随斜线“/”
  • t:按修改时间排序
  • S:按文件大小排序,默认降序
  • r:反转排序
  • m:使用逗号分隔符显示文件
  • 1:以换行符分隔文件
  • l pattern:忽略被pattern匹配到的文件
  • --color:显示颜色

注意:ls以-h显示文件大小时,一般显示的都是不带B的单位,如K/M/G,它们的转换比例是1024,如果显示的都是带了B的,如KB/MB/GB,则它们的转换比例为1000而非1024,一般很少显示带B的大小。

ls -l显示的7列文件属性:文件类型和文件权限、硬链接数、属主、属组、文件大小、最近一次修改日期、文件(目录)名。

文件时间戳

文件时间属性有三种:atime、ctime、mtime

atime:access time,上一次的访问时间

mtime:modify time,文件(数据部分)修改时间

ctime:change time,文件(元数据(inode))修改时间

修改文件的data block部分时,文件的mtime会发生改变,文件元数据中mtime改变,进而文件的ctime也会改变。mtime改改变一定会引起ctime改改变;

修改文件的元数据,如重命名文件、修改文件所有者、移动文件(改变了文件的inode指针)等,文件的ctime会发生改变;

对于目录,目录中创建、删除以及目录内的任意文件操作,都会改变mtime;目录的mtime改变同样会引起ctime的改变,对目录本身元数据的修改也会改变ctime;

atime只有在文件被访问时才会改变,若不是打开文件编辑内容,则ctime和mtime的改变不会引起ctime的改变;

mtime的改变一定引起ctime的改变,而访问文件时(如cat),atime不一定改变。除非两次修改的atime的时间超过一天,或者修改了mtime,否则访问文件的inode不会引起atime改变。即当 cat 一个文件时,它的atime可能会改变,但是稍后再次cat,atime不会改变。(此机制由relatime维护)

bash shell 通配符

文件名通配匹配的整体的文件名,而非部分匹配

(1)*

匹配任意长度的任意字符。"*" 无法匹配文件名以 "." 开头的文件、无法匹配路径分隔符符号 "/"

# 匹配目录中所有隐藏文件和非隐藏文件
ls .* * 

开启dotglob功能,"*"可以匹配以"."开头的文件

shopt -s dotglob
ls * 

即递归到文件内部,又要匹配文件名,如递归找出多层目录/path下所有的".css"文件,这时可以开启globstar功能,使用"两星连珠"(**)就可以匹配匹配路径斜线。

shopt -s globstar #开启星号模式匹配
ls /path/**/*.css 

非bash内置命令,可能会提供自己的通配符匹配,如find命令中name选项的星号(*)可以匹配以点开头的隐藏文件。

(2)?

匹配任意单个字符

(3)[]

匹配指定范围内的任意单个字符。

字母匹配:使用通配符[]时应该注意是基于字符顺序的,大小写字母的顺序是a-z --> A-Z,指定a-z表示小写字母a-z,同理A-Z,而a-zA-Z和a-Z都表示所有大小写字母。当然还可以指定a-A表示a-z外加一个A。

数字匹配:[]只能匹配单个字符,0-9表示0-9的数字,1-20表示1-2外加一个0,1-23表示1-2外加一个3,1-22-3表示1-2或2-3,迷惑点就是看上去是大于10的整数,其实是两个或者更多的单个数字组合体。也可以用这种方法表示多种匹配:1-2,2-3

5.tree命令

tree命令使用树状结构显示目录中的内容。

匹配选项

  • L:设置递归显示深度,指定的深度必须是大于0的整数
  • P:显示通配符匹配到的目录和文件,无论是否匹配,目录一定会显示
  • i:显示除被通配符匹配外的所有目录和文件

显示选项

  • a:显示隐藏文件
  • d:只显示目录
  • f:显示文件(目录)完整路径
  • i:不缩进显示,常与-f组合
  • p:显示权限位信息
  • h:显示大小
  • u:显示username或UID
  • g:先出groupid或GID
  • D:显示文件最后一次Mtime
  • --inodes:显示inode号
  • --device:显示文件(目录)所属的设备号
  • C:显示颜色

输出选项

  • o filename:指定将tree的结果输出到filename文件中
比较完整的tree输出

6.mkdir命令

mkdir命令用于创建目录。

一般用法:mkdirmkdir -mp 目录名

选项

  • m:创建目录时直接设置权限
  • p:递归创建多层目录,即上层目录不存在时也会直接将其创建出来(parent)
mkdir命令

7.touch命令

touch命令主要用于修改文件的时间戳信息,当touch的文件不存时,会自动创建改文件。

一般用法:touch file_name

选项

  • c:强制不创建文件
  • a:修改文件access time
  • m:修改文件modification time
  • t:使用CCYYMMDDhhmm.ss格式的时间替代当前时间
  • d:使用字符串描述的时间格式替代当前时间,如“3 days ago”、“next Sunday”等

8.rm & rmdir命令

rm命令用于删除文件(目录),rmdir命令用于删除空目录

一般用法:rm rfi filename

选项

  • r:递归删除,删除目录时需要加此参数
  • i:交互式询问是否删除
  • f:强制删除,不进行询问

9.file命令

file命令用于查看文件类型属于二进制文件还是数据文件还是ASCII文件

选项

  • s:查看设备的文件系统类型(分区后格式化前)

10.cp & scp 命令

cpscp命令都是复制文件(目录的命令),scp用于远程复制。

一般用法:cp -a

cp [-apdriulfs] src dest #复制单个文件(目录)
cp [-apdriuslf] src1 src2 src3 ... dest_dir #复制多个文件(目录)到一个目录

选项

  • p:文件的属性也跟随复制,如权限、属组、时间戳等。cp命令默认谁指定复制动作,复制后的文件所有者和组就是归属谁
  • r/R:递归复制,常用于复制非空目录
  • d:复制的源文件如果是链接文件,则复制链接文件而不是指向的文件本身。即保持链接属性,复制快捷方式本身。如果不指定-d则复制的是链接所指向的文件
  • a:a=pdr三个选项,归档拷贝,常用于备份
  • i:复制时如果 目标文件已经存在,询问是否替换
  • u:若目标文件和原文件同名,但属性不一样,则覆盖目标目标
  • f:强制复制
  • l:在目标位置建立硬链接
  • -s:在目标位置建立软链接

注意

bash内置命令在进行通配符匹配文件的时候,"*"、"?"、"[]"是无法匹配到以"."开头的文件的,所以"*"不会匹配隐藏文件。

要通配隐藏文件,使用"."代替上述几种通配元字符即可,它能匹配除了"."和".."这两个特殊目录外的所有文件。它并非通配符,而是表示当前目录,显然直接复制目录,是可以将隐藏文件复制走的。

例:复制/etc/skel目录下所有文件包括隐藏文件到/tmp目录下

cp -a /etc/skel/. /tmp

如果有重复文件,则即使加上-f选项,也一样会交互式询问。解决方法可以是使用"yes"这个工具,它会不断的生成y字母直到进程被杀掉,当然也可以自行指定要生成的字符串。

yes | cp -a /etc/skel/. /tmp

解析scp命令(待更新)

11.mv命令

mv命令用于移动或重命名文件(目录),默认递归移动。

一般用法:

mv [-iuf] src dest # 移动单个文件(目录)
mv [-iuf] src1 src2 src3 dest_dir # 移动多个文件(目录)

选项

  • --backup=CONTROL:如果目标文件已存在,则对该文件做一个备份,默认备份文件是在文件名之后加上波浪线,如/b.txt~
  • b:类似于--backup,但不接受参数,默认备份文件是在文件名后加上波浪线
  • f:如果目标文件已存在,则强制覆盖
  • i:如果目标文件已存在,则提示是否覆盖,这是alias mv的默认选项
  • n:如果目标文件已存在,则不覆盖已存在的文件,如果同时指定了-f、-i、-n,后指定的选项生效
  • u:如果源文件和目标文件不同,则移动,否则不移动

移动和覆盖的本质(待更新)

12.cat & tac 命令

cat用于输出一个或多个文件的内容和将分行键入的内容输入到一个文件中去。

tac反向输出文件,将最后一行放在第一行的位置输出,此命令没有显示行号的参数 。

一般用法

cat [OPTION]... [FILE]...

选项

  • n:先出所有行的行号
  • b:显示非空行的行号
  • E:在每行的行尾加上$符号
  • T:将TAB符号输出为"^|"
  • s:压缩连接的空行为单个行

功能演示:将键入的内容重定向至文件,而非标准输入中

cat命令重定向至文件

13.head命令

head命令用于打印指定文件的前几行,默认显示文件前10行。

一般用法:head -n num -v filename

选项

  • n:显示前num行,如果num是负数,则显示除了最后|num|行的其余所有行,即显示前“总行数-|num”
  • v:显示文件名
head命令的用法

14.tail命令

tail命令用于显示文件后面的行,默认显示10行。

一般用法:tail OPTION... FILE...

选项

  • n:输出最后num行,如果使用-n +num表示打印从第num行开始的所有行
  • f:监控文件变化
  • --pid=PID:和-f一起使用,在给定的PID的进程死亡之后,终止文件监控
  • v:显示文件名

15.nl命令

以行号的方式查看文件内容,默认空行不显示行号(等价于cat -b)

选项:-b a:无论是否是空行都显示行号,等价于cat -n

nl命令

16.more & less

按页显示文件内容。

more:使用 "/" 搜索字符串,"n" 键向下搜索,"N" 键向上搜索

less:同上,还可以使用 "?" 搜索字符串,"n" 键向上搜索,"N"键向下搜索

17.diff & vimdiff

比较文件内容

一般用法:

diff file1 file2
vimdiff file1 file2

18.which

显示命令或脚本的全路径,默认也会将命令的别名也显示出来

文件查找类-which命令

19.whereis

用于找出二进制文件、原文件和man文档文件

文件查找类-whereis命令

20.whatis

列出给定命令(并非一定是命令)的man文档信息

文件查找类-whatis命令

21.find命令

find命令用于搜索文件,下面是简要使用方法

(1)基础用法

搜索文件默认以"\n"将找到的文件分割。可以使用-print0使用"\0"分隔,将"\n"替换为"\0",实现不分行显示。

find用法-print0

(2)文件名搜索

-name可以对文件的basename进行匹配,查找的文件名,最好使用引号包围,可以使用通配符。

find用法-name

-path用于在指定目录下搜索某目录中的某文件

find用法-path

(3)根据文件类型搜索

一般需要搜索的文件类型只有普通文件(f)、目录(d)、链接文件(l)

find /tmp -type f -name "a*.sh"
find /tmp -type d -name "a*"

(4)根据文件的时间戳搜索

-atime、-mtime、-ctime

find /tmp -type f -mtime -3 -name "*.sh"

(5)根据文件大小搜索

find /tmp -type f -size +100k -name "*.sh"

(6)根据权限搜索

find /tmp -type f -perm -0700 -name '*.sh'

(7)搜索空文件

find /tmp -type d -empty

(8)搜索到文件后删除

find /tmp -type f -name "*.tmp" -exec rm -rf '{}' \;

但是这是极不安全的方法,因为如果文件名有空白字符的话,会造成误删除,例如文件名为"a xy.tmp",则直接-exec rm -rf '{}'将会删除a和xy.tmp和"a xy.tmp",也就是说a这个文件或目录被误删除了。

(9)搜索指定日期范围的文件

find /test -type f -newermt 2018-12-02 -a ! -newermt 2019-01-02

或者创建两个指定日期的临时文件,然后使用find -newer去参照这两个文件

touch -m -d 2018-12-02 tmp1.txt
touch -m -d 2019-01-02 tmp2.txt
find /test -type f  -newer tmp1.txt -a ! -newer tmp2.txt

不过这样会把tmp2.txtx也搜索出来,因为newer搜索的是比xxx文件更新,取反则表示更旧或时间相同。

(10)加速并行搜索

有时候,想要搜索的内容并不知道在哪里,这时我们会从根"/"开始搜索,这样的搜索速度可能会稍微长那么一点点。为了加速搜索,使用xargs的并行功能。例如,搜索"/"下的所有"Find.pm"结尾的文件:

ls --hide proc / | xargs -i -P 0 find /{ } -type f -name "*Find.pm"

参考链接

http://www.cnblogs.com/f-ck-need-u/p/6995195.html#auto_id_19

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 100个linux命令(3)-权限管理

    文件权限附属在文件所有者 u,文件所属组 g 和其他用户o 上。使用字符修改权限需要指明操作谁的权限,另外还要使用"+"或"-"指定增加权限还是删除权限,也可以...

    懒人的小脑
  • 管理 Linux 服务

    服务是对外提供服务的进程,一般来说服务都会放在后台,由于服务是要持续不断的提供外界随时发来的服务请求,服务进程就需要常驻在内存中,且不应该和终端有关,否则终端退...

    懒人的小脑
  • 100个Linux命令(2)-用户管理

    每个用户都用用户名、用户ID、所属组及其默认shell,可能包括密码、家目录、附属组和注释信息等。

    懒人的小脑
  • Linux 文件管理命令语法、参数、实例全汇总(一)

    命令:cat cat 命令用于连接文件并打印到标准输出设备上。 使用权限 所有使用者 语法格式 cat [-AbeEnstTuv] [--help] [--v...

    小小科
  • 「学习笔记」C语言(四):文件篇

    今天继续给大家分享我的C语言学习笔记最后一篇——文件篇。前三期分享的是基础篇、指针篇和结构篇,有兴趣的童鞋可以关注我的公众号查看历史推文。

    悠风
  • linux基础 二

    可分享的,可分享给其他系统挂载使用的目录,即执行文件,用户邮件,可分享给网络上其他用户的

    mySoul
  • [零] JavaIO入门简介 程序设计语言 为什么需要IO库

    本文旨在引申出来Java IO的概念含义,作为学习JavaIO一个起步的了解知识点

    noteless
  • python爬虫系列之 requests实战:用 requests库下载网页和图片

    在上一节我们讲过,响应 Response的 content属性可以用来下载文件,但是我并没有讲怎么实现。

    渔父歌
  • [每天五分钟,备战架构师-5]操作系统之文件管理

    操作系统实现了对系统硬件资源和软件资源的管理,其中软件资源主要是各种系统程序、用户应用程序,还包括大量的文档材料,这些软件资源在操作系统中大多以文件的形式存储。...

    大江小浪
  • Python 文件操作

    一份执着✘

扫码关注云+社区

领取腾讯云代金券