linux查看目录组织,Linux基础之文件目录

1 系统目录结构

1.1 系统目录介绍

Linux下一切皆文件,在Linux中是如何对不同的文件进行管理的,首先在Linux中将相同类型的文件存在指定的目录中,不同的发行商可能采用不同的标准去归类创建不同的目录,这样就会造成很多管理上的困扰。于是就有了所谓的Filesystem Hierarchy Standard(FHS)标准,其主要的目的是规范每个特定的目录下应该要存放什么文件。这样就能方便用户对文件进行管理。

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

1.2 Linux的目录结构

/bin: 用户命令存放的位置相当于Windows中的C:\Windows\system32;

/sbin:系统管理使用的工具程序;

注意:在Centos 7中/bin和/sbin两个目录是/usr/bin和/usr/sbin目录的软链接(Windows中的快捷方式)

/boot: 引导加载器必须用到的各种静态文件,主要有Kernel,initramfs(initrd),grub等;

/dev: 存储特殊文件或设备文件,设备有字符设备(线性设备)和 块设备(随机设备)两种类型;

系统的磁盘文件存放在/dev目录下,比如/dev/sda3:

sd: 磁盘类型,特殊磁盘类型vd(KVM)

a: 磁盘排序,第一块磁盘为a,第二块磁盘为b,以此类推

3: 代表一块磁盘的分区编号

1-4: 表示主分区或扩展分区(前四个分区是并行存在,也就是说编号为1的分区 后可以为编号为3的分区)

5- : 表示逻辑分区(逻辑分区的编号必须按照排序号进行)

/etc: 系统程序的配置文件,只能为静态文件;

/home: 普通用户的家目录集中位置。一般每个普通用户的家目录是此目录下与用户同名额子目录;

/root: 管理员的家目录;

/lib: 为系统启动或根文件系统上的应用程序(/bin,/sbin等)提供共享库,以及为内核提供内核模块;

libc.so.*: 动态链接的C库

ld*: 运行时链接器/加载器

modules: 用于存储内核模块的目录

/lib64: 64位系统特有的存放64位共享库的路径;

注意:在Centos 7中/lib和/lib64两个目录是/usr/lib和/usr/lib64目录的软链接

/media: 便携式设备挂载点,一般cdrom、floppy、u盘等都是挂载在该目录下;

/mnt:其他文件系统的临时挂载点;

/opt:附加应用程序的安装位置,可选路径;

/srv: 当前主机为服务提供的数据,主机特有的;

/tmp:为那些会产生临时文件的程序提供的用于存储临时文件的目录,可提供所有用户执行写入操作,有特有权限;

/usr: 全局共享只读文件目录,重要性仅次于根目录;

./bin, ./sbin, ./lib, ./lib64

./include: C程序头文件

./share: 命令手册页和自带文档等架构特有的文件存储位置

./local: 另一个层级目录,让系统管理员安装本地应用程序,也通常用于安装第三方程 序

./XllR64: X-Windows程序安装位置

./src: 程序源码文件的存储位置

/var: 存储常发生变化的数据文件;

/proc:基于内存的虚拟文件系统,用于实现为内核及进程存储其他相关信息,它们多为内核参数,例如net.ipv4.ip_forward,虚拟为net/ipv4/ip_forward,存储在/proc/sys/目录下,因此其完整路径为/proc/sys/net/ipv4/ip_forward;

/sys:sysfs文件系统的挂载点,为虚拟文件系统提供了一种比proc更为理想的访问内核数据的途径,主要作用于为管理Linux设备提供一种统一模型的接口。

2 文件路径定位

Linux系统的文件目录是以目录树的形式存储的,那么在Linux系统中我们如何能够找到一个文件所在的位置?联想现实生活中,我们要去某个地方去找某个人,首先必须先知道那个人在什么地方,然后依照路线去找到那个人。同样在Linux系统中要找到一个文件,首先要知道该文件大概在哪个目录下,然后通过路径去找到该文件。于是就有了相对路径和绝对路径:

2.1 相对路径

相对路径:根据当前环境

相对路径,关键点在于当前在什么路径下。假设当前目录在/usr/local下,那么它的上层目录(/usr目录);

2.2 绝对路径

绝对路径:唯一的路径

Linux系统采用了目录树的文件组织结构,在Linux下每个目录或文件都可以从根目录处开始寻找。比如/usr/bin目录,这种从根目录开始的全路径被称为"绝对路径",绝对路径一定是以"/"开头的,如何确认当前所在的目录,可以使用pwd命令查看:

