Linux filesystem hierarchy and file manager
命令总结:
本章节包含如下命令:
touch, mkdir, cp, install, mv, rm, mktemp,more, less, head, tail, man, stat,setfacl, getfacl, set, wc, cut, sort, uniq, diff, path
一、File system hierarchy standard
**Linux设计哲学一切皆文件,包括所有的设备、总线都定义为文件,FHS协会将linux文件定义为各个不同的层级,每个从根到根下的二级目录,表示的意义都不一样。Linux操作系统包含了kernel和application。Linux系统又将各类库划分为两大类,其中包含了静态库和动态库。静态库是直接编译进同内核,即initrd中,随系统启动时启动。动态库是将所包含的功能编译为单个库文件,放至系统指定的目录中,再程序应用启动时,按需调用。Linux将系统所需要用到的库文件都包含进了glibc库中,故glibc是linux系统必不可少的库文件。FHS定义的linux文件系统也被称作为Filesystem Hierarchy Standard,其也被众多的linux分行版本所引用,只是其极少的部分未统一。
Filesystem Hierarchy standard:
-
/bin
Essential user command binaries,所有用户的基本命令文件存放路径 -
/sbin
System binaries,系统管理二进制程序存放路径 -
/boot
Static file of the boot loader,系统引导加载器必须用到的各静态文件,如:kerenl,initrd,initramfs -
/dev
device file ,特殊文件及设备文件 -
/etc
Host-specific system configuration,系统及程序的配置文件,只能为静态文件,不能为二进制文件 -
/home
User-home directory(optional),普通用户的家目录 -
/lib
Essential shares binaries and kernel moudles,为系统及程序提供共享库(/bin,/sbin等),以及为kernel提供内核模块- lib.so.* :启动链接的C库
- ld* : 运行时链接器/加载器
- modules : 用于存储内核模块的目录
-
/lib64
64位操作系统特有存储64位库的路径 -
/media
Mount point for removable media -
/mnt
Mount point for temp -
/opt
And-on application software packages,第三方软件安装位置 -
/root
root home directory (optional) -
/srv
Date for service provided by system,为当前主机服务提供的数据 -
/tmp
Temporary files.为所有用户提供临时存放文件的路径,所有用户有写权限,这处有特殊权限 -
/usr
User Hierarhcy,全局共享只读数据路径
bin/
sbin/
lib/
lib64/
include/
share/
local/
src/
-
/usr/local
local hierarchy.让管理员安装本地程序,能通常安装三方程序 -
/var
variables,var hierarchy,存储学发生变化的数据目录-
cache/
application cache date -
lib/
variables state information -
local/
variables date for /usr/local -
lock/
lock file -
log/
log file and directory -
opt/
variable date for opt -
run/
date relevnat to runing processes -
spool/
application spool date -
tmp/
temporary files
-
-
/proc
Kernel and processes information virtual filesystem,基于内存的虚拟文件系统,存储内核和进程的相关信息,多为内核参数 -
/sys
sysfs虚拟文件系统,提供了比proc更为理想的访问内核数据的途径,主要用来管理硬件-
/sys/devices
这是内核对系统中所有设备的分层次表达模型 -
/sys/dev
维护了一个按字符设备和块设备的主次设备号连接到真实设备,在2.6.26引用 -
/sys/bus
按总线类型分层旋转的目录结构,devices中的所有设备都工作在某种总线下 -
/sys/class
按设备功能分类的设备模型,如所有输入设备/sys/class/input之下 -
/sys/block
系统中所有的块设备 -
/sys/firmware
系统加载固件机制对用户空间的接口 -
/sys/fs
描述系统中所有文件系统 -
/sys/kernel
内核所有可调整能数的位置 -
/sys/module
系统中所有的模块信息,不论是静态编译或动态编译的模块KO文件,都可能会出现在这里
-
Linux system file type
-
-
: 普通文件 -
d
: 目录文件,directory -
b
: block device,块设备文件,以block为单位进行随机访问 -
c
: character device,字符设备,支持以charactor为单位,进行线性访问,有时序 -
l
: symbolic link,符号连接文件 -
p
: pipe,命名管道 -
s
: socket,套接字文件,IP:PORT = Socket
二、文件的复制、移动及删除
创建文件
touch
`touch` - touch - change file timestamps
synopsis:touch [OPTION]... FILE...
options:
`-c` : 只是修改时间,不创建文件
`-a` : 修改文件的access时间,即访问时间
`-m` : 修改文件的mtime时间,却数据的修改时间,元数据的修改时间是changetime,Ctime时间
`-t` : STAMP,改到的指定时间
例:touch -m -t 200212012001.08 # 修改mtime 并指定详细时间
文件分两类:
文件元数据(meta date)
文件数据
时间戳:
Access time : 最近访问时间
Modify time : 数据改变的时间
Change time : 元数据改变的时间
注:只要数据改变了, 元数据也会变的
故:使用touch修改timestamps,是修改文件的元数据部分
创建目录
`mkdir` - mkdir - make directories
synopsis: mkdir [OPTION]... DIRECTORY...
options:
`-p` : --perents,按照创建父目录
`-v` :--verbose,查看创建进度信息
`-m` : --mode=MODE,设置权限
mkdir -m u=x,go=w DIR
mkdir -m 600 DIR
例:如何创建/tmp/x/y1,/tmpx/y2 ,/tmp/x/y1/a,/tmp/x/y1/b?
mkdir -p ‘/tmp/x/{y1/{a,b},y2}
例:如何创建a_c,a_d b_c,b_d
mkdir {a,b}_{c,d}
============
复制文件
文件及目录的复制 ,linux是将底层的数据流从一个位置导到另一个位置,再进行重命名操作
CP命令:
`cp` - copy file and directory
synopsis: cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
options:
`-i` : --interactive,交互模式,即覆盖之前提示用户
`-f` : force,强制模式
`-r` `-R` : 递归复制文件,用于复制目录
`-d` : 复制连接,如果复制的是一个连接文件,加`-d`只会复制连接文件,不会复制连接文件所指向的文件及内容
`--preserve` : 复制其扩展属性,=mode,=ownership,=timestamps(文件属性时间),=xattr(扩展属性),=context(安全标签),=links,=all(表示以上都包含)
`-a` : -dR --preserve=all,用于实现归档(archive)
注意:如果在不加`-d`参数时复制links,将把连接指向的文件内容复制一份到指定位置并以连接文件名命名
单源复制注意内容:
如果DEST不存在:则事先创建此文件,并复制源文件的数据流至DEST中
如果DEST存在:
如果DEST是非目录文件:则覆盖目标文件
如果DEST是目录文件:则先在DEST目录下创建一个与源文件同名的文件并复制数据流至目标文件**
多源复制注意内容:
如果DEST不存在:错误
如果DEST存在:
如果DEST是非目录文件,错误
如果DEST是目录文件:分别复制每个文件至DEST目录中, 并保持原名
install命令:
`install` - copy files and set attributes
synopsis: install [OPTION]... [-T] SOURCE DEST
install [OPTION]... SOURCE... DIRECTORY
install [OPTION]... -t DIRECTORY SOURCE...
install [OPTION]... -d DIRECTORY...
options:
`-m` : --mode=MODE,设定目标文件权限
install -m o=x,ug=rw /etc/issue .
nstall -m 755 /etc/issue ./issue
`-o` : --owner=OWNER,设定属主
`-g` : --group=GROUP,设定属组
`-d` : 创建目录
移动文件
mv
`mv` - move (rename) files
sinopsis: mv [OPTION]... [-T] SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE...
options:
`-f` : 强制
`-i` : 交互
删除文件
rm
`rm` - remove files or directories
sinopsis: rm [OPTION]... FILE...
options:
`-f` : 强制
`-i` : 交互
`-r`,`-R` : 递归操作
注:所有文件不建议直接删除,建议使用MV将文件移动到一个固定位置,后期确定不使用的时候再清理
创建临时文件和目录
mktemp
`mktemp` - mktemp - create a temporary file or directory
synopsis: mktemp [OPTION]... [TEMPLATE]
options:
`-d` : 创建临时目录
·-u` : 测试创建
mktemp /tmp/mytmp.XXXX
mktemp -d /tmp/mytmp.XXXX
================
三、文件查看类工具
分屏工具
more
`more` - more - file perusal filter for crt viewing
synopssis: more [-dlfpcsu] [-num] [+/pattern] [+linenum] [file ...
less
`less` - less - opposite of more
synopsis: less File
options:
`space` - 向下翻页
`b` - 向上翻页
`u` - 向上翻半页
`d` - 向下翻半页
`j` - 向下翻一行
`k` - 向上翻一行
`q` - 退出
head
`head` - head - output the first part of files
synopsis: head [OPTION]... [FILE]...
options:
`-n` : 显示要查看的前几行
注:一般可以使用`-6` 代替 `-n 6`
tail
`tail` - tail - output the last part of files
synopsis: tail - output the last part of files
options:
`-n` : 显示要查看的后几行
注:一般可以使用`-6` 代替 `-n 6`
`-f` : --follow,监控最后行的变化,并显示出来
man
`man` - man - format and display the on-line manual pages
synopsis: format and display the on-line manual pages
options:
注:同less工具, man工具就是调用了Less的查看功能
stat
`stat` - stat - display file or file system status
synopsis: stat [OPTION]... FILE...
查看文件的元数据信息
wc
`wc` - wc - print newline, word, and byte counts for each file
synopsis : wc [OPTION]... [FILE]...
options:
-l : 统计行数
-c : byte conuts
-w : 统计单词总数
-m : 字符
使用`wc file`: 格式为:行数 单词 字符
cut
`cut` - remove sections from each line of file
synopsis: cut OPTION... [FILE]...
options:
-d CHAR: 指定分隔符,默认为空格
-f #|#,#|#,#-#: fields,保留那些字段
- 例:
- cut -d: -f7 /etc/passwd
- cut -d: -f1,3,5-7 /etc/passwd
sort
`sort` - sort - sort lines of text files
synopsis: sort [OPTION]... [FILE]...
options:
-t CHAR : 指定分隔符
-n : 基于数据大小排序
-k # : 以#字段列进行排序
-r :逆序进行排序(reverse)
-f : 忽略字符大小写
-u : 重复的行只保留一份(重复相同且连续的行)
- 例:
- sort -r -n -t: -k3 /etc/passwd
- cut -d: -f7 /etc/passwd | sort -u(统计系统用户用了哪几种shell)
uniq
`uniq` - report or omit repeated lines
synopsis: uniq [OPTION]... [INPUT [OUTPUT]]
options:
-c : 每行重复出现的次数
-u : 只显示没有重复的行
-d : 只显示重复的行,至少2次或2次以上
- 例:
- cut -d: -f7 /etc/passwd | sort | uniq -c (统计系统同一shell使用的次数)
diff
`diff` - diff - compare files line by line
synosis: diff [OPTION]... FILES
options:
-u : 不同风格显示文件差别,使用unified机制,显示要修改行的上下文,默认为3行
- 例:diff fstab fstab.bak > fstab.path (应用两个文件成生fstab.path补丁文件)
path
synopsis: path [option] -i /path/to/patch_file /path/to oldfile (打补丁)
path /path/to/oldfile < /path/to/patch_file (同上)
- 例
- path -i fstab.path fstab : 打补丁
- path -R -i fstab.patch fstab
- diff用于生成补要,path用于打补丁
==============
IO重定向及管道
什么是管道及其作用:
将一个命令的执行结果作为另一个命令的输入,即是管道
计算机对文件的识别方式:
- 标准输入,0表示
- 标准输出,1表示
- 错误输出,2表示
程序的数据流有三种:
输入的数据流 <---- 标准输入(stdin),即键盘
输出的数据流 ----> 标准输出(stdout),即显示器
错误的输出流 ----> 错误输出(stderr),显示器
IO重定向
- > : 覆盖输出重定向
- >> : 追加输出重定向
- < : 输入重定向
- 2> : 错误覆盖输出重定向
- 2>> : 错误追加输出重定向
- &> : 合并覆盖重定向(即把标准输出和错误输出合在一起)
- &>> : 合并追加重定向(即把标准输出和错误输出合在一起)
- >| : 强行覆盖(即使用命令set -c 关闭覆盖重定向时,可以使用这个强行覆盖)
setw命令:
options:
-C : 开启禁用覆盖重定向
+C : 关闭禁用覆盖重定向