180天Linux小白到大神-Linux文件管理

02.Linux文件管理

02.Linux文件管理

1.文件管理概述

1.1 系统目录结构

1.1.1 命令相关目录/bin

1.1.2 用户家相关目录/home

1.1.3 系统文件目录/usr

1.1.4 系统启动目录/boot

1.1.5 配置文件目录/etc

1.1.6 设备相关目录/dev

1.1.7 可变的目录/var

1.1.8 虚拟系统目录/proc

1.2 文件路径定位

1.2.1 为什么要进行定位

1.2.2 如何对文件进行定位

1.2.3 绝对路径与相对路径

1.2.4 路径切换命令cd

2.文件管理命令

2.1 文件操作类命令

2.1.1 touch文件创建

2.1.2 mkdir目录创建

2.1.3 tree显示目录结构

2.1.4 cp文件或目录复制

2.1.5 mv文件移动命令

2.1.6 rm文件或目录删除

2.2 文件查看类命令

2.2.1 cat命令

2.2.2 less-more命令

2.2.3 head-tail 命令

2.2.4 grep过滤数据

2.3 文件下载类命令

2.3.1 wget命令

2.3.2 curl命令

2.3.3 rz-sz命令

2.4 文件查找类命令

2.4.1 which命令

2.4.2 whereis命令

2.5 字符处理类命令

2.5.1 sort命令

2.5.2 uniq命令

2.5.3 cut命令

2.5.4 wc命令

2.6 课堂练习题

2.6.1 练习1

2.6.2 练习2

2.6.4 练习3

2.6.3 练习4

2.6.4 练习5

2.7 文件属性

2.8 文件类型

3.链接文件

3.1 Inode与Block

3.2 软连接

3.5 硬连接

1.文件管理概述

谈到 Linux 文件管理,首先我们需要了解的就是,我们要对文件做些什么事情?

其实无非就是对一个文件进行、创建、复制、移动、查看、编辑、压缩、查找、删除、等等

如:当我们想修改系统的主机名称,是否应该知道文件在哪,才能去做对应的修改?

1.1 系统目录结构

几乎所有的计算机操作系统都是使用目录结构组织文件。具体来说就是在一个目录中存放子目录和文件, 而在子目录中又会进一步存放子目录和文件,以此类推形成一个树状的文件结构,由于其结构很像一棵树的分支, 所以该结构又被称为“目录树”;

Windows :以多根的方式组织文件 C:\ D:\

Linux :以单根的方式组织文件 /

1.1.1 命令相关目录/bin

存放命令相关的目录

/bin 普通用户使用的命令 /bin/ls, /bin/date /sbin 管理员使用的命令 /sbin/service

1.1.2 用户家相关目录/home

存放用户相关数据的家目录,比如 windows 不同的用户登陆系统显示的桌面背景不一样

/home 普通用户的家目录, 默认为/home/username

/root 超级管理员root的家目录, 普通用户无权操作

1.1.3 系统文件目录/usr

存放系统相关文件的目录

/usr 相当于 C:\Windows

/usr/local 软件安装的目录,相当于 C:\Program

/usr/bin/ 普通用户使用的应用程序(重要)

/usr/sbin 管理员使用的应用程序(重要)

/usr/lib 库文件 Glibc 32bit /usr/lib64 库文件 Glibc 64bit

1.1.4 系统启动目录/boot

存放系统启动时内核与grub引导菜单

/boot 存放的系统启动相关的文件,如: kernel, grub (引导装载程序)

1.1.5 配置文件目录/etc

/etc存放系统配置文件目录,后续所有服务的配置都在这个目录中

/etc/sysconfig/network-script/ifcfg- ,网络配

置文件

/etc/hostname 系统主机名配置文件

1.1.6 设备相关目录/dev

/dev存放设备文件的目录,比如硬盘,硬盘分区,光驱,

等等

/dev/null 黑洞设备,只进不出。类似于垃圾回收站

/dev/random 生成随机数的设备