[root@localhost ~]# pwd

/root

3 目录管理命令

对于目录的管理主要有,创建和删除目录,以及目录的移动或者重命名。这节主要看在Linux下如何创建和删除目录,下节结合文件的管理对目录的移动和重命名进行说明。在介绍创建和删除目录之前,先看一下两个命令:

3.1 ls命令

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--

第一个横杆代表文件的类型:

-: 代表普通文件

d: 代表目录

l: 表示链接文件

b: 表示块设备文件

c: 表示字符设备文件

s: 管道文件

rw-代表文件所属者的权限:

r: 写权限

w: 读权限

x: 执行权限

r--代表文件所属组的权限

r--代表文件其他用户的权限

第二列:引用计数。文件的引用激素代表该文件的硬链接个数,而目录的引用计数代表该目录有多少个一级子目录。

第三列:文件所有者 ,也就是这个文件属于哪个用户。默认所有者是问价的建立者。

第四列:所属组。默认所属组是文件建立用户的有效组,一般情况下就是建立用户的所在组。

第五列:文件大小。默认单位是字节。

第六列:文件修改时间。文件状态修改时间或文件数据修改时间都会更改这个时间,注意这个时间不是文件的创建时间。

第七列:文件名。

3.2 cd命令

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 .. # 切换至当前目录的上级目录

3.3 mkdir命令

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} # 这块使用了命令行展开,之后说明

3.4 rmdir命令

rmdir - remove empty directories,删除空目录

基本用法:

[root@localhost ~]# rmdir -v a

如果该目录下有文件或者目录,rmdir命令就不能将该目录删除。

4 文件管理命令

Linux一切皆为文件,在对Linux进行配置时,很大程度上就是处理文件的过程,所以掌握文件的相关操作是非常有必要的文件的一般操作有:创建、复制、删除、移动、重命名、以及查看文件相关的信息。

4.1 touch命令

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}

4.2 stat命令

stat - display file or file system status,stat命令可以查看一个文件或者一个文件系统的相关的信息。

基本用法:

[root@localhost ~]# stat filename

4.3 cp命令

cp - copy files and directories,cp命令用来对文件或目录进行复制。

基本用法:

cp 源文件/目录 目标文件/目录

cp命令在复制文件或者目录的过程中,牵涉到用户所要复制的文件或者目录时一个还是多个,目标文件或者目录是否存在,存在以及不存在会是什么样的情况,下面分别来看下cp命令中的单源复制和多源复制时注意事项:

单源复制:

cp [OPTION]… [-T] SOURCE DEST

情况1:如果目标不存在,则事先创建此文件,并复制源文件的内容至目标文件中;

情况2:如果目标存在,并且是非目录文件,则覆盖目标文件;

情况3:如果目标存在,并且是目录文件,则先在目标目录下创建一个与源文件同名的文件,并复制源文件的内容。

多源复制:

cp [OPTION]… SOURCE… DIRECTORY

cp [OPTION]… -t DIRECTORY SOURCE…

情况1:如果目标不存在,报错;

情况2:如果目标存在,并且是非目录,错误;

情况3:如果目标存在,并且是目录,分别复制每个文件夹至目标目录中,并保持原名。

常用选项:

-i: 交互式复制,如果目标文件存在,提醒用户是否覆盖;

-f: 强制覆盖目标文件;

-r –R: 递归复制目录;

-d: 复制符号链接文件本身,而非其指向的源文件;

-a: -dR --preserve=all, archive,用于实现归档;

--preserve =

mode: 权限

ownership: 属主和属组

timestamps: 时间戳

context: 安全标签

xattr: 扩展属性

links: 符号链接

all: 上述所有属性

4.4 rm命令

rm - remove files or directories,rm命令用来删除指定的文件或目录。

基本用法:

rm [OPTION]… FILE...

常用选项:

-r: 递归删除(一般在删除目录时使用)

-f: 强制性删除,不提醒用户

-v: 删除时显示详细过程

4.5 mv命令

mv - move (rename) files,mv用来移动(重命名)文件或目录。

基本用法:

mv [OPTION]... [-T] SOURCE DEST

mv命令也牵扯到单源移动和多源移动:

单源移动:对于单源移动,分为目标是否为目录,以及目标文件是否存在。

情况1:目标为目录, 此时会将源文件移动到指定的目录下

