一、 linux目录结构
1、 FHS开源协议
Linux有非常多的发行商,数以百计的发行版,无数的出名的不出名的Linux系统,如果每个发行版都根据发行商的意愿,随意的按照自家公司的方式来配置目录结构,那会大大的增加我们的学习成本和使用成本,也会造成管理上的极大不便,于是就有了FHS标准的出炉。
FHS的主要目的便是希望让使用者可以了解到已安装软件通常放置于那个目录下,让使用者在遇到陌生的Linux系统时,不至于太过陌生。
2、 FHS目录结构。
FHS目录结构为典型的树状结构,以/ 为起点,向下级子目录分散。
/ : 根目录,一切目录的起点。
/boot:引导文件存放目录,内核文件(vmlinuz)、引导加载器(bootloader, grub)都存放于此目录,若此目录被损坏,系统重启都将无法正常开启,建议单独分区。
/bin:所有用户使用的基本命令;不能关联至独立分区,OS启动即会用到的程序
/sbin:管理类的基本命令;不能关联至独立分区,OS启动即会用到的程序
/lib:启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules)
/lib64:专用于x86_64系统上的辅助共享库文件存放位置
/etc:配置文件目录,通过yum、apt等方式安装软件的配置文件存放目录
/home/:普通用户家目录
/root:管理员的家目录
/media:便携式移动设备挂载点
/mnt:临时文件系统挂载点
/dev:设备文件及特殊文件存储位置
/opt:第三方应用程序的安装位置
/srv:系统上运行的服务用到的数据
/tmp:临时文件存储位置
/usr: 系统默认的软件安装路径
/var: 可变数据存放路径,如缓存、日志文件以及某些软件运行所产生的文件
/proc:用于输出内核与进程信息相关的虚拟文件系统
/sys:用于输出当前系统上硬件设备相关信息虚拟文件系统
/selinux:securityenhancedLinux,selinux相关的安全策略等信息的存储位
二、 linux 文件类型
1、 文件类型分类
Linux基本哲学思想之一: 一切皆文件!所以,系统运行时所使用的内存、CPU、网卡等都是通过文件来呈现。
文件类型大致包含: 普通文件、目录、套接字、管道、链接、字符设备、块设备、链接文件。
2、 文件元数据
既然Linux系统中,存在这么多的文件,那每个文件都包含哪些数据?
文件系统中的数据分为两类,分别是数据和元数据。
a, 数据:指的是普通文件中的实际数据;
b, 元数据:指用来描述一个文件的特征的系统数据,如访问权限、文件拥有者、文件数据块的分布等;
查看文件元数据可以使用命令stat 查看
File:文件名称;
Size:文件大小(字节);
Blocks:占用的磁盘块数;
IO Block:IO块大小;
regular file:这里是显示文件的类型,这是一个普通文件
Device:所在设备;
Inode:Inode节点号;
Links:被链接的次数;
Access(第一个):访问权限;
Uid:uid号和属主;
Gid:gid号和属组;
Access(第二个):文件最近一次的访问时间;
Modify:文件的修改时间;
Chang:文件的改变时间。
## 文件元数据的Device和Inode准确的定位了文件的实际路径,为系统找到该文件制定了路径。
3、 文件管理命令
3.1 复制文件和目录cp
cp /PATH/FROM/filename /PATH/TO/filename 复制后可重命名
例:
-i 覆盖前提示 (系统中会默认设置cp 的别名,链接到此选项,alias cp='cp -i',若脚本中需要强制覆盖,可用cp的绝对路径执行cp命令,即 /bin/bin/cp)
-r, -R 递归复制目录及内部的所有内容,复制目录时必带此参数,否则将略过目录而不复制目录内的文件
-a 归档,相当于-dR --preserv=all
-d --no-dereference --preserv=links 不复制原文件,只复制链接名
-u --update 只复制源比目标更新文件或目标不存在的文件
-b 目标存在,覆盖前先备份,形式为 filename~
3.2 移动和重命名文件mv
mv /PATH/FROM/filename /PATH/TO/filename 可以复制文件或目录
-i 交互式,系统中默认使用带此参数的命令别名
-f 强制
-b 目标存在,覆盖前先备份,安全选项。
3.3、 rm删除文件,危险操作。
rm /PATH/TO/filename
-i 交互式
-f 强制删除
-r 递归
3.4、 查看目录树 tree
可直接使用,若系统未安装,需安装 tree软件包。
-d: 只显示目录
-L level:指定显示的层级数目
-P pattern: 只显示由指定pattern匹配到的路径
3.5、 mkdir 创建目录
p: 存在于不报错,且可自动创建所需的各目录
-v: 显示详细信息
-m MODE: 创建目录时直接指定权限
3.6 rmdir 删除空目录,不常用
p: 递归删除父空目录
-v: 显示详细信息
3.7、 查看文件列表 ls
ls 用来显示当前目录下的内容,是最常用的命令之一,常用选项。
-a 显示目录下所有内容,包含以 . .. 结尾的文件。
-A 列出除了“ . ”及 “.. ”以外的任何项目
-i 列出每个文件的inode号。
-l 使用长格式列出信息,显示文件的权限、大小、链接等属性。
-R 递归列出所有子目录层。
3.8 、 查看文件的类型 file
file [options] …
-b 列出文件辨识结果时,不显示文件名称
-f filelist 列出文件filelist中文件名的文件类型
-F 使用指定分隔符号替换输出文件名后默认的”:”分隔符
-L 查看对应软链接对应文件的文件类型
3.9、 查看文件内容命令 cat more less tail head
3.9.1、 cat命令
cat 连接文件,并打印文件内容到标准输出,当文件过大时,会只能查看到最后的输出信息。
cat filename 连接文件并打印输出到标准输出设备,若是二进制文件,会显示乱码。
cat -n filename 连接文件并打印输出到标准输出设备,并在每行前标注行号。
cat -E filename 连接文件并打印输出到标准输出设备,并显示回车符$。
3.9.2、 more命令
more 分页显示文本文件内容,可分页查看,当查看大文件时可使用此命令。
more filename 分页查看filename 文件的内容。
交互指令 功能
h 或 ? 显示 more 命令交互命令帮助。
q 或 Q 退出 more。
v 在当前行启动一个编辑器。
:f 显示当前文件的文件名和行号。
!<命令> 在子Shell中执行指定命令。
回车键 向下移动一行。
空格键 向下移动一页。
Ctrl+l 刷新屏幕。
= 显示当前行的行号。
/字符串 搜索指定的字符串。
d 向下移动半页。
b 向上移动一页。
3.9.3、 less命令
less: 显示文件或命令内容,一次只加载一页,打开大文件时,打开速度非常快。
less filename less命令支持上下翻功能
Ctrl+f 向下移动一页。
Ctrl+b 向上移动一页。
Ctrl+d 向下移动一页。
Ctrl+u 向上移动半页。
j 向下移动一行。
k 向上移动一行。
G 移动至最后一行。
g 移动到第一行。
3.9.4、 tail命令
tail 打印文件最后10行内容。
tail filename 输出filename 最后10行文件内容
tail -number filename 输出文件最后number行的内容
tail -f filename 输出文件最后10行内容,每隔一秒会检查一下文件是否增加新的内容,如果增加就追加到原来的输出结果后面并显示。
3.9.5、 head命令
head 打印文件前10行的内容
head filename
head -number filename
3.10编辑、创建文件
3.10.1 vim编辑器
vim filename 打开filename文件并进入vim程序界面,可以使用此命令编辑、修改文件,当文件不存在时会自动创建。
Vim 分为三种模式:
- 命令模式:用户刚刚启动 vim,便进入了命令模式
- 输入模式:在命令模式下按下 i 就进入了输入模式
输入模式又称编辑模式,可在此模式下编辑、修改文件。
ESC 退出输入模式,切换到命令模式 - 末行模式:在命令模式下按下 : 就进入了末行模式
ESC 退出底线命令模式,切换到命令模式
:/a 查找 a
:wq 保存并退出
:q! 不保存退出
常用选项:
+# 打开文件后,让光标处于第#行的行首,+默认行尾
+/PATTERN 让光标处于第一个被PATTERN匹配到的行的行首
–b file 二进制方式打开文件
–d file1 file2… 比较多个文件
-m file 只读打开文件
vim 可在家目录的 .vimrc 文件内定义打开特定文件时,自动生成的内容。
如:
cat < EOF > /root/.vimrc
set ignorecase
set cursorline
set autoindent
autocmd BufNewFile *.sh exec ":call SetTitle()"
func SetTitle()
if expand("%:e") == 'sh'
call setline(1,"#!/bin/bash")
call setline(2,"#")
call setline(3,"#********************************************************************")
call setline(4,"#Author: test")
call setline(5,"#email: a@*")
call setline(6,"#Date: ".strftime("%Y-%m-%d"))
call setline(7,"#FileName: ".expand("%"))
call setline(8,"#Copyright (C): ".strftime("%Y")." All rights reserved")
call setline(9,"#********************************************************************")
call setline(10,"")
endif
endfunc
autocmd BufNewFile * normal G
EOF
会在打开的 .sh 脚本中自动显示
扩展命令模式:当前vim进程有效
(1) 行号
显示: set nu
不显示: set nonu
(2) 忽略字符的大小写
启用:set ignorecase,简写 set ic
不忽略:set noic
(3) 自动缩进
启用:set autoindent,简写 set ai
禁用:set noai
(4) 复制保留格式
启用:set paste ## 常用命令,当复制外面内容到vim编辑器时,若出现乱行现象,则需使用此命令。
禁用:set nopaste
(5) 显示Tab和换行符 ^I 和$显示
启用:set list
禁用:set nolist
(6) 文件格式
查看当前文本的模式类型
:set ff
设置为dos模式,即Windows下的格式
:set ff=dos
设置为unix模式
:set ff=unix
3.10.2 echo 重定向内容到文件中
echo 显示字符,将输入的字符串送往标准输出
echo **** > filename 将***内容重定向到filename文件中,并覆盖filename文件中的内容,若filename不存在,则创建并添加内容***。
echo *** >> filename 将***内容重定向到filename文件中,并添加到filename文件最后面,若filename不存在,则创建并追加内容***。
高级用法
echo -e 若字符串中出现以下字符,则特别加以处理,常用于shell脚本中,实现某些特殊功能。
\a 发出警告声,作为脚本执行成功或告警的提示音
\b 退格键
\c 最后不加上换行符号
\e escape,相当于\033 显示带颜色字符
\n 换行且光标移至行首
\r 回车,即光标移至行首,但不换行
\t 插入tab
\\ 插入\字符
三、 linux符号链接
1、 硬链接
创建硬链接会增加额外的记录项以引用文件
对应于同一文件系统上一个物理文件
每个目录引用相同的inode号
创建时链接数递增
删除文件时:
文件要存在,至少有一个链接数
当链接数为零时,该文件被删除
不能跨越驱动器或分区
语法:
ln filename [linkname ] 在创建硬链接时,相当于copy一个同名同属性的文件,源文件和链接中没有相互依存关系。
2、 软链接,相当于Windows中的软链接
一个符号链接指向另一个文件
ls - l 的显示链接的名称和引用的文件
一个符号链接的内容是它引用文件的名称
可以对目录进行
可以跨分区
指向的是另一个文件的路径;其大小为指向的路径字符串的长度;不增加或减
少目标文件inode的引用计数
当使用相对路径软链接时,为相对于目标链接文件路径,即以要生成的文件为路径起点,若无特别需求,建议使用绝对路径。
语法:
ln -s filename [linkname] 当源文件无法使用时,链接失效,此时,使用ls -l 将看到链接文件呈现红色。