日期: 2015年08月23日
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 命令列出目录内文件时,排在每行第一列的第一个字符,表示该文件的类型 [iyunv@CentOS-6tmp]# ll /usr total124 dr-xr-xr-x. 2 root root 36864 Aug 23 10:15 bin
-: 普通文件 d: 目录文件 b: 块设备文件 c: 字符设备文件 l: 符号链接文件(类似快捷方式) p: 命名管道文件 s: 套接字文件
<<===================================== 【BASH的基础特性】=====================================>> bash的基础特性(一)
(1)命令历史 bash保存的过去曾经执行过的命令的列表 当前shell进程的命令历史保存在缓冲区中; 缓冲区中的命令会在shell退出时保存至文件中用户家目录 .bash_history
history快捷方式: !#: #为命令历史列表中的命令编号;可用执行第#条命令; !!: 执行上一条命令; !-#: 执行命令历史列表中的倒数第#条命令; !string: 执行命令历史列表中的最近一次以string开头的命令; !$: 引用上个命令的最后一个参数; ESC ——> .
history命令 -c: 清空列表 -d #: 删除指定的历史命令 -a: 追加当前会话的命令历史至历史文件中去; -r:读取历史文件内容,并追加当前会话的命令历史至历史文件中去 -w:把当前会话的命令历史追加到文件
命令历史相关的环境变量: HISTSIZE: 命令历史中可以保存的命令的个数; HISTFILE: 命令历史文件; HISTFILESIZE: 命令历史文件可以保存的命令的个数; HISTCONTROL: 控制命令历史的生成; ignoredups: 忽略记录重复的命令;连续的相同命令才为重复; ignorespace: 不记录以空白字符开头的命令; ignoreboth: 同时具有上面两种特性;
(2)命令补全 在Linux系统中,输入一个命令时如果不记得完整的命令,可先输入该命令的前几个字符,再按两次TAB键,就会列出所有以输入字符开头的可用命令。 [iyunv@CentOS-6 ~]# mkd // 此处敲两次TAB键盘,显示下列命令 mkdict mkdir mkdosfs mkdumprd [iyunv@CentOS-6 ~]# mkdi // 此处敲两次TAB键盘,则显示下列命令,逐渐缩小命中的范围 mkdict mkdir [iyunv@CentOS-6 ~]#
bash的命令分为两类: 内部命令:系统内建的命令 外部命令:在系统某路径下有一个可执行程序
★使用type命令可识别命令属于哪类,使用 -a选项可以查找到该命令的可执行文件 [iyunv@CentOS-6~]# type history history is a shell builtin [iyunv@CentOS-6~]# [iyunv@CentOS-6~]# type -a ls lsis aliased to `ls --color=auto' ls is /bin/ls [iyunv@CentOS-6~]#
命令搜索机制: PATH环境变量:由冒号分割的路径,自左而右搜索 [iyunv@CentOS-6 ~]# 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
[iyunv@CentOS-6 ~]# 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
[iyunv@CentOS-6 tmp]# mkdir -pv x/{a,b}_{c,d} mkdir: created directory `x' mkdir: created directory `x/a_c' mkdir: created directory `x/a_d' mkdir: created directory `x/b_c' mkdir: created directory `x/b_d' [iyunv@CentOS-6 tmp]#
(5)命令的执行状态结果,由bash追踪和保存 命令的执行结果有两种: 命令执行结果的返回值 命令执行后的状态返回值
bash使用特殊变量$? 保存最近一条命令的状态结果,可使用 echo $? 显示
bash:每个命令,状态返回值。 成功:0 失败:1-255,(其中1、2、127被系统保留) $?:
实例: [iyunv@CentOS-6 tmp]# [iyunv@CentOS-6 tmp]# ls /usr bin etc games include lib lib64 libexec local sbin share src tmp //以上为命令执行结果的返回值 [iyunv@CentOS-6 tmp]# echo $? 0 //此为命令执行后的状态返回值,数值0表示命令执行成功 [iyunv@CentOS-6 tmp]# [iyunv@CentOS-6 tmp]# ls /usrr ls: cannot access /usrr: Nosuch file or directory //以上是故意输错目录名,所以命令执行失败 [iyunv@CentOS-6 tmp]# [iyunv@CentOS-6 tmp]# echo $? 2 //此为命令执行后的状态返回值,数值2表示命令执行失败 [iyunv@CentOS-6 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
输入重定向:<,<< <: 输入重定向(基本用不上,以下命令 < 都可省略) 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,命令不会处理,会送到下一个管道
|