本章节包含如下命令:
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 datelib/
variables state informationlocal/
variables date for /usr/locallock/
lock filelog/
log file and directoryopt/
variable date for optrun/
date relevnat to runing processesspool/
application spool datetmp/
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
: 目录文件,directoryb
: block device,块设备文件,以block为单位进行随机访问c
: character device,字符设备,支持以charactor为单位,进行线性访问,有时序l
: symbolic link,符号连接文件p
: pipe,命名管道s
: socket,套接字文件,IP:PORT = Socket
二、文件的复制、移动及删除
1、创建文件
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,是修改文件的元数据部分
2、创建目录
`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}
3、复制文件
文件及目录的复制 ,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` : 创建目录
4、移动文件
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将文件移动到一个固定位置,后期确定不使用的时候再清理
5、创建临时文件和目录
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 : 关闭禁用覆盖重定向