Linux基础之文件目录

1 系统目录结构

1.1 系统目录介绍

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

1.2 Linux的目录结构

  • /bin: 用户命令存放的位置至关于Windows中的C:\Windows\system32
  • /sbin:系统管理使用的工具程序;

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

  • /boot: 引导加载器必须用到的各类静态文件,主要有Kernel,initramfs(initrd),grub等;
  • /dev: 存储特殊文件或设备文件,设备有字符设备(线性设备)和 块设备(随机设备)两种类型;bash

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

    • sd: 磁盘类型,特殊磁盘类型vd(KVM)
    • a: 磁盘排序,第一块磁盘为a,第二块磁盘为b,以此类推
    • 3: 表明一块磁盘的分区编号架构

      • 1-4: 表示主分区或扩展分区(前四个分区是并行存在,也就是说编号为1的分区 后能够为编号为3的分区)
      • 5- : 表示逻辑分区(逻辑分区的编号必须按照排序号进行)
  • /etc: 系统程序的配置文件,只能为静态文件;
  • /home: 普通用户的家目录集中位置。通常每一个普通用户的家目录是此目录下与用户同名额子目录;
  • /root: 管理员的家目录;
  • /lib: 为系统启动或根文件系统上的应用程序(/bin,/sbin等)提供共享库,以及为内核提供内核模块;less

    • libc.so.*: 动态连接的C库
    • ld*: 运行时连接器/加载器
    • modules: 用于存储内核模块的目录
  • /lib64: 64位系统特有的存放64位共享库的路径;

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

  • /media: 便携式设备挂载点,通常cdrom、floppy、u盘等都是挂载在该目录下;
  • /mnt:其余文件系统的临时挂载点;
  • /opt:附加应用程序的安装位置,可选路径;
  • /srv: 当前主机为服务提供的数据,主机特有的;
  • /tmp:为那些会产生临时文件的程序提供的用于存储临时文件的目录,可提供全部用户执行写入操做,有特有权限;
  • /usr: 全局共享只读文件目录,重要性仅次于根目录;ide

    • ./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 directorcd命令用于切换目录,也就是让当前用户切换到指定的目录下。

基本用法:

[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 statusstat命令能够查看一个文件或者一个文件系统的相关的信息。

基本用法:

[root@localhost ~]# stat filename

4.3 cp命令

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

基本用法:

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 directoriesrm命令用来删除指定的文件或目录。

基本用法:

rm [OPTION]… FILE...

经常使用选项:

-r: 递归删除(通常在删除目录时使用)
-f: 强制性删除,不提醒用户
-v: 删除时显示详细过程

4.5 mv命令

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

基本用法:

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 outputcat命令用来读取文件的内容,一次性将文件读取到内存中,以后显示的终端屏上。只适用于读取小文件。该命令还有像文件中写入内容的功能。

基本用法:

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

经常使用选项:

-n: 显示行号
-A: 显示文件中的全部字符,包括回车符和TAB符

特殊用法:

## 使用cat命令向指定的文件中写入内容:
[root@localhost ~]# cat >> a.txt <<EOF

5.2 more命令

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

基本用法:

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

翻页翻行功能:

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

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

5.3 less命令

less - opposite of moreless命令用来查看文件内容,相对于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 namelocate命令经过文件名来查找文件。

基本用法:

[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) commandswhich命令会显示当前shell下命令二进制文件所存的路径。只能查找系统PATH变量中所包含的目录下的命令(绝对路径)。

基本用法:

[root@localhost ~]# which locate

7.3 whereis命令

whereis - locate the binary, source, and manual page files for a commandwhereis命令显示定位某个命令的二进制文件、源码以及该命令手册文件的路径。非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 <<EOF
> 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 <<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

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 filescut命令用来截取文件中每一行的指定字段。

经常使用选项:

-d: 指定分隔符
-f: 数字,取第几列,好比-f3,6 取第三列和第六列
-c: 按字符取(空格也算)

cut命令使用案例:

## 过滤出文件里server以及552408925。
[root@localhost ~]# cut -d" " -f2,6 server.com
相关文章
相关标签/搜索