龙空技术网

Linux干货 | 运维需知道的Linux文件管理

十维教育 268

前言:

而今你们对“centos垃圾箱在哪”大致比较着重,看官们都需要学习一些“centos垃圾箱在哪”的相关文章。那么小编在网络上搜集了一些对于“centos垃圾箱在哪””的相关内容,希望兄弟们能喜欢,你们一起来学习一下吧!

1.文件管理概述

1.Bash Shell对文件进行管理

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

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

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

2.内容摘要

系统目录结构

文件路径定位

文件管理命令

文件类型file

链接文件ln

文件编辑vim

2.系统目录结构

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

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

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

如下图为Centos7的目录结构

2.1 存放命令相关的目录

/bin, 普通用户使用的命令 /bin/ls, /bin/date

/sbin,管理员使用的命令 /sbin/service

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

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

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

2.3 系统文件目录

/usr,相当于C:\Windows

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

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

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

/usr/lib,库文件Glibc 32bit

/usr/lib64,库文件Glibc 64bit

2.4 启动目录

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

2.5 配置文件目录

/etc,极其重要,后续所有服务的配置都在这个目录中

/etc/sysconfig/network-script/ifcfg-,网络配置文件

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

/etc/resolv.conf,dns客户端配置文件

/etc/hosts,本地域名解析配置文件

2.6 可变的目录与临时目录

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

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

/tmp,系统临时目录

2.7 设备目录文件

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

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

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

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

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

/proc,反映系统当前进程的实时状态

PS:类似于小汽车的仪表板,能够看到汽车是否有故障,或者是否缺油了。

2.9 PS: 在Linux7系统中, /bin, /sbin, /lib, /lib64都以软链接的形式链接到/usr/目录下

/bin --> /usr/bin

/sbin --> /usr/sbin

lib -> usr/lib

lib64 -> usr/lib64

3.文件路径定位

在我们开始操作文件前,首先需要对文件进行定位,比如:

你要在哪创建什么文件? 你要将文件复制到什么地方? 或者你要删除的文件在什么地方?

那什么是定位: 比如/etc/hostname,整个文件中包含文件名称以及文件所在的位置,我们将这个叫做路径,那么路径就是对文件进行定位的一种方式。例:如下图的message所在的路径是?

提问FQ: /home/oldboy/file 和/home/oldgirl/file是否是同一个文件?

3.1 每个目录下都有一个.和..的目录是干啥的?

一个点代表当的是当前目录, 两个点代表的是当前目录的上层目录。

假设当前目录在/usr/下, 那么它的上层(/)目录用../表示, 而/usr/的下层(local)目录则用./local表示。

3.2 那什么是绝对路径,什么又是相对路径呢?

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

相对路径: 相对于当前目录来说,比如 a.txt ./a.txt ../bob/a.mp3 [加入: 此时在目录/home/alice]

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

3.3 绝对路径与相对路径示例

#绝对路径[root@bgx /]# useradd alice[root@bgx /]# touch /home/alice/file1[root@bgx /]# touch ~/file2[root@bgx /]# touch ~alice/file3#相对路径[root@bgx /]# mkdir abc[root@bgx /]# touch ../file3[root@bgx /]# touch file4[root@bgx /]# touch abc/file5

cd改变目录,常见的使用方法

# cd 绝对路径 cd /etc/hostname# cd 相对路径 cd test/abc cd . cd ..-------------------------------------# cd #切换目录,例: cd /etc# cd - #切换回上一次所在的目录# cd ~ #切换回当前用户的家目录,注意:root和普通用户是否有所不同吗?# cd . #代表当前目录,一般在拷贝、移动等情况下使用 cp /etc/hostname ./# cd .. #切换回当前目录的上级目录

4.系统文件管理

4.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.目录创建命令mkdir