/dev/zero 能源源不断的产生数据,类似于取款机,随时随地取钱*

1.1.7 可变的目录/var

/var,存放一些变化文件,比如/var/log/下的日志文件

/var/tmp,进程产生的临时文件

/tmp,系统临时目录(类似于公共厕所)

1.1.8 虚拟系统目录/proc

虚拟的文件系统 (如对应的进程停止则/proc下对应目录则会被删除)

/proc,反映当前系统正在运行进程的实时状态,类似于汽车在运行过程中的仪表板,能够看到汽车的油耗、时速、转向灯、故障等等

1.2 文件路径定位

在我们开始操作文件之前,首先需要对文件的路径进行定位。

1.2.1 为什么要进行定位

你要在哪个目录下创建文件?

你要将文件复制到什么地方?

你要删除的文件在什么地方?

1.2.2 如何对文件进行定位

比如: /etc/hostname 整个文件中包含文件名称以及文件所在的位置,我们将这个叫做路径,也就是说我们是通过路径对文件进行定位。例:下图所示的 message 所在的路径是?

FQ1:/home/boy/file 和 /home/oldgirl/file 是否是同

一个文件?

FQ2:/abc/test 和 abc/test 是一样的吗?

不一定:取决于你当前所在的位置;

1.2.3 绝对路径与相对路径

绝对路径: 只要从/开始的路径,比如 /home/alice/file

相对路径: 相对于当前目录来说,比如 a.txt ./a.txt

…/bob/a.mp3

. 和 … 的是什么意思

一个点代表当的是当前目录;

两个点代表的是当前目录的上层目录;

小结:所谓的(.)和(…)目录实际上属于相对路径的一种表示形式;

1.2.4 路径切换命令cd

例子如下:

cd 绝对路径 cd /etc/hostname

cd 相对路径 cd test/abc cd . cd …


cd # cd -

#切换目录,例: cd /etc

#切换回上一次所在的目录

cd ~ #切换回当前用户的家目录,注意:root和普通用户是否有所不同吗?

cd . #代表当前目录,一般在拷贝、移动等情况下使用 cp /etc/hostname ./

cd … #切换回当前目录的上级目录

2.文件管理命令

2.1 文件操作类命令

2.1.1 touch文件创建

touch file #无则创建,有则修改

时间

touch file2 file3

touch /home/od/file4 file5

touch file{a,b,c}

touch a b c

touch file{1…10}

touch file{a…z}

#{}集合,等价

2.1.2 mkdir目录创建

选项:-v 显示详细信息 -p 递归创建目录

mkdir dir1

mkdir /home/ob/dir1 /home/ob/dir2

mkdir -v /home/ob/{dir3,dir4}

mkdir -pv /home/ob/dir5/dir6

mkdir -pv /home/{ob/{diu,but},boy}

2.1.3 tree显示目录结构

选项: -L: 显示目录树的层级

tree /home/ob/ #显示当前目录下的结构

/home/ob/

├── but

├── dir1

├── dir2

├── dir3

├── dir4

├── dir5

│ └── dir6 └── diu

2.1.4 cp文件或目录复制

#选项: -v:详细显示命令执行的操作 -r: 递归处理目录与子目录 -p: 保留源文件或目录的属性

cp file /tmp/file_copy

cp name /tmp/name

#不修改名称

cp file /tmp/

cp -p file /tmp/file_p

#不修改名称

#-p保持原文件或目录的属

cp -r

/etc/ /tmp/

#复制目录需要使用-r参

数, 递归复制

cp -rv /etc/hosts /etc/hostname /tmp #拷贝多个文件至一个目录

cp -rv /etc/{hosts,hosts.bak}

cp -rv /etc/hosts{,-org}

2.1.5 mv文件移动命令

mv file file1 #原地移动算改名

mv file1 /tmp/ #移动文件至tmp目录

mv /tmp/file1 ./ #移动tmp目录的文件至当

前目录

mv dir/ /tmp/ #移动目录至/tmp目录下

