英文单词
recursive 递归
reverse 倒序
glob 通配符
archive 存档

PS1是linux里头的一个默认的环境变量,用来设置命令提示符的环境变量。
\d :代表日期,格式为weekday month date,例如:"Mon Aug 1"
\H :完整的主机名称。例如:我的机器名称为:fc4.linux,则这个名称就是fc4.linux
\h :仅取主机的第一个名字,如上例,则为fc4,.linux则被省略
\t :显示时间为24小时格式,如:HH:MM:SS
\T :显示时间为12小时格式
\A :显示时间为24小时格式:HH:MM
\u :当前用户的账号名称
\v :BASH的版本信息
\w :完整的工作目录名称。家目录会以 ~代替
\W :利用basename取得工作目录名称,所以只会列出最后一个目录
# :下达的第几个命令
\$ :提示字符,如果是root时,提示符为:# ,普通用户则为:$

编辑~/.bashrc,将所有的PS1中的\w替换为\W就可以让shell只显示最后一个目录名而不显示完整的路径。

复习:
与系统配置的文件
别名—— ~.bashrc
变量——/etc/profile.d/env.sh(自己键的文件)

fhs 分层结构

sbin 系统管理员使用命令
bin
字符设备-顺序查看
块设备-随机查看

var 可变数据文件
srv 服务器数据
proc 映射
sys 硬件信息
opt 第三方软件

可以用神奇的目录进行挂载光盘到/media
方法: cd /misc 在cd cd/ 进行两个命令操作之后光盘自动挂载到/media

一般情况下,相对路径是相对于当前目录
二般情况下,相对其他目录

. 当前目录
.. 上一级目录,父目录

更改命令
绝对路径或者相对路径
cd

列出目录内容
列出当前或者指定目录内容
ls
-a 包含隐藏文件
-l 显示额外信息,较全信息
-ld 目录和符号连接信息
-ad 不具体打开文件夹
-R 目录递归显示
-1 文件分行显示
-S 按照从大到小排序
-t 按mtime排序 修改时间排序
-u 配合-t选项,显示并按atime新到旧排序
-X 按文件后缀排序
显示隐藏文件可以ls -ad .[^.] 如果直接..有可能进入到父母来里去
通配符(匹配文件名) 字符不是字节

  • 匹配零个或多个字符
    ? 匹配任何单个字符
    ~ 当前用户家目录
    ~name用户name家目录
    ~- 前一个工作目录
    [0-9] 匹配数字范围
    [a-z] 字母。有可能显示大写字母
    [A-Z] 字母。有可能显示小写字母小写字母比大写字母优先
    [quan] 匹配列表中的任何一个字符[1..20]表示1 2 0与{1..3}=1 2 3
    [^quan] 匹配列表中的所有字符以外的字符
    预定义字符类 man 7 glob查看
    [:digit:]任意数字,相当于0-9
    [:lower:]任意小写字母=a-z
    [:upper:]任意大写字母=A-Z
    [:alpha:]任意大小写字母
    [:alnum:]任意数字或字母
    注意:用的时候外面有可能还要加[]
    ls -d /etc/ 显示etc下的所有文件,不用打开下面的文件夹
    ls -d /etc/ =ls -d /etc 只是显示etc文件夹
    cp /etc/hosts motd
    ll !
    前一条命令的所有参数即/etc/hosts motd
    \command 使用原始命令,不用别名
    stat 可以查看文件的三个时间,atime 对文件进行一次读操作,它的访问时间就会改变。
    例如像:cat、more等操作
    ctime 当文件的状态被改变的时候,状态时间就会随之改变,
    例如当使用chmod、chown等改变文件属性的操作是会改变文件的ctime的
    mtime 文件的内容被最后一次修改的时间,我们经常用的ls -l命令显示出来的文件时间就是这个时间
    当用vim对文件进行编辑之后保存,它的mtime就会相应的改变

创建空文件
touch
-c 如果文件不存在,则不给予创建
默认如果存在就刷新三个时间,不存在则创建文件
例子:touch date -d "-1 day " +%F.log

