文件和目录被组织成一个单根倒置树结构
文件系统从根目录下开始,用“/”表示
根文件系统(rootfs):root filesystem
对于特定的文件系统,名称大小写敏感
以.开头的文件为隐藏文件
路径分隔符/
文件有两类数据:元数据(metadata)数据(data)
文件系统分层结构:LSB Linux Standard Base
FHS: (Filesystem Hierarchy Standard)
包括路径在内文件名称最长4095个字节,用/分隔的路径不能超过255个字节。



除了斜杠和NUL,所有字符都有效.但使用特殊字符的目录名和文件不推荐使用,有些字符需要用引号来引用它们。
标准Linux文件系统(如ext4),文件名称大小写敏感。例如:MAIL,Mail,mail, mAiL

/boot:引导文件存放目录,内核文件(vmlinuz)、引导加载器(bootloader, grub)都存放于此目录
/bin:供所有用户使用的基本命令;不能关联至独立分区,系统启动即会用到的程序
/sbin:管理类的基本命令;不能关联至独立分区,系统启动即会用到的程序
/lib:启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules)
/lib64:专用于x86_64系统上的辅助共享库文件存放位置
/etc:配置文件目录
/home/USERNAME:普通用户家目录
/root:管理员的家目录
/media:便携式移动设备挂载点
/mnt:临时文件系统挂载点
/dev:设备文件及特殊文件存储位置
    b: block device,随机访问
    c: character device,线性访问
/opt:第三方应用程序的安装位置
/srv:系统上运行的服务用到的数据
/tmp:临时文件存储位置
/usr: universal shared, read-only data
    bin: 保证系统拥有完整功能而提供的应用程序
    sbin:
    lib:32位使用
    lib64:只存在64位系统
    include: C程序的头文件(header files)
    share:结构化独立的数据,例如doc, man等
    local:第三方应用程序的安装位置
           bin, sbin, lib, lib64, etc, share
/var: variable data files
    cache: 应用程序缓存数据目录
    lib: 应用程序状态信息数据
    local:专用于为/usr/local下的应用程序存储可变数据;
    lock: 锁文件
    log: 日志目录及文件
    opt: 专用于为/opt下的应用程序存储可变数据;
    run: 运行中的进程相关数据;通常用于存储进程pid文件
    spool: 应用程序数据池
    tmp: 保存系统两次重启之间产生的临时数据
/proc: 用于输出内核与进程信息相关的虚拟文件系统
/sys:用于输出当前系统上硬件设备相关信息虚拟文件系统
/selinux: security enhanced Linux,selinux相关的安全策略等信息的存储位置

CentOS-7的新特性
/bin-->/usr/bin
/sbin-->/usr/sbin
/lib-->/usr/lib
/lib64-->/usr/lib64

二进制程序:/bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin
库文件:/lib, /lib64, /usr/lib, /usr/lib64, /usr/local/lib, /usr/local/lib64
配置文件:/etc, /etc/DIRECTORY, /usr/local/etc
帮助文件:/usr/share/man, /usr/share/doc, /usr/local/share/man, /usr/local/share/doc

wKioL1ecSieROb3WAABccQEDUNY504.png-wh_50文件类型
-:普通文件(二进制文件、文本文件、数据格式文件)
d: 目录文件
b: 块设备(随机访问的物理设备,有缓存)
c: 字符设备(线性访问的逻辑设备,无缓存)
l: 符号链接文件(软连接文件)
p: 管道文件pipe
s: 套接字文件socket(IP+PORT)

每个shell和系统进程都有一个当前的工作目录
CWD:current work directory
显示当前shell CWD的绝对路径
pwd: printing working directory
相关的环境变量:
PWD:保存了当前目录路径
OLDPWD:上一次所在目录路径

wKioL1ecSlvQLCBEAAAdXlsRiVg012.png-wh_50

绝对路径
以正斜线开始
完整的文件的位置路径
可用于任何想指定一个文件名的时候
相对路径
不以斜线开始
指定相对于当前工作目录或某目录的位置
可以作为一个简短的形式指定一个文件名

