Loading

文件管理

文件管理

文件管理是对一个文件进行、创建、复制、移动、查看、编辑、压缩、查找、删除等等。linux一切皆文件,所有的修改最终都是对文件操作。

1 linux文件目录结构

几乎所有的计算机操作系统都是使用目录结构组织文件。一般使用树状的文件结构,所以该结构又被称为“目录树”。

windows的目录数据结构是森林,多根;linux是树,单根。

image

  • /根目录,所有的文件都在它的下面
  • bin二进制可执行文件,这个目录存放着最经常使用的命令,如ls,yum等等
  • boot这里存放的是与系统启动相关的文件,包括一些连接文件以及镜像文件,linux内核文件也在这里
  • dev是Device(设备)的缩写,该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的
  • etc用来存放配置文件和子目录,包括yum/rpm安装的软件配置文件等等
  • home普通用户的家目录,在创建用户时,每个用户要有一个默认登录和保存自己数据的位置,就是用户的主目录,如用户bob的主目录就是 /home/bob
  • root系统管理员用户家目录
  • run是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。
  • sbin这里存放的是系统管理员使用的系统管理程序
  • tmp存放临时文件
  • usr是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下
  • var在系统运行后才会渐渐占用硬盘容量的目录,目录主要是常态性变动文件,包括缓存(cache)、登录文件(logfile)以及某些软件运行所产生的文件,包括程序文件(lock file,run file),或者例如Mysql数据库的文件等

下面分别来介绍一些根目录下常见的文件夹

1.1 usr目录

是一个非常重要的目录,相当于win系统的C:Windows,目录结构如下

image

  • usr/bin/用户所用命令,根目录下的bin目录是软链接到这里的bin
  • usr/sbin/系统管理员命令,与用户相关,根目录下的sbin也是软链接这里的sbin
  • usr/etc/该目录用于存放配置文件
  • usr/local软件安装的目录,相当于C:Program files
  • usr/lib 所有可执行文件所需要的库文件,Glibc 32bit,类似于windows下的dll文件
  • usr/lib64所有可执行文件所需要的库文件,Glibc 64bit
  • usr/include各种头文件,编译文件等时需要使用
  • usr/games曾经包含游戏等文件,现在很少用到
  • usr/local本地系统管理员用来自由添加程序的目录

1.2 etc目录

存放的是配置文件。极其重要,所有服务的配置都在这个目录中,常用的有:

/etc/sysconfig/network-scripts/ifcfg-* # 网络配置文件
/etc/hostname # 系统主机名配置文件,主机名很重要,有些特殊服务要依赖主机名,没有主机名会报错起不来;修改了要重启:reboot
/etc/resolv.conf # dns客户端配置文件,域名解析服务器,一般我们不配置,因为网卡的配置好了,会覆盖掉它,网卡的优先级高
/etc/hosts # 本地域名解析配置文件,域名解析,先找自己的hosts,再去域名解析

1.3 var目录

存放一些常态性变动文件,比如缓存、日志、登陆文件等等。

# 查看用户登录登陆日志
cat /var/log/secure 

1.4 dev目录

该目录下存放的是 Linux 的外部设备,比如硬盘,硬盘分区,光驱,等等。

/dev/sd # 硬盘设备
/dev/null # 黑洞设备,只进不出。类似于垃圾回收站
/dev/random # 生成随机数的设备
/dev/zero # 能源源不断的产生数据,类似于取款机

# 还有一些这种文件sda sdb sdc sda1 sdb4,它们是磁盘文件
# linux中磁盘文件叫sd,第一个硬盘叫a,第二个叫b,sda1表示第一个磁盘的第一个分区,sdb4:第二个硬盘的第四个分区(服务可以插很多硬盘)

1.5 proc目录

根目录下的proc是反映系统当前进程的实时状态,如对应的进程停止则/proc下对应目录则会被删除

ls /proc # 可以看到很多id号,pid号,进程号,唯一

# 如果进程被关闭,id号的文件夹就没了
# id号每次启动都不唯一,只有一个进程唯一,systemd 是进程号1的进程,所有进程都是基于它派生出来的

1.6 其他文件夹

/media # 提供设备的挂载点,媒体文件。linux新增了盘符,需要手动挂载,把光盘里的数据,挂载到media目录
mount  /dev/cdrom /media/

/mnt # 提供设备的挂载点(同上)

/opt # 第三方工具,第三方软件默认安装的(mysql...)

/bin, /sbin, /lib, /lib64 # 这些文件都以软链接的形式链接到/usr/目录下

2 文件管理命令

2.1 创建文件

touch file              # 没有则创建,有则修改时间
touch file2 file3		# 创建两个文件
touch /home/od/file4 file5 # 绝对路径创建
touch file{a,b,c}       # {}集合,等价 touch a b c
touch file{1..10}		# 从1-10循环创建
touch file{a..z}		# 从a-z循环创建

2.2 创建文件夹

