Linux,一切皆文件,文件就要有一定的组织方式,linux是以树形组织文件,LSB(linux标准库)下的FHS标准规定了目录结构,也就是说所有linux发行版都要遵守这个标准:

  • 文件有两类数据:元数据、数据

  • 目录是一种特殊的文件

  • linux中,文件名称严格区分大小写

  • 文件名不能包含“/”这个字符

  • 文件名最长度不能超过255个字符

  • 以点(.)开头的文件都是隐藏文件

 

1、目录结构

/ 根目录,所有的文件和目录,皆是由根目录延伸。 
/boot 开机启动过程所需的文件,比如:内核文件,引导文件,驱动文件,boot目录一般在200M左右
/opt 第三方应用程序的安装位置,兼容老程序系统附件就装在这个目录中
/srv 系统自行管理的服务用到的数据
/usr universal shared,read-only data,全局共享只读数据目录。可独立分区编辑安装的第三方软件、共享的库,包括文件和静态只读程序数据,重要的子目录:/usr/bin,用户命令;/usr/sbin,系统管理命令;/usr/local,第三方应用程序的安装位置。
/etc 配置文件
/var 动态变化的文件,如:数据库、缓存目录、日志文件、打印机后台处理文档和网站内容,可独立分区
/run 自本次系统启动以来启动的进程的运行时数据。包括进程ID文件和锁定文件等。此目录中的内容在重启时会重新创建。
/root root用户的家目录
/home 普通用户的个人数据和配置文件的主目录,每切换用户时,首先就是切换到用户的家目录,每个用户的家目录里面有这个用户特有的环境变量,可以用ls -a查看有四个.bash开头的文件,就是这个用户的环境变量。比如:在root家目录下.bash_profile定义一个环境变量,export dd=test,在其它用户echo $dd,是不能输出的。工作中有可能需要为某些用户设置独有的环境变量。
/proc 用于输出内核和进程信息相关的虚拟文件系统放置的是内存数据,不会占用磁盘空间,内存里有什么:1.系统开机时的硬件信息,比如;CPU的信息:/proc/cpuinfo,内存信息:/pro/meminfo。2进程信息,数字命名的文件都是进程的信息,数字代表这个进程的PID。
/sys  用于输出当前系统上硬件设备相关信息的虚拟文件系统
/tmp 临时文件目录
/dev 设备文件目录
/media 便携式移动设备挂载目录,比如:U盘,光盘
/mnt  临时挂载用
/bin 供所有用户使用的基本命令,不能独立分区,系统启动时会用到的程序
/sbin  管理类的基本命令,不能独立分区,系统启动时会用到的程序
/lib 基本共享库文件,以及内核模块文件
/lib64 专用于64位系统上的共享库文件

 

2、根据名称查找文件

根据一个路径定位一个文件在哪儿,路径又分为绝对路径和相对路径:

  • 绝对路径:从根目录起始

  • 相对路径:从当前位置起始

 

#一个点表示当前目录

ls ./

 

#两个点表示上一级目录,即父目录

ls ../

 

#显示当前目录路径

pwd

 

#返回到自己的家目录

cd

 

#返回上一次的工作目录

cd -

 

#切换到父目录

cd .. 

 

#切换到当前用户的家目录,如果指定用户,就切换到指定用户的家目录,比如:cd ~tt,就切换到tt这个用户的家目录,前提是有权限

cd ~  

 

注意:

  • 系统有两个变量,来记录路径:PWD,OLDPWD

  • PWD,记录当前路径

  • OLDPWD,记录上一次路径

  • cd -,就是取OLDPWD这个变量的值

 

3、目录的管理

对于目录而言,只有该目录的子文件或子目录的名字,

 

3.1、查看目录

ls

  • -l ,输出权限、拥有者、拥有组、大小等详细信息

  • -d,查看目录的信息

  • -h,以人类可读的方式显示大小,按大小排序:-Sh

  • -a ,包含隐藏文件在内的所有文件,以点(.)开头的都是隐藏文件。

  • -R ,递归,包含子目录的内容

  • -t ,按时间排序,时间越近的越靠前,如果想反过,时间越久的越靠前,-tr

 

ls -l命令第一个字符的含义:

  • -代表是一个文件

  • d代表是一个目录

  • b 块设备文件

  • c 字符设备文件

  • l 连接文件

  • s 套接字文件,一般用于本地进程间的相互通讯

 

#以树形结构查看目录

tree

  • -d,只显示目录

  • -L 3,指定显示的层级

 

3.2、创建目录

mkdir 

  • -p 同时创建多级目录

  • -m 创建目录同时,给予权限,比如:mkdir -m 777 /tmp/tt

注意:创建目录时,一定要注意路径是否正确。

 

#以展开方式,创建

mkdir /mnt/d{1..9}

 

3.3、删除目录

    删除操作,一定要注意,确定你要删除的是谁,并且删除的确实是你想要删除的东西。

 

#这个命令只能删除空目录,如果目录下有文件,必须先把文件删除,才能删目录

rmdir 

 

#rm本意思是删除一个文件,加上-r选项,递归删除, 先删除该目录下的子文件和子目录,再删除指定目录

rm -r

 

#强制删除,不会作任何提示,很容易删错,如:rm -rf /tm/tt和rm -rf /tmp/tt/*两条命令结果是不一样的

rm -rf

 

3.4、目录的移动

#将tt这个目录移动到/root目录下,包括子目录和子文件也一起移动

mv /tmp/tt /root 

 

#把tt这个目录改个名字为dd

mv /tmp/tt /tmp/dd

 

3.5、目录的复制

#将目录及目录下的子文件和子目录一同复制,cp的本意是复制一个文件

cp -r 

 

4、文件的管理

4.1、创建文件

touch

  • 创建一个新的空文件

  • 更新文件的时间戳为当前时间。

 

注意:

  • 一个目录或文件有3种时间:

  • mtime 文件内容被修改时间,ls -l查看的就是这个时间

  • atime 文件最近一次被访问时间

  • ctime 文件属性(元数据)发生变化的时间,属性:权限、拥有者,拥有组。

 

#查看atime

ls -l /tmp/f1 --time=atime

 

#查看ctime

ls -l /tmp/f1 --time=ctime

 

#获取文件的元数据

#包括三个时间

stat /tmp/f1

 

#更改文件的修改时间为:20010101

touch -m -t 20010101 /mnt/f1

  • -m,修改时间

  • -a,访问时间

  • -c,如果文件不存在,不创建

 

4.2、查看文件

#统计文件行数、单词数、字符数

wc

  • -l,只统计行数

  • -w,单词数

  • -c,字符数

 

#按字母排序输出

sort /etc/passwd

  • -r,反序输出

  • -f,忽略大小写

  • -t,字段分隔符

  • -k,指定字段为标准排序

  • -n,按数值大小排序

  • -u,uniq,排序后去重

 

#去重,但不进行排序

uniq

  • -c,显示每行重复出现的次数

  • -d,仅显示重复过的行

  • -u,仅显示不曾重复的行

 

#把文件内容全部输出,加-n选项,显示行号

cat

 

#输出文件的换行符

cat -E

 

#反向查看文件

tac

 

more

  • 空格往尾部翻一屏

  • b往首部翻一屏

  • enter住尾部翻一行

  • 不能往上翻行

  • more还带有搜索功能,/搜索关键字,n下一个关键字,N上一个关键字

 

less

  • 用法和more类似,不同的是,less可以循环方式查看文件

  • j往下翻一行

  • k往上翻一行

  • 1G,跳至文件首部

  • G,跳至文件尾部

 

head

  • 默认显示文件的前10行

  • -n 选项可以指定只显示第几行。

 

#只显示第一行

head -n 1

 

#只显示文件的后10行,也可用-n选项指定行数

tail

 

#跟踪显示文件新追加的内容

tail -f 

 

4.3、复制文件

cp 

  • 复制多个文件时,最后一个参数必须为目录

 

#复制多个文件

cp file1 file2 /dir

 

#最常用的方法,保持文件的连接和属性,并递归处理。

#和cp -pdR一个意思,-p表示保持属性,-d表示保护文件的连接,-R表示递归

cp -a

 

4.4、移动文件

mv 

  • 移动一个文件

  • 也可用作重命名一个文件

 

mv file1 file2 /dir

 

4.5、删除文件

rm

rm file

 

4.6、其它工具

#通过探测文件内容判断文件类型,使用权限是所有用户

file

  • -v:在标准输出后显示版本信息,并且退出。

  • -z:探测压缩过的文件类型。

  • -L:允许符合连接。

  • -f name:从文件namefile中读取要分析的文件名列表。

 

注意:

  • file能识别的文件类型有目录、Shell脚本、二进制可执行文件、文本文件等

  • file命令不能探测包括图形、音频、视频等多媒体文件类型。

 

#diff命令用于两个文件之间的比较,并指出两者的不同,它的使用权限是所有用户

diff

  • -a:将所有文件当作文本文件来处理。

  • -b:忽略空格造成的不同。

  • -B:忽略空行造成的不同。

  • -c:使用纲要输出格式。

  • -H:利用试探法加速对大文件的搜索。

  • -I:忽略大小写的变化。

  • -n --rcs:输出RCS格式。

 

diff f1 f2

1c1

  • 前面的"1",表示f1的第1行有变化;

  • 中间的"c"表示变动的模式是内容改变(change)

  • 其他模式还有"增加"(a,代表addition)和"删除"(d,代表deletion)

  • 后面的"1",表示变动后变成f2的第1行。

 

cmp

  • compare的缩写,用来简要指出两个文件是否存在差异,它的使用权限是所有用户。

  • -l: 将字节以十进制的方式输出,并方便将两个文件中不同的以八进制的方式输出

 

5、通配符

    通配符,用于匹配符合相关条件的符号,一般用来匹配文件名和路径。

    通配符是由shell处理的, 它只会出现在命令的“参数”里。当shell在“参数”中遇到了通配符时,shell会将其当作路径或文件名去搜寻可能的匹配:若符合要求的匹配存在,则进行代换(路径扩展);否则就将该通配符作为一个普通字符传递给“命令”,然后再由命令进行处理。

 

通配符

解释

*

匹配任意长度的任意字符

?

匹配单个任意字符,多个字符就用多个?

[]

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

{}

匹配指定字符中的任意单个字符

[0-9]

匹配0到9中间任意一个字符

[1,3]

逗号表示只匹配1或3

[!1]

叹号表示非

[^1]

和叹号意思一样

[a-zA-Z]

表示任意一个大小写字母

 

5.1、字符集合

字符集

解释

[:space:]

代表空白字符,包括空白字符、TAB制表符(\t)、换页(\f)

[:punct:]

代表所有标点符号

[:lower:]

代表所有小写字母

[:upper:]

代表所有大写字母

[:alpha:]

代表所有大小写字母

[:digit:]

代表所有数字0-9

[:alnum:]

代表所有数字和大小写字母

 

注意:

  • 字符集的中括号"[]",不是通配符,如果要匹配,还要在外面加一个[]

 

5.2、实例

例1:查看mnt目录下,f开头,后面跟了一个数字的文件

ls /mnt/f[0-9]

ls /mnt/f[[:digit:]]

 

例2:查看f开头,后面跟了1或2的文件

ls /mnt/f{1,2}

 

例3:查看所有包含数字的文件

ls /mnt/*[0-9]*

ls /mnt/*[[:digit:]]*

例4:创建一个文件名带空格的文件

touch f\ 1

ls f\ 1

ls f[[:space:]]1

例5:查找文件名包含非字母和数字的文件

ls *[^[:alnum:]]*