Linux下一切皆文件,在Linux中是如何对不一样的文件进行管理的,首先在Linux中将相同类型的文件存在指定的目录中,不一样的发行商可能采用不一样的标准去归类建立不一样的目录,这样就会形成不少管理上的困扰。因而就有了所谓的Filesystem Hierarchy Standard(FHS)
标准,其主要的目的是规范每一个特定的目录下应该要存放什么文件。这样就能方便用户对文件进行管理。shell
Linux中的目录结构在逻辑上是以树状的形式存在的,能够经过如下明林查看根目录以及子目录:数据库
[root@localhost ~]# tree -L 1 / / ├── bin -> usr/bin ├── boot ├── dev ├── etc ├── home ├── lib -> usr/lib ├── lib64 -> usr/lib64 ├── media ├── mnt ├── opt ├── proc ├── root ├── run ├── sbin -> usr/sbin ├── srv ├── sys ├── tmp ├── usr └── var 19 directories, 0 files
C:\Windows\system32
;注意:在Centos 7中/bin和/sbin两个目录是/usr/bin和/usr/sbin目录的软连接(Windows中的快捷方式)安全
/dev: 存储特殊文件或设备文件,设备有字符设备(线性设备)和 块设备(随机设备)两种类型;bash
系统的磁盘文件存放在/dev目录下,好比/dev/sda3:网络
3: 表明一块磁盘的分区编号架构
/lib: 为系统启动或根文件系统上的应用程序(/bin,/sbin等)提供共享库,以及为内核提供内核模块;less
注意:在Centos 7中/lib和/lib64两个目录是/usr/lib和/usr/lib64目录的软连接curl
/usr: 全局共享只读文件目录,重要性仅次于根目录;ide
net.ipv4.ip_forward
,虚拟为net/ipv4/ip_forward
,存储在/proc/sys/
目录下,所以其完整路径为/proc/sys/net/ipv4/ip_forward
;Linux系统的文件目录是以目录树的形式存储的,那么在Linux系统中咱们如何可以找到一个文件所在的位置?联想现实生活中,咱们要去某个地方去找某我的,首先必须先知道那我的在什么地方,而后依照路线去找到那我的。一样在Linux系统中要找到一个文件,首先要知道该文件大概在哪一个目录下,而后经过路径去找到该文件。因而就有了相对路径和绝对路径:工具
相对路径:根据当前环境
相对路径,关键点在于当前在什么路径下。假设当前目录在/usr/local
下,那么它的上层目录(/usr
目录);
绝对路径:惟一的路径
Linux系统采用了目录树的文件组织结构,在Linux下每一个目录或文件均可以从根目录处开始寻找。好比/usr/bin
目录,这种从根目录开始的全路径被称为"绝对路径",绝对路径必定是以"/"
开头的,如何确认当前所在的目录,可使用pwd
命令查看:
[root@localhost ~]# pwd /root
对于目录的管理主要有,建立和删除目录,以及目录的移动或者重命名。这节主要看在Linux下如何建立和删除目录,下节结合文件的管理对目录的移动和重命名进行说明。在介绍建立和删除目录以前,先看一下两个命令:
ls - list directory contents
列出指定目录下的内容。
基本用法:
[root@localhost ~]# ls / bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr
经常使用选项:
-a --all 列出全部文件,包括隐藏的文件 -l 以长格式的方式列出文件信息 -d 显示目录自己,不显示目录中的内容 -h 人性化显示,按照咱们习惯的单位显示文件大小 -i 显示文件的i节点号
ls
命令使用案例:
## 以长格式显示全部文件 [root@localhost ~]# ls -al ## 显示目录自己的信息 [root@localhost ~]# ls -ld /etc drwxr-xr-x. 144 root root 8192 Feb 25 21:01 /etc ## -l选项以长格式显示文件信息 [root@localhost ~]# ls -l total 8 . 1 root root 1257 Aug 28 00:13 anaconda-ks.cfg
ls -l
用来显示文件详细信息,那么-l
选项显示这7列分表表明什么:
第一列:权限,-rw-r--r--
rw-
表明文件所属者的权限:
r--
表明文件所属组的权限r--
表明文件其余用户的权限change director
,cd
命令用于切换目录,也就是让当前用户切换到指定的目录下。
基本用法:
[root@localhost ~]# cd /etc [root@localhost etc]# pwd /etc
cd
特殊用法:
[root@localhost ~]# cd - #切换至上次所在目录 [root@localhost ~]# cd ~ # 切换至当前用户的家目录 [root@localhost ~]# cd # 切换至当前用户的家目录 [root@localhost ~]# cd . # .表明当前目录,通常在拷贝、移动文件等状况下使用 [root@localhost ~]# cd .. # 切换至当前目录的上级目录
make directory
建立一个当前目录下不存在的目录
基本用法:
[root@localhost ~]# mkdir a
经常使用选项:
-p 递归建立目录,若是上级要建立目录的上级目录不存在则建立,若是不存在不报错 -v 显示建立目录详情
示例:
## 在/tmp/viktor目录下建立a_c、a_d、b_c、b_d目录: [root@localhost ~]# mkdir -pv /tmp/viktor/{a,b}_{c,d} # 这块使用了命令行展开,以后说明
rmdir - remove empty directories
,删除空目录
基本用法:
[root@localhost ~]# rmdir -v a
若是该目录下有文件或者目录,rmdir命令就不能将该目录删除。
Linux一切皆为文件,在对Linux进行配置时,很大程度上就是处理文件的过程,因此掌握文件的相关操做是很是有必要的文件的通常操做有:建立、复制、删除、移动、重命名、以及查看文件相关的信息。
touch - change file timestamps
,当文件不存在时建立文件,当文件存在时更新文件的时间戳信息。
[root@localhost ~]# touch /tmp/viktor_{1..10}.txt [root@localhost ~]# touch filename [root@localhost ~]# touch filename_1 filename_2 [root@localhost ~]# touch /home/server/file5 file5 [root@localhost ~]# touch file{1..10} [root@localhost ~]# touch file{a..z}
stat - display file or file system status
,stat
命令能够查看一个文件或者一个文件系统的相关的信息。
基本用法:
[root@localhost ~]# stat filename
cp - copy files and directories
,cp
命令用来对文件或目录进行复制。
基本用法:
cp 源文件/目录 目标文件/目录
cp命令在复制文件或者目录的过程当中,牵涉到用户所要复制的文件或者目录时一个仍是多个,目标文件或者目录是否存在,存在以及不存在会是什么样的状况,下面分别来看下cp命令中的单源复制和多源复制时注意事项:
单源复制:
cp [OPTION]… [-T] SOURCE DEST
多源复制:
cp [OPTION]… SOURCE… DIRECTORY cp [OPTION]… -t DIRECTORY SOURCE…
经常使用选项:
-i: 交互式复制,若是目标文件存在,提醒用户是否覆盖; -f: 强制覆盖目标文件; -r –R: 递归复制目录; -d: 复制符号连接文件自己,而非其指向的源文件; -a: -dR --preserve=all, archive,用于实现归档; --preserve = mode: 权限 ownership: 属主和属组 timestamps: 时间戳 context: 安全标签 xattr: 扩展属性 links: 符号连接 all: 上述全部属性
rm - remove files or directories
,rm
命令用来删除指定的文件或目录。
基本用法:
rm [OPTION]… FILE...
经常使用选项:
-r: 递归删除(通常在删除目录时使用) -f: 强制性删除,不提醒用户 -v: 删除时显示详细过程
mv - move (rename) files
,mv
用来移动(重命名)文件或目录。
基本用法:
mv [OPTION]... [-T] SOURCE DEST
mv
命令也牵扯到单源移动和多源移动:
单源移动:对于单源移动,分为目标是否为目录,以及目标文件是否存在。
多源移动:对于多源移动,目标必须为目录,不然会报错。
## 在用户家目录下建立6个文件 song1.mp3 ~ song6.mp3 [root@localhost ~]# touch song{1,2,3,4,5,6}.mp3 ## 把上述建立的songX.mp3文件移动到/Music目录(不存在则建立) [root@localhost ~]# mkdir /Music [root@localhost ~]# mv song* /Music/ ## 在用户家目录下建立三个目录,分别为 friends, family, work [root@localhost ~]# mkdir friends family work ## 切换到friends目录下,把/Music目录下的song1.mp3 ~ song6.mp3拷贝到当前目录 [root@localhost ~]# cd friends/ [root@localhost friends]# cp /Music/song* ./ ## 切换到family目录下,把/Music目录下的song1.mp3 ~ song6.mp3移动到当前目录 [root@localhost ~]# cd family/ [root@localhost family]# mv /Music/song* ./
Linux中有许多用来查看文件内容的命令,这些命令用在查看文件时的不一样需求下,包括cat、more、less、head、tail命令,其中more和less命令属于分页显示文件的命令。
cat - concatenate files and print on the standard output
,cat
命令用来读取文件的内容,一次性将文件读取到内存中,以后显示的终端屏上。只适用于读取小文件。该命令还有像文件中写入内容的功能。
基本用法:
cat [OPTION]... [FILE]...
经常使用选项:
-n: 显示行号 -A: 显示文件中的全部字符,包括回车符和TAB符
特殊用法:
## 使用cat命令向指定的文件中写入内容: [root@localhost ~]# cat >> a.txt <<EOF
more - file perusal filter for crt viewing
,more
命令用来分页显示文件内容,适用于读取大文件的内容。
基本用法:
[root@localhost ~]# more anaconda-ks.cfg
翻页翻行功能:
空格键翻页;回车键一次滚动一行
more
命令的缺点在于,对于文件的内容只能向后查看。相对于more
命令,less
命令更加灵活。
less - opposite of more
,less
命令用来查看文件内容,相对于more
命令,因为less
命令可以反复的对文件内容进行查看,而被普遍利用,man手册中就使用的less
命令来查看命令使用手册。
基本用法:
[root@localhost ~]# less anaconda-ks.cfg
翻屏:
空格键: 向文件尾翻一屏; b: 向文件首部翻一屏; Ctrl+d: 向文件尾部翻半屏; Ctrl+u: 向文件首部翻半屏; 回车键: 向文件尾部翻一行; k: 向文件首部翻一行; G: 跳转至最后一行; #G: 跳转至指定行; lG: 跳转至文件首部;
文本搜索:
/keyword: 从文件首部向文件尾部依次查找; ?keyword: 从文件尾部向文件首部依次查找; n: 与查找命令方向相同; N: 与查找命令方向相反;
退出:
q: quit
有时候用户只须要查看文件的首部几行或者尾部几行,那么head和tail命令就能派上用场。
head - output the first part of files
,显示指定文件的指定几行,默认显示文件的头10行。
基本用法:
[root@localhost ~]# head /etc/passwd
经常使用选项:
-n: 指定显示文件头n行
[root@localhost ~]# head -n 3 /etc/passwd
tail - output the last part of files
,显示文件尾的任意行,默认显示倒数10行。
基本用法:
[root@localhost ~]# tail /etc/passwd
经常使用选项:
-n: 指定显示文件倒数n行 -f: 追踪显示文件末尾的内容(常用在对日志文件的监控)
[root@localhost ~]# tail -n 3 /etc/passwd [root@localhost ~]# tail -n 3 -f /var/log/messages
wget //文件下载 -O //指定下载地址。更更名称 -T //超时时间 -q //安静下载(不显示wget输出) --spider //网络爬虫 curl //文件下载 curl –o http://www.baidu.com yum install lrzsz rz //文件上传 sz //文件下载 sz filename
对于系统管理员来讲,有时候须要在系统中查找一个文件,或者是查找一个命令以及该命令手册所在的位置,这样就能方便管理员的管理,那么在文件和命令的查找所用的命令有locate
, which
, whereis
, find
(后面详解),下面分别介绍这些命令的用法:
locate - find files by name
,locate
命令经过文件名来查找文件。
基本用法:
[root@localhost ~]# locate /etc/p
locate
命令会查找指定目录下包含给出字符串开头的全部文件。locate /etc/p
就会查找/etc
目录下以p
开头的全部文件。
经常使用选项:
-i: 查找时忽略大小写
该命令的优势在于查找速度快,由于其存在一个数据库,每次查找命令在这个数据库中查找。可是,该命令查找不是实时查找,若是有一个新文件,可是数据库没有更新,那么经过locate
命令就查找不到,这也是其缺点所在,经过updatedb
命令更新locate
数据库。find
命令能够实时查询文件,可是在查找的效率上比不上locate
命令。
which - shows the full path of (shell) commands
,which
命令会显示当前shell下命令二进制文件所存的路径。只能查找系统PATH
变量中所包含的目录下的命令(绝对路径)。
基本用法:
[root@localhost ~]# which locate
whereis - locate the binary, source, and manual page files for a command
,whereis
命令显示定位某个命令的二进制文件、源码以及该命令手册文件的路径。非PATH
变量查找,因此查找的范围比which
要广。
基本用法:
[root@localhost ~]# whereis ls
经常使用选项:
-b 仅查找二进制文件 -m 仅查找命令手册文件 -s 仅查找源文件
对文本文件进行处理时,有时候须要对文件中的一些字符进行处理,好比说按照某个字段对文件中内容进行排序、或者是统计文件中内容重复的行数等操做,那么和这些操做相关的命令就是字符处理命令。
sort - sort lines of text files
,对文本文件中的每一行进行排序。
基本用法:
[root@localhost ~]# sort /etc/passwd
不加任何选项的sort命令,默认以文件中的第一个字段以及空格为分隔符进行排序。
经常使用选项:
-r: 倒序 -n: 按数字排序 -t: 指定分隔符(默认为空格) -k: 指定第几列,指定第几列第几个字符(指定1,1 3.1,3.3)
sort
的用法示例1:
[root@localhost ~]# cat >> sort.txt <<EOF > b:3 > c:2 > a:4 > e:5 > d:1 > f:11 > EOF
[root@localhost ~]# sort sort.txt ## sort默认从小到大排序。 a:4 b:3 c:2 d:1 e:5 f:11
[root@localhost ~]# sort -t ":" -k2 sort.txt d:1 f:11 c:2 b:3 a:4 e:5
看到输出的内容,可能有一个疑问,为何第二行的是11,这一行不该该是排在最后一行的吗?上面使用的命令只会看到第一个字符,11的第一个字符是1,按照字符的排序确实比2小。若是想要按照数字的形式进行排序,须要使用-n选项。
[root@localhost ~]# sort -t ":" -n -k2 sort.txt d:1 c:2 b:3 a:4 e:5 f:11 ## 按照第二列的数字对sort.txt文件进行逆序排序。 [root@localhost ~]# sort -t: -k2nr sort.txt f:11 e:5 a:4 b:3 c:2 d:1
sort
用法示例2:
[root@localhost ~]# cat >> test.txt <<EOF > 192.168.3.1 > 192.168.3.2 > 192.168.3.3 > 192.168.2.20 > 192.168.2.21 > 192.168.2.22 > 192.168.0.151 > 192.168.0.152 > 192.168.0.153 > 192.168.1.10 > 192.168.1.11 > 192.168.1.12 > 192.168.1.1 > 192.168.2.2 > 192.168.3.3 > 192.168.2.20 > 192.168.1.21 > 192.168.2.22 > 192.168.0.151 > 192.168.1.152 > 192.168.0.153 > 192.168.3.10 > 192.168.1.11 > 192.168.3.12 > EOF
[root@localhost ~]# sort -t. -k3.1,3.1n -k4.1,4.3n test.txt 192.168.0.151 192.168.0.151 192.168.0.152 192.168.0.153 192.168.0.153 192.168.1.1 192.168.1.10 192.168.1.11 192.168.1.11 192.168.1.12 192.168.1.21 192.168.1.152 192.168.2.2 192.168.2.20 192.168.2.20 192.168.2.21 192.168.2.22 192.168.2.22 192.168.3.1 192.168.3.2 192.168.3.3 192.168.3.3 192.168.3.10 192.168.3.12
uniq - report or omit repeated lines
,若是文件中有多行彻底相同的内容,固然是但愿能删除重复的行,同时还能够统计出彻底相同的行出现的总次数,那么就可使用uniq
命令解决这个文件(可是必须配合sort命令使用)。
基本用法:
[root@localhost ~]# cat uniq.txt | sort | uniq
uniq
命令须要结合sort
命令一块儿使用,先使用sort
进行排序,让文中重复的内容连续出如今一块儿,而后再去重。
经常使用选项:
-c: 计算重复的行出现的次数
[root@localhost ~]# cat uniq.txt | sort | uniq -c
cut - remove sections from each line of files
,cut
命令用来截取文件中每一行的指定字段。
经常使用选项:
-d: 指定分隔符 -f: 数字,取第几列,好比-f3,6 取第三列和第六列 -c: 按字符取(空格也算)
cut
命令使用案例:
## 过滤出文件里server以及552408925。 [root@localhost ~]# cut -d" " -f2,6 server.com