# 选项:-v 显示详细信息  -p 递归创建目录
mkdir dir1 # 当前目录创建dir1文件夹
mkdir /home/od/dir1 /home/od/dir2 # 绝对路径创建两个文件夹
mkdir -v /home/od/{dir3,dir4}  # -v参数 打印出详细信息;如果没有od则创建失败,大括号内写文件夹名字,写几个就创建几个
mkdir -pv /home/od/dir5/dir6 #-p 递归创建,如果没有od文件夹,则创建一个,没有dir5则创建一个,以此类推

2.3 删除

# 选项:-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

# 2.rm删除示例2
touch file{1..10}
touch {1..10}.pdf
rm -rf file*  # 以file开头的全删
rm -rf *.pdf   # 以.pdf结尾的删除

2.4 移动

mv file file1             #原地移动==改名,把file改名file1
mv file1 /tmp/            #移动文件至tmp目录
mv /tmp/file1 ./          #移动tmp目录的文件至当前目录
mv dir/ /tmp/             #移动整个dir目录至/tmp目录下

touch file{1..3}
mv file1 file2 file3 /opt/    #移动多个文件或至同一个目录

mkdir dir{1..3}
mv dir1/ dir2/ dir3/ /opt/     #移动多个文件夹至同一个目录

2.5 复制

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

cp file /tmp/file_copy	  #复制file到某个目录下
cp name /tmp/name11       #修改名称
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} # 把hosts复制一份,改名叫hosts.bak

2.6 查看文件内容

#------cat 文件查看
cp /etc/passwd ./pass
cat pass      #正常查看文件方式
cat -n pass   #-n显示文件有多少行
cat -A pass   #查看文件的特殊符号,比如文件中存在tab键
tac pass      #倒序查看文件
cat >> test2.txt <<EOF  # 可以输入内容,写入文件,以EOF结尾
ads
adf
EOF

#------less、more 文件查看,可以分页
less /etc/services    #使用光标上下翻动,空格进行翻页,q退出
more /etc/services    #使用回车上下翻动,空格进行翻页,q退出(有百分比)

#------head  文件查看,从头部开始
head pass     #查看头部内容,默认前十行
head -n5 pass #查看头部5行,使用-n指定
ps aux | head -5 # 只看头部5个进程;ps aux查看进程

#------tail
tail pass  # 查看文件尾部,默认10行
tail -20 /var/log/secure  # 查看文件尾部20行
tail -f /var/log/messages # -f动态查看文件尾部的变化
tailf /var/log/messages   # 查看文件尾部的变化
ps aux | tail -2	# 看尾部的2个进程

#------grep过滤文件内容
grep "^root" pass     #匹配以root开头的行
grep "bash$" pass     #匹配以bash结尾的行
grep -i "ftp" pass    #忽略大小写匹配
grep  -Ei "sync$|ftp" pass    #匹配文件中包含sync结尾或ftp字符串
ps aux | grep ssh   # 查看ssh进程是否运行

# ------上翻,下翻
control+b:下翻
control+f:上翻

2.7 文件的上传与下载

wget、curl联网下载文件

# 如果没有wget命令,首先需要安装
yum install wget -y
wget url地址 # 从远程下载到本地,默认下载到当前路径
wget -O /etc/yum/aaa.img url地址 # 参数-O 指定下载路径

# crul:浏览网络上资源,测试连通性,-o保存到本地
#选项: -O: 指定下载地址
curl -O /etc/yum/aaa.html https://www.baidu.com/

rz,sz上传下载文件

# 如果没有rz,sz命令,首先需要安装
yum install lrzsz -y 
rz              # 只能上传文件(最大不能超过4g)
sz /path/file # 只能下载文件

2.8 文件查找

文件查找

locate /etc/sh       #搜索etc目录下所有以sh开头的文件
locate -i /etc/sh    #搜索etc目录下,所有以sh开头的文件,-i 忽略大小写

命令查找

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

whereis ls       # 查找命令的路径、帮助手册、等
whereis -b ls    # 仅显示命令所在的路径,仅看二进制

# 对于内核相关的一些命令,用which whereis 是无法查询到的,需要使用type查询
type -a ls        # 查看命令的绝对路径(包括别名)
type -a for

2.9 字符处理

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

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

#1.首先创建一个文件,写入一写无序的内容
cat >> file.txt <<EOF
b:3
c:2
a:4
e:5
d:1
f:11
EOF

#2.使用sort下面对输出的内容进行排序
sort file.txt
a:4
b:3
c:2
d:1
e:5
f:11

#结果并不是按照数字排序,而是按字母排序。
#可以使用-t指定分隔符, 使用-k指定需要排序的列。
# -t 指定分隔符,-k指定列,按第二列排序
sort -t ":" -k2 file.txt
d:1
f:11 #第二行是11,因为按照ascii码进行排序
c:2
b:3
a:4
e:5

#按照排序的方式, 只会看到第一个字符,11的第一个字符是1, 按照字符来排序确实比2小。
#如果想要按照数字的方式进行排序, 需要使用 -n参数,按数字排序。
sort -t ":" -n -k2 file.txt
d:1
c:2
b:3
a:4
e:5
f:11

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

