Brc's blog
首页
前端
后端
运维
  • 工作笔记
  • 分类
  • 标签
  • 归档
关于

Brc

努力中
首页
前端
后端
运维
  • 工作笔记
  • 分类
  • 标签
  • 归档
关于
  • Linux基础

    • Bash shell
    • 文件属性
      • linux目录结构
        • 命令相关目录/bin
        • 用户家相关目录/home
        • 系统文件目录/usr
        • 系统启动目录/boot
        • 配置文件目录/etc
        • 设备相关目录/dev
        • 可变的目录/var
        • 虚拟系统目录/proc
      • 文件路径定位
        • 为什么要进行定位
        • 如何对文件进行定位
        • 绝对路径与相对路径
        • 路径切换命令cd
      • Linux基础命令
        • 文件操作类命令
        • touch文件创建
        • mkdir目录创建
        • tree显示目录结构
        • cp文件或目录复制
        • mv文件移动命令
        • rm文件或目录删除
        • 文件查看类命令
        • cat命令
        • less-more命令
        • head-tail命令
        • grep过滤数据
        • 文件下载类命令
        • wget命令
        • curl命令
        • rz-sz命令
        • 字符处理类命令
        • sort命令
        • uniq命令
        • wc命令
      • Linux文件属性
        • 文件属性
        • 文件类型
      • Linux链接文件
        • Inode与Block
        • 软连接
        • 硬连接
    • 编辑工具vim
    • 用户管理
    • 用户组管理
    • 普通用户提权
    • 基础权限
    • 特殊权限
    • 文件特殊属性
    • IO重定向
    • 文件查找
    • 文件压缩
    • 软件包管理

    • 磁盘管理

    • 进程管理
    • 计划任务
    • systemd
    • Supervisor
    • 网络管理

    • Chrony时间同步
    • NFS网络文件系统
  • Linux进阶

  • 其他

  • 运维
  • Linux基础
Brc
2021-07-04
目录

文件属性

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

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

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

# linux目录结构

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

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

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

image-20211102090932688

# 命令相关目录/bin

  • 存放命令相关的目录
    • /bin普通用户使用的命令/bin/ls,/bin/date
    • /sbin管理员使用的命令/sbin/service

# 用户家相关目录/home

  • 存放用户相关数据的家目录,比如 windows不同的用户登陆系统显示的桌面背景不一样
    • /home普通用户的家目录,默认为/home/username
    • /root超级管理员root的家目录,普通用户无权操作

# 系统文件目录/usr

  • 存放系统相关文件的目录
    • /usr相当于C:\windows
    • /usr/local软件安装的目录,相当于C:\Program
    • /usr/bin/普通用户使用的应用程序(重要)
    • /usr/sbin管理员使用的应用程序(重要)
    • /usr/lib库文件Glibc 32bit
    • /usr/lib64库文件Glibc 64bit

# 系统启动目录/boot

  • 存放系统启动时内核与grub引导菜单
    • /boot存放的系统启动相关的文件,如:kernel,grub(引导装载程序)

# 配置文件目录/etc

  • /etc存放系统配置文件目录,后续所有服务的配置都在这个目录中
    • /etc/sysconfig/network-script/ifcfg-,网络配置文件
    • /etc/hostname系统主机名配置文件

# 设备相关目录/dev

  • /dev存放设备文件的目录,比如硬盘,硬盘分区,光驱,等等
    • /dev/null黑洞设备,只进不出。类似于垃圾回收站
    • /dev/random生成随机数的设备
    • /dev/zero能源源不断的产生数据

# 可变的目录/var

  • /var存放一些变化文件,比如/var/log/下的日志文件.
  • /var/tmp,进程产生的临时文件
  • /tmp,系统临时目录(类似于公共厕所)

# 虚拟系统目录/proc

  • 虚拟的文件系统(如对应的进程停止则/proc下对应目录则会被删除)
  • /proc,反映当前系统正在运行进程的实时状态,类似于汽车在运行过程中的仪表板,能够看到汽车的油耗、时速、转向灯、故障等等

# 文件路径定位

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

# 为什么要进行定位

  • 你要在哪个目录下创建文件?
  • 你要将文件复制到什么地方?
  • 你要删除的文件在什么地方?

# 如何对文件进行定位

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

image-20211102091209147