# 选项:-v 显示详细信息 -p 递归创建目录# mkdir dir1# mkdir /home/od/dir1 /home/od/dir2# mkdir -v /home/od/{dir3,dir4} # mkdir -pv /home/od/dir5/dir6# mkdir -pv /home/{od/{diu,but},boy}

3.以树状显示目录结构命令tree

# 选项: -L: 显示目录树的层级# tree /home/od/ #显示当前目录下的结构/home/od/├── but├── dir1├── dir2├── dir3├── dir4├── dir5│ └── dir6└── diu

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

--------------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 #移动多个目录至同一个目录

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

4.2 文件管理之:查看文件内容(cat tac less more head tail tailf grep ...)

#------cat# cp /etc/passwd ./pass# cat pass #正常查看文件方式# cat -n pass #-n显示文件有多少行# cat -A pass #查看文件的特殊符号,比如文件中存在tab键# tac pass #倒序查看文件#------less、more# less /etc/services #使用光标上下翻动,空格进行翻页,q退出# more /etc/services #使用回车上下翻动,空格进行翻页,q退出#------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 #查看文件尾部的变化#------grep过滤文件内容# grep "^root" pass #匹配以root开头的行# grep "bash$" pass #匹配以bash结尾的行# 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行

4.3 文件管理之:联网下载文件(wget、curl)、文件上传与下载(rz、sz)

--------------wget、curl联网下载文件--------------

#选项: -O: 指定下载地址# wget -O /etc/yum.repos.d/CentOS-Base.repo 选项: -o: 指定下载地址# curl -o /etc/yum.repos.d/CentOS-Base.repo 

--------------rzsz上传下载文件--------------

# yum install lrzsz -y #不安装软件则无法执行该命令# rz #只能上传文件文件上传# sz /path/file #只能下载文件

4.4 文件管理之:文件或命令查找(locate、which、whereis、find)

--------------文件查找--------------

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

--------------命令查找--------------

# which ls #查找ls命令的绝对路径# whereis ls //查找命令的路径、帮助手册、等# whereis -b ls //仅显示命令所在的路径# type -a ls #查看命令的绝对路径(包括别名)

4.5 文件管理之:字符处理命令(sort、uniq、cut、sed、awk、wc、)

--------------sort排序--------------

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

sort [OPTION]... [FILE]...# -r:倒序 -n:按数字排序 -t:指定分隔符(默认空格) -k:指定第几列, 指定几列几字符(指定1,1 3.1,3.3)#1.首先创建一个文件,写入一写无序的内容[root@etiantian ~]# cat >> file.txt <<EOFb:3c:2a:4e:5d:1f:11EOF#2.使用sort下面对输出的内容进行排序[root@etiantian ~]# sort file.txta:4b:3c:2d:1e:5f:11#结果并不是按照数字排序,而是按字母排序。#可以使用-t指定分隔符, 使用-k指定需要排序的列。[root@etiantian ~]# sort -t ":" -k2 sort.txtd:1f:11 #第二行为什么是11?不应该按照顺序排列?c:2b:3a:4e:5#按照排序的方式, 只会看到第一个字符,11的第一个字符是1, 按照字符来排序确实比2小。 #如果想要按照数字的方式进行排序, 需要使用 -n参数。[root@etiantian ~]# sort -t ":" -n -k2 p.txtd:1c:2b:3a:4e:5f:11#测试案例,下载文件,对该文件进行排序[root@etiantian ~]# sort -t. -k3.1,3.1nr -k4.1,4.3nr ip.txt

--------------uniq去重--------------

uniq [OPTION]... [INPUT [OUTPUT]]#选项:-c 计算重复的行#1.创建一个file.txt文件:[root@etiantian ~]# cat file.txtabc123abc123#2.uniq需要和sort一起使用, 先使用sort排序, 让重复内容连续在一起[root@etiantian ~]# cat file.txt |sort123123abcabc#3.使用uniq去除相邻重复的行[root@etiantian ~]# cat file.txt |sort|uniq123abc#4.-c参数能统计出文件中每行内容重复的次数[root@etiantian ~]# cat file.txt |sort|uniq -c 2 123 2 abc

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

--------------wc统计行号--------------

wc [OPTION]... [FILE]...#选项:-l显示文件行数 -c显示文件字节 -w显示文件单词# wc -l /etc/fstab #统计/etc/fstab文件有多少行# wc -l /etc/services #统计/etc/services 文件行号#扩展方法# grep -n ".*" /etc/services | tail -1# awk '{print NR $0}' /etc/services | tail -1# cat -n /etc/services | tail -1

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

[root@student tmp]# cat web.log  awk -F '/' '{print $3}' web.log|sort -rn|uniq –c# cut -d / -f3 web.log|sort -rn|uniq –c

习题: 使用awk取出系统的IP地址图解

5.系统文件属性

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

[root@etiantian ~]# 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 ⑨:文件或目录名称

6.系统文件类型

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

[root@etiantian ~]# 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/lssrw-rw-rw-. 1 root root 0 Jan 20 10:35 /dev/logbrw-rw----. 1 root disk 8, 0 Jan 20 10:36 /dev/sdacrw--w----. 1 root tty 4, 1 Jan 20 10:36 /dev/tty1lrwxrwxrwx. 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/hostsprw-------. 1 root root 0 Jan 20 10:36 /run/dmeventd-clientdrwxrwxrwt. 61 root root 8192 Jan 21 13:01 /tmp#说明- #普通文件(文本, 二进制, 压缩, 图片, 日志等) d #目录文件b #设备文件(块设备)存储设备硬盘 /dev/sda1, /dev/sda2c #设备文件(字符设备),终端 /dev/tty1, /dev/zeros #套接字文件, 进程间通信(socket)p #管道文件l #链接文件

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

[root@etiantian ~]# file /etc/hosts/etc/hosts: ASCII text[root@etiantian ~]# 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]=aa7ff68f13de25936a098016243ce57c3c982e06, stripped[root@etiantian ~]# file /dev/sda/dev/sda: block special[root@etiantian ~]# file /dev/tty1/dev/tty1: character special[root@etiantian ~]# file /etc/grub2.cfg/etc/grub2.cfg: broken symbolic link to `../boot/grub2/grub.cfg'[root@etiantian ~]# file /home/home: directory[root@etiantian ~]# file /run/dmeventd-client/run/dmeventd-client: fifo (named pipe)[root@etiantian ~]# ll but-rw-r--r-- 1 root root 42125 Apr 1 12:26 but[root@etiantian ~]# file butbut: Zip archive data, at least v1.0 to extract

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

7.系统链接文件

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

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

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

在Linux中,inode是文件元数据的一部分但其并不包含文件名,inode号即索引节点号)

文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块。图1.展示了程序通过文件名获取文件内容的过程。

Linux 系统引入了两种链接:硬链接 (hard link) 与软链接(又称符号链接,即 soft link 或 symbolic link)

7.1 什么是软链接

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

7.2 什么是硬链接

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

7.3 软链接实践

#文件软链接示例touch /root/fileln -s /root/file /tmp/file_bakll /tmp/file_bak //root下file链接到/tmp下并重命名为file_bak#目录软链接示例mkdir /soft/nginx1.1 -pln -s /soft/nginx1.1/ /soft/nginxll /soft/nginx //查看链接指向#软链接使用场景1.软件升级2.企业代码发布 3.不方便目录移动

7.4 硬链接实践

#文件硬链接示例ln /root/file /tmp/file_hardll /tmp/file_hard#PS:目录不能创建硬链接,硬链接文件可以用rm命令删除

7.5 硬链接与软链接区别

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

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

3)目录软链接特别常用,并且软链接支持跨越分区系统。

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

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

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

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

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

标签: #centos垃圾箱在哪