touch file{1…3}

mv file1 file2 file3 /opt/ #移动多个文件或至

同一个目录

mkdir dir{1…3}

mv dir1/ dir2/ dir3/ /opt #移动多个目录至同

一个目录

2.1.6 rm文件或目录删除

#选项:-r: 递归 -f: 强制删除 -v: 详细过程

rm file.txt

#删除文件,

默认rm存在alias别

名,rm -i所以会提醒是否删除文件

rm -f file.txt #删除文件,

不提醒


rm -r dir/ # rm -rf dir/

#递归删除目录,会提示

#强制删除目录,不提醒(慎用)


#1.rm删除示例

mkdir /home/dir10

touch /home/dir10/{file2,file3,.file4}

rm -f /home/dir10/* //不包括隐藏文件

ls /home/dir10/ -a

. … .file4


#2.rm删除示例2

touch file{1…10}

touch {1…10}.pdf

rm -rf file*

rm -rf *.pdf

2.2 文件查看类命令

2.2.1 cat命令

#------cat

cp /etc/passwd ./pass

cat pass #正常查看文件方式

cat -n pass #-n显示文件有多少行

cat -A pass #查看文件的特殊符号,比如文件中存在tab

tac pass #倒序查看文件

2.2.2 less-more命令

#------less、more	
# less /etc/services	#使用光标上下翻动,空格进行
翻页,q退出		
# more /etc/services	#使用回车上下翻动,空格进行
翻页,q退出		

2.2.3 head-tail 命令
#------head
# head pass #查看头部内容,默认前十行

head -n5 pass #查看头部5行,使用-n指定

#------tail

tail pass

tail -20 /var/log/secure

tail -f /var/log/messages #-f查看文件尾部的变化

tailf /var/log/messages #查看文件尾部的变化

2.2.4 grep过滤数据

#------grep过滤文件内容 # grep “^root” pass # grep “bash$” pass # grep -v “ftp” pass

#匹配以root开头的行

#匹配以bash结尾的行

#匹配除了包含ftp的内容,其

他全部打印

grep -i “ftp” pass

#忽略大小写匹配

grep -Ei “sync$|ftp” pass #匹配文件中包含sync结尾或ftp字符串

grep -n -A 2 “Failed” /var/log/secure #匹

配/var/log/secure文件中Failed字符串,并打印它的下2行

grep -n -B 2 “Failed” /var/log/secure #匹

配/var/log/secure文件中Failed字符串,并打印它的上2行

grep -n -C 2 “Failed” /var/log/secure #匹

配/var/log/secure文件中Failed字符串,并打印它的上下2

2.3 文件下载类命令

2.3.1 wget命令

#CentOS7 系统最小化安装默认没有wget命令,需要进行安装 # yum install wget -y

#下载互联网上的文件至本地

#wget http://mirrors.aliyun.com/repo/Centos-7.repo

#将阿里云的centos-7.repo下载到/etc/yum.repos.d/并改名为CentOS-Base.repo -O参数指定

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

2.3.2 curl命令

#仅查看这个url地址的文件的内容

curl http://mirrors.aliyun.com/repo/Centos-

7.repo

#将阿里云的centos-7.repo下载到/etc/yum.repos.d/并改名为CentOS-Base.repo -o参数指定

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

#练习:请下载一个图片至于/opt目录下(不要修改名称),最少使用2中方式, URl地址为:

http://fj.xuliangwei.com/public/ks.jpeg #1.wget
[root@www ~]# cd /opt [root@www opt]# wget http://fj.xuliangwei.com/public/ks.jpeg

[root@www ~]# wget -O /opt/ks.jpeg http://fj.xuliangwei.com/public/ks.jpeg

#2.curl

[root@www ~]# curl -o /opt/ks2.jpeg http://fj.xuliangwei.com/public/ks.jpeg

2.3.3 rz-sz命令

yum install lrzsz -y #不安装软件则无法执行该命令

rz #只能上传文件,不支持上传文件夹,不支持大于4个G上传,也不支持断电续传

sz /path/file #只能下载文件,不支持下载文件夹

2.4 文件查找类命令

2.4.1 which命令

which ls #查找ls命令的绝对路径

type -a ls #查看命令的绝对路径(包括别名)

2.4.2 whereis命令

whereis ls # 查找命令的路径、帮助手册、等

whereis -b ls # 仅显示命令所在的路径

2.5 字符处理类命令

2.5.1 sort命令

在有些情况下,需要对应一个无序的文本文件进行数据的排
sort
序,这时就需要使用 进行排序了。

sort [OPTION]… [FILE]…

-r:倒序 -n:按数字排序 -t:指定分隔符(默认空格) - k:指定第几列, 指定几列几字符(指定1,1 3.1,3.3)

#1.首先创建一个文件,写入一写无序的内容

[root@www ~]# cat >> file.txt <<EOF

b:3

c:2

a:4

e:5

d:1

f:11

EOF

#2.使用sort下面对输出的内容进行排序

[root@www ~]# sort file.txt

a:4

b:3

c:2

d:1

e:5

f:11

#结果并不是按照数字排序,而是按字母排序。

#可以使用-t指定分隔符, 使用-k指定需要排序的列。

[root@www ~]# sort -t “:” -k2 sort.txt d:1
f:11 #第二行为什么是11?不应该按照顺序排列?

c:2

b:3

a:4

e:5

#按照排序的方式, 只会看到第一个字符,11的第一个字符是1,按照字符来排序确实比2小。

#如果想要按照数字的方式进行排序, 需要使用 -n参数。

[root@www ~]# sort -t “:” -n -k2 p.txt

d:1

c:2

b:3

a:4

e:5

f:11

#测试案例,下载文件

http://fj.xuliangwei.com/public/ip.txt,对该文件

进行排序

[root@www ~]# sort -t. -k3.1,3.1nr -k4.1,4.3nr ip.txt

2.5.2 uniq命令

如果文件中有多行完全相同的内容,当前是希望能删除重复的行,同时还可以统计出完全相同的行出现的总次数, 那么就可以使用uniq 命令解决这个问题(但是必须配合sort 使用)。

uniq [OPTION]… [INPUT [OUTPUT]]

#选项:-c 计算重复的行

#1.创建一个file.txt文件:

[root@www ~]# cat file.txt abc

123

abc

123

#2.uniq需要和sort一起使用, 先使用sort排序, 让重复内容连续在一起

[root@www ~]# sort file.txt

123

123

abc

abc

#3.使用uniq去除相邻重复的行 [root@www ~]# sort file.txt |uniq 123

abc

#4.-c参数能统计出文件中每行内容重复的次数 [root@www ~]# sort file.txt |uniq -c

2 123

2 abc

#面试题: 请统计分析如下日志,打印出访问最高前10的IP

2.5.3 cut命令

cut OPTION… [FILE]…

#选项:-d 指定分隔符 -f 数字,取第几列 –f3,6三列和6列 -

c 按字符取(空格也算)

#echo “Im xlw, is QQ 552408925” >file.txt #过滤出文件里 xlw以及552408925

#实现上述题目几种思路

cut -d " " -f2,5 file.txt

cut -d " " -f2,5 file.txt |sed ‘s#,##g’

sed ‘s#,# #g’ file.txt | awk -F " " ‘{print $2 " " $5}’

awk ‘{print $2,$5}’ file.txt |awk -F ‘,’ ‘{print $1,$2}’

awk -F “[, ]” ‘{print $2,$6}’ file.txt

awk -F ‘[, ]+’ ‘{print $2,$5}’ file.txt

2.5.4 wc命令

wc [OPTION]… [FILE]…

#选项:-l显示文件行数 -c显示文件字节 -w显示文件单词

wc -l /etc/fstab

#统计/etc/fstab文件有多少

wc -l /etc/services

#统计/etc/services

文件行

#练习题: 过滤出/etc/passwd以nologin结尾的内容,并统计有多少行

扩展统计文件行号的方法

grep -n “.*” /etc/services | tail -1

cat -n /etc/services | tail -1

awk ‘{print NR $0}’ /etc/services | tail -1

2.6 课堂练习题

2.6.1 练习1

分析如下日志,统计每个域名被访问的次数。*

[root@student tmp]# cat web.log http://www.example.com/index.html http://www.example.com/1.html http://post.example.com/index.html http://mp3.example.com/index.html http://www.example.com/3.html http://post.example.com/2.html

awk -F ‘/’ ‘{print $3}’ web.log|sort -rn|uniq –c

cut -d / -f3 web.log|sort -rn|uniq –c

2.6.2 练习2

使用awk取出系统的IP地址,使用多种方法实现

1.我要取的值在哪里

2.如何缩小取值范围(行)

3.如何精确具体内容(列)

2.6.4 练习3

将 /etc/sysconfig/selinux 文件中的 SELINUX=enforcing 替换成SELINUX=disabled

2.6.3 练习4

将 /etc/passwd 文件中的第一行中的第一列和最后一列位置进行交换。

2.6.4 练习5

现有 1-100 个文件,需要保留 75,76,78 三个文件,其余全部删除。grep、awk、sed

2.7 文件属性

当我们使用 ls -l 列目录下所有文件时,通常会以长格式的方式显示,其实长格式显示就是我们 Windows 下看到的文件详细信息,我们将其称为文件属性,那整个文件的属性分为十列。

[root@www ~]# ls -l ks.cfg

-rw-------. 1 root root 4434 May 30 13:58

ks.cfg

-rw-------. ①:第一个字符是文件类型,其他则是权限

1 ②:硬链接次数

root ③:文件属于哪个用户

root ④:文件属于哪个组

4434 ⑤:文件大小

May30 13:58 ⑥⑦⑧:最新修改的时间与日期

ks.cfg ⑨:文件或目录名称

2.8 文件类型

通常我们使用颜色或者后缀名称来区分文件类型,但很多时候不是很准确,所以我们可以通过 ls -l 以长格式显示一个文件的属性,通过第一列的第一个字符来近一步的判断文件具体的类型。

[root@www ~]# ll -d /etc/hosts /tmp /bin/ls /dev/sda /dev/tty1 /etc/grub2.cfg /dev/log /run/dmeventd-client

-rwxr-xr-x. 1 root root 117656 Jun 30 2016 /bin/ls

srw-rw-rw-. 1 root root 0 Jan 20 10:35
/dev/log
brw-rw----. 1 root disk 8, 0 Jan 20 10:36
/dev/sda
crw–w----. 1 root tty 4, 1 Jan 20 10:36
/dev/tty1
lrwxrwxrwx. 1 root root 22 Jan 13 11:31
/etc/grub2.cfg -> …/boot/grub2/grub.cfg
-rw-r–r--. 1 root root 199 Jan 20 11:03
/etc/hosts
drwxrwxrwt. 61 root root 8192 Jan 21 13:01
/tmp

文件类型说明

文件类型字 类型含义

  • 普通文件(文本, 二进制, 压缩, 图片, 日志等)

d 目录文件

b 设备文件(块设备)存储设备硬盘 /dev/sda,
/dev/sr0

c 设备文件(字符设备),终端 /dev/tty1

s 套接字文件,进程与进程间的一种通信方式
(socket)

l 链接文件

但有些情况下,我们无法通过ls -l文件的类型,比如: 一个文件,它可能是普通文件、也可能是压缩文件、或者是命令文件等,那么此时就需要使用file来更加精准的判断这个文件的类型

[root@www ~]# file /etc/hosts /etc/hosts: ASCII text

[root@www ~]# file /bin/ls

/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=aa7ff68f13de25936a098016243ce57c3 c982e06, stripped

[root@www ~]# file /dev/sda /dev/sda: block special

[root@www ~]# file /dev/tty1 /dev/tty1: character special

[root@www ~]# file /etc/grub2.cfg /etc/grub2.cfg: broken symbolic link to `…/boot/grub2/grub.cfg

[root@www ~]# file /home

/home: directory

Linux 文件扩展名不代表任何含义,仅为了我们人能更好的识别该文件是什么类型。

https://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux _031_linuxtime.html)

3.链接文件

3.1 Inode与Block

文件有文件名与数据,在Linux上被分成两个部分:数据 data 与文件元数据 metadata

1.数据data block ,数据块是用来记录文件真实内容的地方,我们将其称为 Block

2.元数据metadata ,用来记录文件大小、创建时间、所有者等信息,我们将其称为 Inode

3.需要注意:Inode 不包含文件名称,inode 仅包含文件的元数据信息,具体来说有以下内容:

文件的字节数

文件的 User ID Group ID

文件的读、写、执行权限

文件的时间戳

链接数,即有多少文件名指向这个 inode

文件数据 block 的位置

每个 inode 都是一个编号,操作系统是通过 Inode 来识别不同的文件。

对于系统来说,文件名只是 inode 便于识别的别名,

或者绰号。(便于我们人识别。)

表面上,用户是通过文件名打开的文件,实际上系统内部这个过程分为如下三步:

首先,系统找到这个文件名对应的 inode 编号

其次,通过 inode 编号,获取 inode 信息 最后,根据 inode 信息,找到文件数据所在的 block ,读出数据。

3.2 软连接

什么是软连接:

软链接相当于 Windows 的快捷方式,软链接文件会将 inode 指向源文件的 block 当我们访问这个软链接文件时,其实访问的是源文件本身;

软连接使用场景

软件升级

代码发布

软链接场景实践

#1.准备网站1.1版本代码

[root@www ~]# mkdir /data/rainbow-v1.1 -p [root@www ~]# echo “123” > /data/rainbow-v1.1/index.html

#2.创建软链接

[root@www ~]# ln -s /data/rainbow-v1.1/ /data/rainbow

[root@www ~]# ll /data/ drwxr-xr-x. 2 root root 6 3月 5 12:23 dir

lrwxrwxrwx. 1 root root 19 3月 10 12:09 rainbow -> /data/rainbow-v1.1/

drwxr-xr-x. 2 root root 24 3月 10 12:09 rainbow-v1.1

#3.检查网站程序

[root@www ~]# cat /data/rainbow/index.html 123

#4.新更新一个网站的程序代码

[root@www ~]# mkdir /data/rainbow-v1.2 [root@www ~]# echo “456” > /data/rainbow-v1.2/index.html

#5.升级

[root@www ~]# rm -f /data/rainbow && ln -s /data/rainbow-v1.2/ /data/rainbow [root@www ~]# cat /data/rainbow/index.html 456

#6.回退

[root@www ~]# rm -f /data/rainbow && ln -s /data/rainbow-v1.1/ /data/rainbow [root@www ~]# cat /data/rainbow/index.html 123

3.5 硬连接

硬链接类似于超时有多个门,无论丛哪个门进入,看到的内容都是一样的。如果关掉一扇门,那影响进入超市?回到系统中,我们对硬链接的解释: 不同的文件名指向同一个 inode ,简单的说就是指向同一个真实的数据源。

硬链接与软链接区别

1)ln命令创建硬链接,ln -s命令创建软链接

2)目录不能创建硬链接,并且硬链接不可以跨越分区

系统;

3)软链接支持对目录创建,同时也支持跨越分区系

统;

4)硬链接文件与源文件的inode相同,软链接文件与源

文件inode不同;

5)删除软链接文件,对源文件及硬链接文件无任何影

响;

6)删除文件的硬链接文件,对源文件及链接文件无任

何影响;

7)删除链接文件的源文件,对硬链接无影响,会导致

软链接失效;

8)删除源文件及其硬链接文件,整个文件会被真正的删除;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值