FQ1:/home/boy/file和/home/gir1/file是否是同一个文件?

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

# 绝对路径与相对路径

  • 绝对路径:只要从/开始的路径,比如/home/alice/file
  • 相对路径:相对于当前目录来说,比如a.txt ./a.txt ../bob/a.mp3
  • .和..的是什么意思
    • 一个点代表当的是当前目录;
    • 两个点代表的是当前目录的上层目录;
    • 所谓的(.)和(..)目录实际上属于相对路径的一种表示形式;

# 路径切换命令cd

例子如下:

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

# Linux基础命令

# 文件操作类命令

# 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}
1
2
3
4
5
6

# 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}
1
2
3
4
5
6

# tree显示目录结构

# 选项:-L:显示目录树的层级
# tree /home/ob/  #显示当前目录下的结构
/home/ob/
├—─ but
├─— dir1
├—─ dir2
├─— dir3
├─— dir4
├─— dir5
│   └── dir6
└── diu
1
2
3
4
5
6
7
8
9
10
11

# 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}
1
2
3
4
5
6
7
8
9

# 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     #移动多个目录至同一个目录
1
2
3
4
5
6
7
8
9
10

# rm文件或目录删除

# 选项:-r:递归  -f:强制删除  -v:详细过程
# rm file.txt        #删除文件,默认rm存在alias别名, rm -i所以会提醒是否删除文件
# rm -f file.txt     #删除文件,不提醒
-------------------------------------
# rm -r dir/         #递归删除目录,会提示
# rm -rf dir/        #强制删除目录,不提醒(慎用)
1
2
3
4
5
6

# 文件查看类命令

# cat命令

# cp /etc/passwd ./pass
# cat pass        #正常查看文件方式
# cat -n pass     #-n显示文件有多少行
# cat -A pass     #查看文件的特殊符号,比如文件中存在tab键
# tac pass        #倒序查看文件
1
2
3
4
5

# less-more命令

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

# head-tail命令

# head pass          #查看头部内容,默认前十行
# head -n5 pass      #查看头部5行,使用-n指定

# tail pass
# tail -20 /var/log/secure
# tail -f /var/log/messages		#-f查看文件尾部的变化
# tailf /var/log/messages		#查看文件尾部的变化
1
2
3
4
5
6
7

# grep过滤数据

# grep "^root" pass            #匹配以root开头的行
# grep "bash$" pass            #匹配以bash结尾的行
# grep -v "ftp" pass           #匹配除了包含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行
1
2
3
4
5
6
7
8

# 文件下载类命令

# 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
1
2
3
4
5
6
7
8

# 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
1
2
3
4
5

# rz-sz命令

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

# rz            	#只能上传文件,不支持上传文件夹,不支持大于4个G上传,也不支持断点续传
# sz /path/file 	#只能下载文件,不支持下载文件夹
1
2
3
4

# 字符处理类命令

# sort命令

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

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

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

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

# 结果并不是按照数字排序,而是按字母排序。
# 可以使用-t指定分隔符,使用-k指定需要排序的列。
[root@web ~]# sort -t ":" -k2 sort.txt
d:1
f:11 #第二行为什么是11?不应该按照顺序排列?
c:2
b:3
a:4
e:5

# 按照排序的方式,只会看到第一个字符,11的第一个字符是1,按照字符来排序确实比2小。
# 如果想要按照数字的方式进行排序,需要使用-n参数。
[root@web ~]# sort -t ":" -n -k2 p.txt
d:1
c:2
b:3
a:4
e:5
f:11
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41

# uniq命令

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

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

# 1.创建一个file.txt文件:
[root@web ~]# cat file.txt
abc
123
abc
123
# 2.uniq需要和sort一起使用,先使用sort排序,让重复内容连续在一起
[root@web ~]# sort file.txt
123
123
abc
abc
# 3.使用uniq去除相邻重复的行
[root@web ~]# sort file.txt | uniq
123
abc
# 4.-c参数能统计出文件中每行内容重复的次数
[root@www~]# sort file.txt | uniq -c
2 123
2 abc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# 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
# cat -n /etc/services | tail -1
# awk '{print NR $0}' /etc/services | tail -1
1
2
3
4
5
6
7
8
9
10

# Linux文件属性

# 文件属性

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

[root@web ~]# ls -l ks.cfg
-rw-------. 1 root root 4434 May 30 13:58 ks.cfg
-rw-------. 	①:第一个字符是文件类型,其他则是权限
1				②:硬链接次数
root			③:文件属于哪个用户
root			④:文件属于哪个组
4434			⑤:文件大小
May 30 13:58	⑥⑦⑧:最新修改的时间与日期
ks.cfg			⑨:文件或目录名称
1
2
3
4
5
6
7
8
9

# 文件类型

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

[root@web ~]# 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
1
2
3
4
5
6
7
8
  • 文件类型说明

    文件类型字母 类型含义
    - 普通文件(文本,二进制,压缩,图片,日志等)
    d 目录文件
    b 设备文件(块设备)存储设备硬盘/dev/sda,/dev/sr0
    c 设备文件(字符设备),终端/dev/tty1
    s 套接字文件,进程与进程间的一种通信方式(socket)
    l 链接文件
  • 但有些情况下,我们无法通过ls -l文件的类型,比如:一个文件,它可能是普通文件、也可能是压缩文件、或者是命令文件等,那么此时就需要使用file来更加精准的判断这个文件的类型

    [root@web ~]# file /etc/hosts
    /etc/hosts:ASCII text
    
    [root@web ~]# 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]=aa7ff68f13de25936a098016243ce
    57c3c982e06, stripped
    
    [root@web ~]# file /dev/sda
    /dev/sda:block special
    
    [root@web ~]# file /dev/tty1
    /dev/tty1:character special
    
    [root@web ~]# file /etc/grub2.cfg
    /etc/grub2.cfg:broken symbolic link to `../boot/grub2/grub.cfg
    
    [root@web ~]# file /home
    /home:directory
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18

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

# Linux链接文件

# 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,读出数据。

image-20210704111636760

# 软连接

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

image-20210704113256767

  • 软连接使用场景
    • 软件升级
    • 代码发布

image-20210704113605581

  • 软链接场景实践

    # 1.准备网站1.1版本代码
    [root@web ~]# mkdir /data/rainbow-v1.1 -p
    [root@web ~]# echo "123" > /data/rainbow-v1.1/index.html
    
    # 2.创建软链接
    [root@web ~]# ln -s /data/rainbow-v1.1/ /data/rainbow
    [root@web ~]# 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@web ~]# cat /data/rainbow/index.html
    123
    
    # 4.新更新一个网站的程序代码
    [root@web ~]# mkdir /data/rainbow-v1.2
    [root@web ~]# echo "456” > /data/rainbow-v1.2/index.html
    
    # 5.升级
    [root@web ~]# rm -f /data/rainbow && ln -s /data/rainbow-v1.2/ /data/rainbow
    [root@web ~]# cat /data/rainbow/index.html
    456
    
    # 6.回退
    [root@web ~]# rm -f /data/rainbow && ln -s /data/rainbow-v1.1/ /data/rainbow
    [root@web ~]# cat /data/rainbow/index.html
    123
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28

# 硬连接

硬链接类似于超时有多个门,无论丛哪个门进入,看到的内容都是一样的。如果关掉一扇门,那影响进入超市?

回到系统中,我们对硬链接的解释:不同的文件名指向同一个inode,简单的说就是指向同一个真实的数据源。

image-20210704115352906

  • 硬链接与软链接区别
    • ln命令创建硬链接,ln -s命令创建软链接
    • 目录不能创建硬链接,并且硬链接不可以跨越分区系统;
    • 软链接支持对目录创建,同时也支持跨越分区系统;
    • 硬链接文件与源文件的inode相同,软链接文件与源文件inode不同;
    • 删除文件的软链接文件,对源文件及硬链接文件无任何影响;
    • 删除文件的硬链接文件,对源文件及链接文件无任何影响;
    • 删除链接文件的源文件,对硬链接无影响,会导致软链接失效;
    • 删除源文件及其硬链接文件,整个文件会被真正的删除;
#Linux
Last Updated: 2021/11/12, 16:51:33
Bash shell
编辑工具vim

← Bash shell 编辑工具vim→

最近更新
01
谷歌云创建GKE集群
07-26
02
ElastiCacheForRedis启用密码
07-26
03
upload-to-gcs
06-29
更多文章>
Theme by Vdoing | Copyright © 2021-2024 Brc | MIT License | 浙ICP备19031881号-4
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式