情况2:目标为文件并该文件存在, 此时会提醒用户是否覆盖目标文件,使用-f选项可以强制移动;

情况3:目标为文件并且该文件不存在,此时,如果目标不存在,就会创建相应的目标文件,然后将源文件移动至目标文件,相当于对源文件进行重命名;

多源移动:对于多源移动,目标必须为目录,否则会报错。

4.6 练习

## 在用户家目录下创建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* ./

5 文件查看命令

Linux中有许多用来查看文件内容的命令,这些命令用在查看文件时的不同需求下,包括cat、more、less、head、tail命令,其中more和less命令属于分页显示文件的命令。

5.1 cat命令

cat - concatenate files and print on the standard output,cat命令用来读取文件的内容,一次性将文件读取到内存中,之后显示的终端屏上。只适用于读取小文件。该命令还有像文件中写入内容的功能。

基本用法:

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

常用选项:

-n: 显示行号

-A: 显示文件中的所有字符,包括回车符和TAB符

特殊用法:

## 使用cat命令向指定的文件中写入内容:

[root@localhost ~]# cat >> a.txt <

5.2 more命令

more - file perusal filter for crt viewing,more命令用来分页显示文件内容,适用于读取大文件的内容。

基本用法:

[root@localhost ~]# more anaconda-ks.cfg

翻页翻行功能:

空格键翻页;回车键一次滚动一行

more命令的缺点在于,对于文件的内容只能向后查看。相对于more命令,less命令更加灵活。

5.3 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

5.4 head命令

有时候用户只需要查看文件的首部几行或者尾部几行,那么head和tail命令就能派上用场。

head - output the first part of files,显示指定文件的指定几行,默认显示文件的头10行。

基本用法:

[root@localhost ~]# head /etc/passwd

常用选项:

-n: 指定显示文件头n行

[root@localhost ~]# head -n 3 /etc/passwd

5.5 tail命令

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

6 文件下载命令

wget //文件下载

-O //指定下载地址。更改名称

-T //超时时间

-q //安静下载(不显示wget输出)

--spider //网络爬虫

curl //文件下载

curl –o http://www.baidu.com

yum install lrzsz

rz //文件上传

sz //文件下载

sz filename

7 命令查找命令

对于系统管理员来说,有时候需要在系统中查找一个文件,或者是查找一个命令以及该命令手册所在的位置,这样就能方便管理员的管理,那么在文件和命令的查找所用的命令有locate, which, whereis, find(后面详解),下面分别介绍这些命令的用法:

7.1 locate命令

locate - find files by name,locate命令通过文件名来查找文件。

基本用法:

[root@localhost ~]# locate /etc/p

locate命令会查找指定目录下包含给出字符串开头的所有文件。locate /etc/p就会查找/etc目录下以p开头的所有文件。

常用选项:

-i: 查找时忽略大小写

该命令的优点在于查找速度快,因为其存在一个数据库,每次查找命令在这个数据库中查找。但是,该命令查找不是实时查找,如果有一个新文件,但是数据库没有更新,那么通过locate命令就查找不到,这也是其缺点所在,通过updatedb命令更新locate数据库。find命令可以实时查询文件,但是在查找的效率上比不上locate命令。

7.2 which命令

which - shows the full path of (shell) commands,which命令会显示当前shell下命令二进制文件所存的路径。只能查找系统PATH变量中所包含的目录下的命令(绝对路径)。

基本用法:

[root@localhost ~]# which locate

7.3 whereis命令

whereis - locate the binary, source, and manual page files for a command,whereis命令显示定位某个命令的二进制文件、源码以及该命令手册文件的路径。非PATH变量查找,所以查找的范围比which要广。

基本用法:

[root@localhost ~]# whereis ls

常用选项:

-b 仅查找二进制文件

-m 仅查找命令手册文件

-s 仅查找源文件

8 字符处理命令

​ 对文本文件进行处理时,有时候需要对文件中的一些字符进行处理,比如说按照某个字段对文件中内容进行排序、或者是统计文件中内容重复的行数等操作,那么和这些操作相关的命令就是字符处理命令。

8.1 sort命令

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 <

> b:3

> c:2

> a:4

> e:5

> d:1

> f:11

> EOF

对sort.txt文件进行排序

[root@localhost ~]# sort sort.txt ## sort默认从小到大排序。

a:4

b:3

c:2

d:1

e:5

f:11

按照数字对sort.txt文件中的行进行排序

[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 <

> 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

8.2 uniq命令

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

8.3 cut命令

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值