1、Linux发行版系统目录名称命名规则以及用途
| 目录 | 描述 |
|---|---|
| /bin | 所有用户可用的基本命令程序文件; |
| /sbin | 供系统管理使用的工具程序; |
| /boot | 引导加载器必须用到的各静态文件:kernel, initramfs(initrd), grub等; |
| /dev | 存储特殊文件或设备文件; 设备有两种类型:字符设备(线性设备)、块设备(随机设备); |
| /etc: | 系统程序的配置文件,只能为静态; |
| /home | 普通的家目录的集中位置;一般每个普通用户的家目录默认为此目录下与用户名同名的子目录,/home/USERNAME; |
| /root | 管理员的家目录;可选; |
| /lib | 为系统启动或根文件系统上的应用程序(/bin, /sbin等)提供共享库,以及为内核提供内核模块; |
| /lib64 | 64位系统特有的存放64位共享库的路径; |
| /media | 便携式设备挂载点,cdrom, floppy等; |
| /mnt | 其它文件系统的临时挂载点; |
| /opt | 附加应用程序的安装位置;可选路径; |
| /srv | 当前主机为服务提供的数据; |
| /tmp | 为那些会产生临时文件的程序提供的用于存储临时文件的目录;可供所用户执行写入操作;有特殊权限; |
| /usr | 全局共享的只读数据路径; |
| /usr/local | 让系统管理员安装本地应用程序;也通常用于安装第三方程序; |
| /var | 存储常发生变化的数据的目录; |
| /proc | 基于内存的虚拟文件系统,用于为内核及进程存储其相关信息;它们多为内核参数,例如net.ipv4.ip_forward, 虚拟为net/ipv4/ip_forward, 存储于/proc/sys/, 因此其完整路径为/proc/sys/net/ipv4/ip_forward; |
| /sys | sysfs虚拟文件系统提供了一种比proc更为理想的访问内核数据的途径;其主要作用在于为管理Linux设备提供一种统一模型的的接口; |
2、stat 命令查看文件的元数据信息
$ stat test.txt
File: test.txt
Size: 5 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 917656 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ hx) Gid: ( 1000/ hx)
Access: 2019-12-03 17:58:12.144463726 +0800
Modify: 2019-12-03 17:58:40.491315603 +0800
Change: 2019-12-03 17:58:40.491315603 +0800
Birth: -
简单的介绍一下stat命令显示出来的文件其他信息:
- File:显示文件名
- Size:显示文件大小
- Blocks:文件使用的数据块总数
- IO Block:IO块大小
- regular file:文件类型(常规文件)
- Device:设备编号
- Inode:Inode号
- Links:链接数
- Access:文件的权限
- Gid、Uid:文件所有权的Gid和Uid。
Linux下的三个时间:
- Access Time:简写为atime,表示文件的访问时间。当文件内容被访问时,更新这个时间
- Modify Time:简写为mtime,表示文件内容的修改时间,当文件的数据内容被修改时,更新这个时间。
- Change Time:简写为ctime,表示文件的状态时间,当文件的状态被修改时,更新这个时间,例如文件的链接数,大小,权限,Blocks数。
3、软链接和硬链接区别
- 硬链接: 与普通文件没什么不同,
inode都指向同一个文件在硬盘中的区块; - 软链接: 软链接又叫符号链接,它实际上是一个特殊的文件,有点类似于 Windows 的快捷方式。这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同文件系统的文件。
# 创建硬链接: ln TARGET LINK_NAME
$ ln test.txt hlink_test.txt
# 创建软链接: ln -s TARGET LINK_NAME
$ ln -s test.txt slink_test.txt
$ ll
total 8
-rw-rw-r-- 2 hx hx 7 Dec 3 18:12 hlink_test.txt
lrwxrwxrwx 1 hx hx 8 Dec 3 18:15 slink_test.txt -> test.txt
-rw-rw-r-- 2 hx hx 7 Dec 3 18:12 test.txt
软链接的特点:
要建立链接时,
LINK_NAME必须是存在的;而当TARGET不存在时建立的连接是一个空链接,相当于空指针。空链接文件也可以操作,而且如果对空链接进行操作,比如emptyFile是空链接,进行vi emptyFile输入一些字符后保存,那么系统会自动生成一个对应emptyFile的TARGET空链接会变成一个软链接;LINK_NAME指向TARGET,当TARGET的内容改变时,LINK_NAME的内容也会改变,反过来也是一样,当LINK_NAME改变也会导致TARGET改变;当删除
LINK_NAME时,不会对TARGET产生影响。而删除TARGET时,LINK_NAME会变成一个空链接,见第1条后半段。如果此时再创建一个与之前TARGET同名的文件,就会重新建立链接。但此时TARGET和LINK_NAME的内容都为空。
硬链接的特点:
-
TARGET文件必须存在; -
TARGET和LINK_NAME相互影响,同步执行,创建了硬链接相当于文件实体多了入口; - 建立硬链接后,
TARGET和LINK_NAME的链接数都为2,当删除TARGET后,LINK_NAME的内容不受影响,但其链接数减少一,从链接文件变成一个普通文件。
对文件链接:
- 文件可以创建硬链接,增加了文件的入口,但是创建硬链接不能跨分区
- 其实文件名本身就是个硬链接,也是文件入口
对于目录链接
- 目录不能创建硬链接,目录可以创建软链接
- 每个目录下都会有两个硬链接,
.当前目录,..上级目录
4、Linux上的常用文件管理类命令
cp 命令:复制文件
$ man cp
NAME
cp - copy files and directories
SYNOPSIS
cp [OPTION]... [-T] SOURCE DEST # 复制单个文件
cp [OPTION]... SOURCE... DIRECTORY # 复制多个文件
cp [OPTION]... -t DIRECTORY SOURCE... # 复制多个文件
# 常用选项:
-i:交互式复制,即覆盖之前提醒用户确认;
-f:强制覆盖目标文件;
-r, -R:递归复制目录;
-d:复制符号链接文件本身,而非其指向的源文件;
-a:-dR --preserve=all, archive,用于实现归档;
--preserv=
mode:权限
ownership:属主和属组
timestamps: 时间戳
context:安全标签
xattr:扩展属性
links:符号链接
all:上述所有属性
$ touch demo-{1..5}.txt
$ ll
total 12
-rw-rw-r-- 1 hx hx 0 Dec 4 13:49 demo-1.txt
-rw-rw-r-- 1 hx hx 0 Dec 4 13:49 demo-2.txt
-rw-rw-r-- 1 hx hx 0 Dec 4 13:49 demo-3.txt
-rw-rw-r-- 1 hx hx 0 Dec 4 13:49 demo-4.txt
-rw-rw-r-- 1 hx hx 0 Dec 4 13:49 demo-5.txt
$ cp demo-1.txt /tmp/
$ cp demo-1.txt demo-2.txt demo-3.txt /tmp
$ cp -t /tmp/ demo-4.txt demo-5.txt
$ ll /tmp/
total 0
-rw-rw-r-- 1 hx hx 0 Dec 4 13:51 demo-1.txt
-rw-rw-r-- 1 hx hx 0 Dec 4 13:51 demo-2.txt
-rw-rw-r-- 1 hx hx 0 Dec 4 13:51 demo-3.txt
-rw-rw-r-- 1 hx hx 0 Dec 4 13:51 demo-4.txt
-rw-rw-r-- 1 hx hx 0 Dec 4 13:51 demo-5.txt
mv 命令:移动文件
mv [OPTION]... [-T] SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE..
常用选项:
-i:交互式;
-f:force
$ mv demo-1.txt /tmp/
$ mv demo-2.txt demo-3.txt /tmp/
$ mv -t /tmp/ demo-4.txt demo-5.txt
# 目标文件存在是,交互式确认
$ mv -i demo-1.txt /tmp/
mv: overwrite '/tmp/demo-1.txt'?
# 目标文件存在是,强制覆盖
$ mv -f demo-1.txt /tmp/
rm命令:删除文件
rm [OPTION]... FILE...
常用选项:
-i:interactive
-f:force
-r: recursive
$ rm -i demo-2.txt
rm: remove regular empty file 'demo-2.txt'?
# 强制递归删除,谨慎使用
$ rm -rf demo-2.txt
5、vi 文本查找替换
在末行模式下:
语法: [range]s/s1/s2/ [option]
[range] 表示检索范围,省略时表示当前行
1,10表示从第 1 行到 10 行
%表示整个文件,同1,$
.,$表示从当前行到文件尾
s 为替换命令
s1 要被替换的串,s2 为替换的串
[option] 表示选项:
/g表示在全局文件中进行替换。
/c表示在每次替换之前需要用户进行确认。
省略时仅对每行第一个匹配串进行替换。
1. :s/old/new/ 把当前行第一个出现的old替换成new,后面加g就是替换当前行所有
2. :1,5 s/old/new 把1到5行的第一个old替换成new,可以加g表示所有
3. :3,$s/old/new/ 把从3行开始到最后一行的第一个出现的old替换成new,后面加g替换当前行所有,3用.表示就是当前行
4. :%s/old/new/ 把所有行的第一个old替换成new,后面加g表示替换当前行所有
用查找替换命令删除/tmp/profile文件中的 行首的空白字符
$ cp /etc/profile /tmp/
$ vi /tmp/profile

vi-1575440956160.png
6、在vim中设置tab缩进
# 设置tab缩进为4个字符宽度
set tabstop=4 或 set ts=4
# TAB替换为空格
:set ts=4
:set expandtab
:%retab!
# 空格替换为TAB
:set ts=4
:set noexpandtab
:%retab!