您的位置:首页 > 运维架构 > Shell

Linux目录结构、bash的基础特性、I/O重定向及管道

2015-08-24 13:20 531 查看
日期: 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 命令列出目录内文件时,排在每行第一列的第一个字符,表示该文件的类型[root@CentOS-6tmp]# ll /usrtotal124dr-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键,就会列出所有以输入字符开头的可用命令。[root@CentOS-6 ~]# mkd // 此处敲两次TAB键盘,显示下列命令mkdict mkdir mkdosfs mkdumprd [root@CentOS-6 ~]# mkdi // 此处敲两次TAB键盘,则显示下列命令,逐渐缩小命中的范围mkdict mkdir [root@CentOS-6 ~]# bash的命令分为两类:内部命令:系统内建的命令外部命令:在系统某路径下有一个可执行程序 ★使用type命令可识别命令属于哪类,使用 -a选项可以查找到该命令的可执行文件[root@CentOS-6~]# type historyhistory is a shell builtin[root@CentOS-6~]#[root@CentOS-6~]# type -a lslsis aliased to `ls --color=auto'ls is /bin/ls[root@CentOS-6~]# 命令搜索机制:PATH环境变量:由冒号分割的路径,自左而右搜索[root@CentOS-6 ~]# echo $PATH/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin 命令搜索并非每次都搜索PATH路径,而是通过搜索hash以达到更高的效率。hash:把此前搜索到的路径缓存到内存中kv: key-valuels --> /bin/ls [root@CentOS-6 ~]# hashhits 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 [root@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'[root@CentOS-6 tmp]# (5)命令的执行状态结果,由bash追踪和保存命令的执行结果有两种:命令执行结果的返回值命令执行后的状态返回值 bash使用特殊变量$? 保存最近一条命令的状态结果,可使用 echo $? 显示 bash:每个命令,状态返回值。成功:0失败:1-255,(其中1、2、127被系统保留)$?: 实例:[root@CentOS-6 tmp]#[root@CentOS-6 tmp]# ls /usrbin etc games include lib lib64 libexec local sbin share src tmp //以上为命令执行结果的返回值[root@CentOS-6 tmp]# echo $?0 //此为命令执行后的状态返回值,数值0表示命令执行成功[root@CentOS-6 tmp]#[root@CentOS-6 tmp]# ls /usrrls: cannot access /usrr: Nosuch file or directory //以上是故意输错目录名,所以命令执行失败[root@CentOS-6 tmp]#[root@CentOS-6 tmp]# echo $?2 //此为命令执行后的状态返回值,数值2表示命令执行失败[root@CentOS-6 tmp]# (6)命令别名命令别名:命令的另一个引用符号,由bash程序维护直接输入alias可显示当前系统上所有已定义的命令别名 定义别名:alias 别名=‘原始命令’ 例如:alias cls='clear' 取消定义的别名:unalias 别名例如:unalias cls ★如果别名同原命令名:想直接执行原命令,则需在命令前加\,表示使用命令本身,而不是别名★~/.bashrc#如果要使指定的别名永久生效,则修改此文件,把命令别名添加为此文件内容。 bash的基础特性(二) (1)globingbash中的文件名通配通配符:*:匹配任意长度的任意字符?:匹配任意单个字符[^] #(脱字符)匹配指定范围之外的任意单个字符[]:匹配指定字符范围内的任意单个字符,不区分大小写[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 << EOFa: a is assholeb: b is bastardc: c is cadgerd: d is damnEOF 输出重定向:>,>>>: 覆盖输出>>: 追加输出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,命令不会处理,会送到下一个管道
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: