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:]]*