cd 改变目录
到上一级目录:
cd ..
回到用户家目录:
cd 或cd ~
到某个用户的家目录:
cd ~username
到以前的工作目录:
cd -

wKioL1ecSqKh0R0hAAA6Zzew9WA197.png-wh_50
ls (list)列出当前目录的内容或指定目录
ls [options] [files_or_dirs]
options:
-a显示所有文件(包括隐藏文件)
-A显示除.和..之外的所有文件
-l显示额外的信息(权限、属主属组、文件大小、修改时间等)
-R目录递归显示
-d显示目录自身的信息而不是目录下的文件
-1文件分行显示,
-i显示inode号码
–S按从大到小排序
–u配合-t选项,显示并按atime从新到旧排序
–U不排序按目录存放顺序显示
--color=auto
蓝色-->目录
绿色-->可执行文件
红色-->压缩文件
红色闪烁-->链接文件已损坏
浅蓝色-->链接文件
灰色-->其他文件



glob bash通配符
* 匹配零个或多个字符
? 匹配任何单个字符
~ 当前用户家目录
~username 用户家目录
~+ 当前工作目录
~- 前一个工作目录
[0-9]:匹配一个数字范围
[a-z]:a-z之间的字母
[A-Z]:A-Z之间的字母
[wxc]:匹配列表中的任何的一个字符
[^wxc]:匹配列表中的所有字符以外的字符
字母的排列顺序 a A b B c C ……x X y Y z Z
预定义的字符类:#man 7 glob
[:digit:]:任意数字,相当于0-9
[:lower:]:任意小写字母
[:upper:]: 任意大写字母
[:alpha:]: 任意大小写字母
[:alnum:]:任意数字或字母
[:space:]:空格
[:punct:]:标点符号

1、显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录
ls -d /var/l *[0-9]*[[:lower:]]
2、显示/etc目录下以任意一位数字开头,且以非数字结尾的文件或目录
ls -d /etc/[0-9]*[^0-9]
3、显示/etc/目录下以非字母开头,后面跟了一个字母及其它任意长度任意字符的文件或目录
ls -d /etc/[^[:alpha:]][[:alpha:]]*
4、显示/etc目录下所有以m开头以非数字结尾的文件或目录
ls /etc/m*[^0-9]
5、显示/etc目录下,所有以.d结尾的文件或目录
ls -d /etc/*.d
6、显示/etc目录下,所有.conf结尾,且以m,n,r,p开头的文件或目录
ls -d /etc/[mnrp]*.conf

touch命令:
touch [OPTION]... FILE...
-a: 仅改变atime
-m: 仅改变mtime
-t:指定时间修改时间戳 [[CC]YY]MMDDhhmm[.ss]
-c: 如果文件不存在,则不予创建
-d:以描述时间修改时间戳 touch -d '-3 day' FILE

stat 查看文件的元数据
三个时间戳:
access time:访问时间,读取文件内容
modify time: 修改时间, 修改文件内容
change time: 改变时间, 元数据发生改变
(访问一个距atime的记录时间超过24小时,或atime早于mtime的文件时atime才会刷新)

wKiom1ecStXxapavAAA35pR4B_s307.png-wh_50cp[OPTION]... [-T] SOURCE DEST
cp[OPTION]... SOURCE... DIRECTORY
cp[OPTION]... -t DIRECTORY SOURCE...
cpSRC DEST
SRC是文件:
如果目标不存在:新建DEST,并将SRC中内容填充至DEST中
如果目标存在:
如果DEST是文件:将SRC中的内容覆盖至DEST中
基于安全,建议为cp命令使用-i选项;
如果DEST是目录:在DEST下新建与原文件同名的文件,并将SRC中内容填充至新文件中
cpSRC... DEST。
SRC...:多个文件
DEST必须存在,且为目录,其它情形均会出错;
SRC是目录:此时使用选项:-r
如果DEST不存在:则创建指定目录,复制SRC目录中所有文件至DEST中;
如果DEST存在:
如果DEST是文件:报错;
如果DEST是目录:将SRC及其内部文件复制至DEST中。
-i:交互式
-r, -R: 递归复制目录及内部的所有内容;
-a: 归档,相当于-dR--preserv=all
-d:仅复制软连接文件,不复制软连接所指向的文件
   mode: 权限
   ownership: 属主属组
   timestamp:时间戳
   links:连接
   xattr:隐藏属性
   context:安全上下文
   all
-p: 保持原有文件的属性信息
-v: --verbose
-f: --force当文件存在且没有权限编辑是,将其删除再重新复制
练习
1、使用别名命令,将/etc/目录下所有文件,备份到/testdir/下独立的新目录下,并要求新目录格式为backupYYYY-mm-dd,备份过程可见
cp -Rv /etc/ /testdir/backup`date +%F`

wKiom1ecTEuxl31IAAAUUY9xuAo563.png-wh_50

2、先创建/testdir/rootdir目录,再复制/root所有下文件到该目录内,并要求保留原有权限
cp -Rp /root/ /testdir/rootdir
wKioL1ecTLKCyOZaAAAP6TUeFqo817.png-wh_50

显示当前shell进程所有可用的命令别名
alias
定义别名NAME,其相当于执行命令VALUE;
alias NAME='VALUE'
当别名中没有空格时,可以不用加引号。单双引号均可,默认使用单引号。
在命令行中定义的别名,仅对当前shell进程有效
如果想永久有效,要定义在配置文件中
仅对当前用户:~/.bashrc
对所有用户有效:/etc/bashrc
编辑配置给出的新配置不会立即生效;
bash进程重新读取配置文件:
source /path/to/config_file或. /path/to/config_file
撤消别名:unalias
unalias [name ...]
-a 撤销所有别名
如果别名同原命令同名,如果要执行原命令,可使用
“\COMMAND”
’COMMAND’
/PATH/COMMAND:外部命令
wKioL1ecSzHyMcTtAAA-wutiwm4786.png-wh_50mv [OPTION]... [-T] SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE...
常用选项:
-i: 交互式
-f: 强制

rm [OPTION]... FILE...
常用选项:
-i: 交互式
-f: 强制删除
-r: 递归
--no-preserve-root
例:#rm- rf /

tree 显示目录树
-d: 只显示目录
-L level:指定显示的层级数目
-P pattern: 只显示由指定pattern匹配到的路径

mkdir创建目录
-p: 存在于不报错,且可自动创建所需的各目录;
-v: 显示详细信息
-m MODE: 创建目录时直接指定权限;

rmdir删除空目录
-p: 递归删除父空目录
-v: 显示详细信息
-r: 递归删除目录树

(1) 如何创建/testdir/dir1/x, /testdir/dir1/y, /testdir/dir1/x/a, /testdir/dir1/x/b, /testdir/dir1/y/a, /testdir/dir1/y/b
mkdir -p /testdir/dir1/{x,y}/{a,b}

wKiom1ecTV6DgWz7AAAWvjJoVRc464.png-wh_50

(2) 如何创建/testdir/dir2/x,/testdir/dir2/y,/testdir/dir2/x/a,/testdir/dir2/x/b
mkdir -p /testdir/dir2/{x/{a,b},y}

wKiom1ecTbvQBIewAAAS0yNy5ZI223.png-wh_50

(3) 如何创建/testdir/dir3, /testdir/dir4, /testdir/dir5, /testdir/dir5/dir3, /testdir/dir5/dir4
mkdir -p /testdir/dir{3,4,5/dir{3,4}}
wKioL1ecTg-Tqu_CAAATgunNaXA295.png-wh_50

只显示指定目录下的隐藏文件

ls -d /path/.* 或 ls -d /path/.[^.]*

只显示指定目录下的目录(不看其子目录下的文件)

ls -d /path/*/  (当指定目录下没有目录时会出现提示信息)