Linux目录结构
LSB(Linux StandardsBase)是一套核心标准,它保证了LINUX发行版同LINUX应用程序之间的良好结合规定了一系列标准,其中包括文件系统层级结构标准(FHS Filesystem Hierarchy Standard)
Linux系统根目录下有众多子目录,这些目录都参照了FHS协定
/
├── bin
├── boot
├── dev
├── etc
├── home
├── lib
├── lib64
├── lost+found
├── media
├── mnt
├── opt
├── proc
├── root
├── sbin
├── selinux
├── srv
├── sys
├── tmp
├── usr
└── var
/bin: binary供用户使用的基本命令;OS启动即会用到的程序
/boot:存放系统启动相关的文件,如内核、initrd,以及grub(bootloader)
/dev: 存放设备文件
块设备:随机访问,数据块(如硬盘)
字符设备:线性访问,按字符为单位(如键盘)
设备号:主设备号(major)和次设备号(minor)
/etc: 配置文件的存放目录;(需要经常备份)
/etc/sysconfig:系统级别的应用配置
/etc/init.d:系统服务脚本
/home:用户的家目录,每一个用户的家目录通常默认为/home/USERNAME
/lib: 基本共享库;内核模块
/lib/modules:内核模块文件
静态库, .a
动态库, .dll, .so (shared object)
库文件是不能单独执行的,它因为没有程序的执行入口,只能被调用
/lib64: x86_64系统的库文件
/Lost+Found:用来存放fsck过程中部分修复的文件的
/media:挂载点目录,通常用于挂载移动设备(一般在该目录下建立子目录进行挂载)
/mnt:挂载点目录,通常用于挂载额外的临时文件系统
/opt:可选目录,第三方程序的安装目录(一般不用)
/proc:伪文件系统,内核参数映射文件(用于输出内核与进程的相关信息)
/root:管理员的家目录;
/sbin: 管理类的基本命令
/selinux:
/srv: services,系统上运行的服务用到的中间数据
/sys: 伪文件系统,输出内核所识别的当前系统上硬件设备相关的属性映射文件
/tmp: 临时文件目录
/usr: Universal Shared Read-onlydata 全局共享的只读数据(可独立分区)
/usr/bin:
/usr/sbin:
/usr/lib:
/usr/lib64:
/usr/include:(应用程序的头文件:header files)
/usr/share:结构化的独立数据
doc, man(应用程序的帮助文档)
/usr/local: 现在常用的第三方程序的安装位置
/usr/local/bin
/usr/local/sbin
/usr/local/lib
/usr/local/lib64
/usr/local/etc
/usr/local/share
/var: variable date files(存放经常需要发生变化的数据)
/var/cache: 应用程序缓存数据
/var/lib: 应用程序的状态信息数据
/var/local: 专用于为/usr/local下的应用程序存储可变数据
/var/lock: 锁文件
/var/log: 日志文件
/var/opt: 专用于/opt
/var/spool: 应用程序的数据池
/var/run: 运行中的进程的相关数据:通常用守护进程的pid文件
Linux的文件类型:
使用ls -l 命令列出目录内文件时,排在每行第一列的第一个字符,表示该文件的类型
[[email protected]]# ll /usr
total124
dr-xr-xr-x. 2 root root 36864 Aug 23 10:15 bin
-: 普通文件
d: 目录文件
b: 块设备文件
c: 字符设备文件
l: 符号链接文件(类似快捷方式)
p: 命名管道文件
s: 套接字文件
<<=====================================>>
bash的基础特性(一)
(1)命令历史
bash保存的过去曾经执行过的命令的列表
当前shell进程的命令历史保存在缓冲区中 ;
-c: 清空列表
-d #: 删除指定的历史命令
-a: 追加当前会话的命令历史至历史文件中去;
-r:读取历史文件内容,并追加当前会话的命令历史至历史文件中去
-w:把当前会话的命令历史追加到文件
命令历史相关的环境变量:
缓冲区中的命令会在shell退出时保存至文件中用户家目录 .bash_history
history快捷方式:
!#: #为命令历史列表中的命令编号;可用执行第#条命令;
!!: 执行上一条命令;
!-#: 执行命令历史列表中的倒数第#条命令;
!string: 执行命令历史列表中的最近一次以string开头的命令;
!$: 引用上个命令的最后一个参数; ESC ——> .
history命令
HISTSIZE: 命令历史中可以保存的命令的个数;
HISTFILE: 命令历史文件;
HISTFILESIZE: 命令历史文件可以保存的命令的个数;
HISTCONTROL: 控制命令历史的生成;
ignoredups: 忽略记录重复的命令;连续的相同命令才为重复;
ignorespace: 不记录以空白字符开头的命令;
ignoreboth: 同时具有上面两种特性;
(2)命令补全
在Linux系统中,输入一个命令时如果不记得完整的命令,可先输入该命令的前几个字符,再按两次TAB键,就会列出所有以输入字符开头的可用命令。
[[email protected] ~]# mkd // 此处敲两次TAB键盘,显示下列命令
mkdict mkdir mkdosfs mkdumprd
[[email protected] ~]# mkdi // 此处敲两次TAB键盘,则显示下列命令,逐渐缩小命中的范围
mkdict mkdir
[[email protected] ~]#
bash的命令分为两类:(如命令既有内部又有外部,优先使用内部目录位置)
内部命令:系统内建的命令
外部命令:在系统某路径下有一个可执行程序
★使用type命令可识别命令属于哪类,使用 -a选项可以查找到该命令的可执行文件
[[email protected]~]# type history
history is a shell builtin
[[email protected]~]#
[[email protected]~]# type -a ls
lsis aliased to `ls --color=auto‘
ls is /bin/ls
[[email protected]~]#
命令搜索机制:
PATH环境变量:由冒号分割的路径,自左而右搜索
[[email protected] ~]# echo $PATH
/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
命令搜索并非每次都搜索PATH路径,而是通过搜索hash以达到更高的效率。
hash:把此前搜索到的路径缓存到内存中
kv: key-value
ls --> /bin/ls
[[email protected] ~]# hash
hits command
5 /bin/cat
1 /usr/bin/man
3 /bin/ls
8 /usr/bin/tree
3 /usr/bin/clear
(3)路径补全(避免出错、提高效率)
路径补全:跟命令补全一样的概念,当用户输入路径名的开头字符,连续敲TAB键,则会搜索指定字符串卡头的目录,并补全路径。
如果该路径名是唯一:直接补全
否则:两次TAB,可列出
(4)命令行展开的功能
bash命令行展开能够把一个特殊字符换成别的字符
~ 展开为当前用户的主目录(家目录)
~USERNAME 展开为指定用户的家目录
{,} 可承载一个以逗号分割的列表,并其展开为多个路径
例如:
/var/{log,cache,run} = /var/log /var/cache /var/run
如何创建目录x_n、x_m、y_n、y_m
[[email protected] /]# mkdir -pv /zjj/{x,y}_{n,m}
mkdir: created directory ‘/zjj’
mkdir: created directory ‘/zjj/x_n’
mkdir: created directory ‘/zjj/x_m’
mkdir: created directory ‘/zjj/y_n’
mkdir: created directory ‘/zjj/y_m’
目录管理命令:
mkdir :创建目录
-p:创建父目录
-v:显示创建过程
rmdir :删除空目录
tree :以树状结构方式显示目录
-d:只显示层级目录文件
-L level:只显示几个层级
(5)命令的执行状态结果,由bash追踪和保存
命令的执行结果有两种:
命令执行结果的返回值
命令执行后的状态返回值
bash使用特殊变量$? 保存最近一条命令的状态结果,可使用 echo $? 显示
bash:每个命令,状态返回值。
成功:0
失败:1-255,(其中1、2、127被系统保留)
$?:
实例:
[[email protected] tmp]#
[[email protected] tmp]# ls /usr
bin etc games include lib lib64 libexec local sbin share src tmp
//以上为命令执行结果的返回值
[[email protected] tmp]# echo $?
0 //此为命令执行后的状态返回值,数值0表示命令执行成功
[[email protected] tmp]#
[[email protected] tmp]# ls /usrr
ls: cannot access /usrr: Nosuch file or directory
//以上是故意输错目录名,所以命令执行失败
[[email protected] tmp]#
[[email protected] tmp]# echo $?
2 //此为命令执行后的状态返回值,数值2表示命令执行成功
[[email protected] tmp]#
(6)命令别名
命令别名:命令的另一个引用符号,由bash程序维护
直接输入alias可显示当前系统上所有已定义的命令别名
定义别名:alias 别名=‘原始命令’
例如:alias cls=‘clear‘
取消定义的别名:unalias 别名
例如:unalias cls
★如果别名同原命令名:想直接执行原命令,则需在命令前加\\,表示使用命令本身,而不是别名
★~/.bashrc#如果要使指定的别名永久生效,则修改此文件,把命令别名添加为此文件内容。
bash的基础特性(二)
(1)globing
bash中的文件名通配
通配符:
*:匹配任意长度的任意字符
?:匹配任意单个字符
[^] #(脱字符)匹配指定范围之外的任意单个字符
[]:匹配指定字符范围内的任意单个字符,不区分大小写
[abc], [a-m], [a-z], [A-Z], [0-9], [a-zA-Z], [0-9a-zA-Z]
[:space:] 空白字符
[:punct:] 标点符号
[:lower:] 小写字母
[:upper:] 大写字母
[:alpha:] 大小写字母
[:digit:] 数字
[:alnum:] 数字和大小写字母
# man 7 glob 查看globing帮助手册
(2)组合键
bash中有众多的快捷键,我们熟练掌握它们将会提高工作效率
光标跳转:
Ctrl+a:跳到命令行首
Ctrl+e:跳到命令行尾
Ctrl+f:光标往前跳一个字符
Ctrl+b:光标往后跳一个字符
删除OR粘贴:
Ctrl+d:删除光标所在字符
Ctrl+u: 剪切光标至命令行首的内容
Ctrl+k: 剪切光标至命令行尾的内容
Ctrl+y:粘贴所剪切的内容
Ctrl+l #清屏
Ctrl+c #终止命令
Ctrl+z #暂停命令(把进程放在后台运行)
输入jobs 查看后台运行命令
输入fg 回到前台运行
Ctrl+r #搜索历史
(3)IO重定向和管道
输入输出重定向
I/O: 设备, 寄存器
INPUT:标准输入:stdin, 0
OUPUT:标准输出:stdout, 1
标准错误:stderr,2
输入重定向:<,<<< p="">
<: 输入重定向(基本用不上,以下命令 < 都可省略)
cat < /etc/passwd
tr ‘a-z‘ ‘A-Z‘ < /etc/passwd
<< EOF: 此处创建文件, Here Document
常用于在脚本中创建文件或生成菜单;
#!/bin/bash
#
cat > /tmp.menu.txt << EOF
a: a is asshole
b: b is bastard
c: c is cadger
d: d is damn
EOF
输出重定向:>,>>
>: 覆盖输出
>>: 追加输出
set -C:禁止使用覆盖重定向至已经存在的文件;
set +C: 关闭上述特性;
>|:在-C特性下,强制使用覆盖重定向;
/dev/null: bit bucket,位桶
错误重定向:2>,2>>
2>: 覆盖
2>>: 追加
同时重定标准输出和错误输出:
COMMAND > /path/to/outfile 2> /path/to/errfile
重定向标准输出或错误输出至同一个文件
COMMAND &> /path/to/somefile
COMMAND > /path/to/somefile 2>&1
管道
管道:把一个命令的执行结果传递给下一条命令,作为下一条命令的参数
COMMAND1 | COMMAND2 | COMMAND3 | ...
不能在管道中传递变量,尤其不能在前面的命令中生成变量
tee的用法:
cat /etc/rc.d/rc.sysinit | tee /tmp/a.out | wc -l
分叉输出:tee,命令不会处理,会送到下一个管道