复制文件和目录
cp
普通用户时,存在文件不会再继续询问是否覆盖,
因为root用户的是用别名cp=cp-i,且覆盖不了root拥有的文件
目标 不存在 存在且为文件 存在且为目录
源文件
一个文件 新建文件,并同名 覆盖(-i避免) 该目录下新建文件 同名
多个文件 错误 错误 该目录下新建文件 同名
目录(-r) 新建目录 同名 错误 该目录下新建文件 同名
-i 覆盖提示
-r/R递归复制目录及其所有内容
-a 保留—— -dR --preserv=all
-d --no-dereference--preserv=links 不复制源文件,只复制链接名
-v --verbose 复制显示详细过程
-u 只复制比源文件更新的文件
--backup=numbered 目标存在,覆盖前先备份加数字后缀,文件
cp -r /etc /data/backup`date +%F

批量改名
rename “改的地方” “改成什么” 改的文件名
eg:rename “.conf” ".conf.bak" file*

移动
mv (文件和文件夹都可以)
-t 目的 文件 文件=将多个文件移动到同一个文件夹内
-i 交互式,询问是否覆盖
-f 强制性
注:同一个目录里面的移动为重命名
也可以对移动的目录更改名字

删除
rm
-i 交互式
-f 强制性
-r 递归删除
可以将rm别名成为mv -t 目录 避免大事
lsof | grep deleted 查看文件删除却没释放内存的进程
当我们要删除巨型文件再利用时,即使删除后,内存并没有释放
只能等到进程关闭后才释放
安全的释放空间和删除文件
建立与源文件的名字一样的文件(> 文件名)—删除文件后——在将其删除

目录操作
tree 显示目录结构
-d 只显示目录 默认显示所有文件
-L level 指定显示的层数
-P pattern 只显示由指定pattern匹配到的路径
mkdir 创建目录
-p 存在与不报错,且可以多级创建个目录
-v 显示过程
-m MODE 创建目录直接指定权限
rmdir 删除空目录
-p 递归删除空目录
-v 显示
rm -r 递归删除目录树

        对于敏感数据的彻底的删除 用shred -zvu 文件名 

mkdir -p /testdir/dir2/{x/{a,b},y} 创建dir2/x dir2/y dir2/x/a dir2/x/b 
echo /etc/hosts{,,.bak}
---------/etc/hosts /etc/hosts /etc/hosts.bak

分配数据最少块为 4k

索引节点
inode =index node 表中包含文件系统所有文件列表
一个节点是在一个表项,包含有关文件的信息(元数据)
连接数
文件大小 文件时间
指向磁盘上文件的数据块指针
有关文件的其他数据

直接指针最多12个指向最大为12X4=48k
间接指针:一个指针指向一个块4K 一个指针为4个字节=1024个指针
可以多重间接指针达到指向更大的数据

mv和inode
如果mv命令的目标在相同的文件系统,作为mv命令

文件

如果空间满了。可能是节点满了

rm命令
连接数递减,释放的inode号可以被重用
把数据块放在空闲列表中
数据实际上不会马上被删除,当另外一个文件使用数据块时被覆盖

ln link硬链接 一个文件多个文件名 ln 源文件 连接名字 连接数+1
新建的文件夹至少连接数为2,因为目录下面有个 . 代表当前目录
再建一个子文件夹 连接数为3 ,因为子目录下面有 ..代表上一级目录
且目录不能创建硬链接
不能跨分区创建
硬链接之间是平行关系
ln -s 创建软连接 原始文件的连接数不增
可以跨分区创建
目录也是可以的
需要绝对路径,如果用相对路径则需要相对的是软连接的路径
大小由原始路径的字符决定
软硬的区别
连接数
可不可以跨分区
目录可不可以创建
原始和连接的文件关系
删除后果
大小

readlink 查看软连接指向

生产中升级软件调试软件的方法
创建软连接 需要升级的时候将原来的软连接删掉,重新创建同名软连接指向升级包

linux后缀对系统没影响,对用户方便 所以不能通过文件后缀判断文件类型

file 判断文件类型
-b 只显示结果
-f filelist列出文件filelist中文件名的文件类型
-L 查看软连接对应的文件的文件类型
文件类型主要体现在文件的开头magic number 魔数

命令
file
tree
cp -a -r -p -v
ln -s
mv
rm -rf
rmdir
mkdir -p
rename
stat 文件具体元数据
shred
readlink
lsof 查看删除对应的

标准输入和输出
程序:指令+数据
读入数据:Input
输出数据:Output
打开的文件都有一个fd :file descriptor(文件描述符)
linux给程序提供三种I/O设备
标准输入STDIN -0 默认来自键盘的输入
标准输出STDOUT -1 默认输出到终端窗口
标准错误STDERR -2 默认输出到终端窗口
I/O重定向:改变默认位置
ls /data /error >all.log 2>&1 2>&1 把错的变成对的,且>all.log 与2>&1不能调换
也可以用 &>all.log

    cmd >log 2>&1
    cmd 2>&1 >log
    cmd &>log
    cmd 2>log >&2
    四个哪个与众不同

/dev/null相当于黑洞

输出和错误重定向到文件内
>bigfile 空文件 也可以用>>创建空文件 
命令  操作符号 文件名 
支持的操作符号
    > 把STDOUT重定向到文件
    2> 把STDERR重定向到文件
    &> 把所有输出重定向到文件
    单个> 文件会覆盖
        set -C 禁止覆盖可追加
        >|file 强制覆盖
        set +C 允许覆盖
    >>追加