uniq [OPTION]... [INPUT [OUTPUT]]
#选项:-c  计算重复的行

#1.创建一个file.txt文件:
cat >>file2.txt <<EOF
abc
123
abc
123
EOF
#2.uniq需要和sort一起使用, 先使用sort排序, 让重复内容连续在一起才能去重
cat file.txt |sort
123
123
abc
abc
#3.使用uniq去除相邻重复的行
cat file.txt |sort|uniq
123
abc
#4.-c参数能统计出文件中每行内容重复的次数
cat file.txt |sort|uniq -c
2 123
2 abc

wc统计行号

wc [OPTION]... [FILE]...
#选项:-l显示文件行数 -c显示文件字节 -w显示文件单词

wc -l /etc/fstab      #统计/etc/fstab文件有多少行
wc -l /etc/services   #统计/etc/services 文件行号
ls |wc -l             #统计当前路径下有多少文件和文件夹
ps aux | grep ssh | wc -l #统计有多少ssh相关的进程

2.10 文件属性

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

-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
prw-------.  1 root root      0 Jan 20 10:36 /run/dmeventd-client
drwxrwxrwt. 61 root root   8192 Jan 21 13:01 /tmp

############################################
-rw-------. 1:第一个字符是文件类型,其他则是权限
1           2:硬链接次数
root        3:文件属于哪个用户
root        4:文件属于哪个组
1418        5:文件大小
May30 13:58 6,7,8:最新修改的时间与日期
a.cfg       9:文件或目录名称
############################################

文件类型

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

  • “-”表示普通文件(文本, 二进制, 压缩, 图片, 日志等)
  • “d”表示目录
  • “l”表示链接文件
  • “p”表示管道文件
  • “b”表示块设备文件,存储设备硬盘 /dev/sda1, /dev/sda2
  • “c”表示字符设备文件,终端 /dev/tty1, /dev/zero
  • “s”表示套接字文件,进程间通信(socket)

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

file /etc/hosts
/etc/hosts: ASCII text

file /dev/sda
/dev/sda: block special

file /dev/tty1
/dev/tty1: character special

file /home
/home: directory

file /run/dmeventd-client
/run/dmeventd-client: fifo (named pipe)

权限

其属性可分为三段:[rwx][r-x][r-x],其中第一段表示文件创建者/所有者对该文件所具有的权限,第二段表示创建者/所有者所在的组的其他用户所具有的权限,第三段表示其他组的其他用户所具有的权限。(本人的权限,组内的权限,组外的权限)

  • r(Read,读取权限):对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目录的权限。
  • w(Write,写入权限):对文件而言,具有新增、修改文件内容的权限;对目录来说,具有删除、移动目录内文件的权限。
  • x(Execute,执行权限):对文件而言,具有执行文件的权限;对目录来说,该用户具有进入目录的权限。

软链接/硬链接

文件有文件名与数据,在Linux上被分成两个部分:用户数据 (user data) 与元数据 (metadata)。

  • 用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方,我们将其称为Block。

  • 元数据,即文件的附加属性,如文件大小、创建时间、所有者等信息,我们称其为Inode。

在Linux中,inode是文件元数据的一部分,但其并不包含文件名,inode号即索引节点号,文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块。

image

Linux 系统引入了两种链接:硬链接 ( hard link ) 与软链接(soft link)

  • 软链接相当于Windows的快捷方式,软链接文件会将inode指向源文件的block,当我们访问这个软链接文件时,其实访问的是源文件本身。那么当我们对一个文件创建多个软链接,其实就是多个inode指向同一个block。当我们删除软链接文件时,其实只是删除了一个inode指向,并不会对源文件源文件造成影响,但如果删除的是源文件则会造成所有软链接文件失效。

image

  • 若一个inode号对应多个文件名,则称这些文件为硬链接。换言之,硬链接就是同一个文件使用了多个别名,如下图hard link 就是 file 的一个别名,他们有共同的 inode。

image

# 举例
touch /root/file
ln -s /root/file /tmp/file_bak # root下file链接到/tmp下并重命名为file_bak -s参数:软链接
# 软链接目录
mkdir /soft/nginx1.1 -p
ln -s /soft/nginx1.1/ /soft/nginx # soft下的nginx1.1/文件夹软链接到/soft/nginx
# 硬链接
ln  /root/file /tmp/file_hard # 创建硬链接

所有者,组

表示该文件的所有者/创建者(owner)及其所在的组(group)。

文件大小

如果是文件,则表示该文件的大小,单位为字节。
如果是目录,则表示该目录符所占的大小,并不表示该目录下所有文件的大小。

修改日期

该文件最后创建/修改的日期时间。

文件名称

在大多数的linux shell窗口中,还能用颜色来区分不同文件的属性。

  • 灰白色表示普通文件
  • 亮绿色表示可执行文件
  • 亮红色表示压缩文件
  • 灰蓝色表示目录
  • 亮蓝色表示链接文件
  • 亮黄色表示设备文件

总结

image

posted @ 2021-11-16 20:13  yyyz  阅读(28)  评论(0编辑  收藏  举报