<!DOCTYPE html>
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=unicode">
<!--defaultCSS-->
<title>_1_bash基础概念及功能.md</title>
<style type="text/css" id="wiz_todo_style_id" wiz_link_version="01.00.09">.wiz-todo, .wiz-todo-img {width: 16px; height: 16px; cursor: default; padding: 0 10px 0 2px; vertical-align: -10%;-webkit-user-select: none;} .wiz-todo-label { display: inline-block; padding-top: 7px; padding-bottom: 6px; line-height: 1.5;} .wiz-todo-label-checked { color: #666;} .wiz-todo-label-unchecked {text-decoration: initial;} .wiz-todo-completed-info {padding-left: 44px; display: inline-block; } .wiz-todo-avatar { width:20px; height: 20px; vertical-align: -20%; margin-right:10px; border-radius: 2px;} .wiz-todo-account, .wiz-todo-dt { color: #666; }</style>
<style id="wiz_custom_css"> html, body { font-size: 15px; } body { font-family: Helvetica, 'Hiragino Sans GB', '微软雅黑', 'Microsoft YaHei UI', SimSun, SimHei, arial, sans-serif; line-height: 1.6; margin: 0; padding: 20px 36px; padding: 1.33rem 2.4rem; } h1, h2, h3, h4, h5, h6 { margin: 20px 0 10px; margin: 1.33rem 0 0.667rem; padding: 0; font-weight: bold; } h1 { font-size: 21px; font-size: 1.4rem; } h2 { font-size: 20px; font-size: 1.33rem; } h3 { font-size: 18px; font-size: 1.2rem; } h4 { font-size: 17px; font-size: 1.13rem; } h5 { font-size: 15px; font-size: 1rem; } h6 { font-size: 15px; font-size: 1rem; color: #777777; margin: 1rem 0; } div, p, ul, ol, dl, li { margin: 0; } blockquote, table, pre, code { margin: 8px 0; } ul, ol { padding-left: 32px; padding-left: 2.13rem; } blockquote { padding: 0 12px; padding: 0 0.8rem; } blockquote > :first-child { margin-top: 0; } blockquote > :last-child { margin-bottom: 0; } img { border: 0; max-width: 100%; height: auto !important; margin: 2px 0; } table { border-collapse: collapse; border: 1px solid #bbbbbb; } td { padding: 4px 8px; border-collapse: collapse; border: 1px solid #bbbbbb; } @media screen and (max-width: 660px) { body { padding: 20px 18px; padding: 1.33rem 1.2rem; } } @media only screen and (-webkit-max-device-width: 1024px), only screen and (-o-max-device-width: 1024px), only screen and (max-device-width: 1024px), only screen and (-webkit-min-device-pixel-ratio: 3), only screen and (-o-min-device-pixel-ratio: 3), only screen and (min-device-pixel-ratio: 3) { html, body { font-size: 17px; } body { line-height: 1.7; padding: 0.75rem 0.9375rem; color: #353c47; } h1 { font-size: 2.125rem; } h2 { font-size: 1.875rem; } h3 { font-size: 1.625rem; } h4 { font-size: 1.375rem; } h5 { font-size: 1.125rem; } h6 { color: inherit; } ul, ol { padding-left: 2.5rem; } blockquote { padding: 0 0.9375rem; } }</style><style name="wiz_tmp_editor_style">html, body { font-size: 15px;}body { font-family: Helvetica, 'Hiragino Sans GB', 微软雅黑, 'Microsoft YaHei UI', SimSun, SimHei, arial, sans-serif; line-height: 1.6; color: ; background-color: ; margin: 0; padding: 16px 20px;}h1, h2, h3, h4, h5, h6 { margin: 20px 0 10px; margin: 1.33rem 0 0.667rem; padding: 0; font-weight: bold;}h1 { font-size: 21px; font-size: 1.4rem;}h2 { font-size: 20px; font-size: 1.33rem;}h3 { font-size: 18px; font-size: 1.2rem;}h4 { font-size: 17px; font-size: 1.13rem;}h5 { font-size: 15px; font-size: 1rem;}h6 { font-size: 15px; font-size: 1rem; color: #777777; margin: 1rem 0;}div, p, ul, ol, dl, li { margin: 0;}blockquote, table, pre, code{ margin: 8px 0;}ul, ol { padding-left: 32px; padding-left: 2.13rem;}blockquote { border-left: 4px solid #dddddd; padding: 0 12px; padding: 0 0.8rem;}blockquote > :first-child { margin-top: 0;}blockquote > :last-child { margin-bottom: 0;}img { border: 0; max-width: 100%; height: auto !important; margin: 2px 0;}table { border-collapse: collapse; border: 1px solid #bbbbbb;}td { padding:4px 8px; border-collapse: collapse; border: 1px solid #bbbbbb;}@media screen and (max-width: 660px) { body { padding: 20px 18px; padding: 1.33rem 1.2rem; }}@media only screen and (-webkit-max-device-width: 1024px), only screen and (-o-max-device-width: 1024px), only screen and (max-device-width: 1024px), only screen and (-webkit-min-device-pixel-ratio: 3), only screen and (-o-min-device-pixel-ratio: 3), only screen and (min-device-pixel-ratio: 3) { html, body { font-size: 17px; } body { line-height: 1.7; padding: 0.75rem 0.9375rem; color: #353c47; } h1 { font-size: 2.125rem; } h2 { font-size: 1.875rem; } h3 { font-size: 1.625rem; } h4 { font-size: 1.375rem; } h5 { font-size: 1.125rem; } h6 { color: inherit; } ul, ol { padding-left: 2.5rem; } blockquote { padding: 0 0.9375rem; }}</style><script type="text/javascript" src="file:///F:\Program Files (x86)\WizNote\WizTools\htmleditor\utils.js" wiz_ charset="utf-8"></script><script type="text/javascript" src="file:///F:\Program Files (x86)\WizNote\WizTools\htmleditor\localize.js" wiz_ charset="utf-8"></script><script type="text/javascript" src="file:///F:\Program Files (x86)\WizNote\WizTools\htmleditor\core\wizEditor.js" wiz_ charset="utf-8"></script><script type="text/javascript" src="file:///F:\Program Files (x86)\WizNote\WizTools\htmleditor\core\checklist\todo.js" wiz_ charset="utf-8"></script><script type="text/javascript" src="file:///F:\Program Files (x86)\WizNote\WizTools\htmleditor\core\imageresize\dragresize.js" wiz_ charset="utf-8"></script><script type="text/javascript" src="file:///F:\Program Files (x86)\WizNote\WizTools\htmleditor\editorHelper.js" wiz_ charset="utf-8"></script></head>
<body contenteditable="true" ><div><div>GUI : Gnome, KDE ,Xfce</div><div>CLI : sh csh ksh bash</div></div>CGI ( Common Gate Intergace)通用网关接口用来沟通HTML表单和服务器程序的接口。是一个可被其他语言应用的规范集。<div>##shell种类_历史<br><div><div>shell 1.就是一个命令行解释器,翻译为机器语言发给内核(并不是完整的语言,但提供对过程式逻辑的支持,实现编程机制,依赖外部)。</div><div> 2. 也是一个强大的编程语言,解释执行的基本语言,直接调用linux命令。</div><div> 3.提供命令查找,解析路径,提供自动化的运行环境。<br></div><div>Cshell在BSD版的unix,类似于c语言,分支有csh , tcsh。</div><div>bourne shell最早unix的shell,也叫sh。 Bourne族主要有是sh ,ksh, Bash, psh zsh Bash和sh兼容。 bash----zsh---fish(后两种也有人用)</div><div>Bash是linux的默认shell,基于Bourneshell,吸收了Cshell和kSHELL的一些特性,所以Bash是sh的扩展,sh是 POSIX.</div><div>文件/etc/shells显示支持的shell。支持/bin/sh .bin/bash /sbin/nologin /bin/tcsh /bin/csh</div><div><div><br></div><div>shell有子shell的概念。父子关系的shell,各自并不知道对方的存在。可打开不同的shell。主要介绍bash</div><div>`echo@SHELL` 查看当前的shell</div><div>***</div><div>COMMAND OPTION </div><div>选项有长短,随便用,但长选项合并的少。</div><div>##bash基础特性</div><div><div>###1.命令历史</div><div><br></div><div>```</div><div>定制history的功能,可通过以下环境变量实现:</div><div><span> </span>HISTSIZE:shell进程可保留的命令历史的条数;</div><div><span> </span>HISTFILE:持久保存命令历史的文件;</div><div> <span> </span>~/.bash_history</div><div><span> </span>HISTFILESIZE:命令历史文件的大小,默认1000;</div><div> 命令历史保留在各自的命令缓冲区。<br></div><div>history [-c] [-d 偏移量] [n] 内建命令</div><div> -c 清空所有命令历史;</div><div> -d offset 删除指定 -d 500 10 第500开始删10个;</div><div> -w 保存命令到历史文件中;</div><div> -a 将当前的命令缓冲到历史文件中。</div><div> -n 历史文件中的命令加载到缓冲中。<br></div><div> #显示最近的#条命令;<br></div><div>```</div><div>***</div><div>####调用历史命令</div><div><div>shell程序在接收到用户执行命令的请求,分析完成之后,最左侧的字符串会被当作命令;</div><div>命令查找机制:</div><div>查找内部命令;</div><div>根据PATH环境变量中设定的目录,自左而右逐个搜索目录下的文件名;</div></div><div>```</div><div>!# 第#条命令 也可以用复数倒着写 </div><div>!! 执行上一条命令<br></div><div>!STRING再一次执行命令历史列表中最近一个以STRING开头的命令;不需要全写!$引用一个命令的最后一个参数</div><div>注意:命令的重复执行有时候需要依赖于幂等性;</div><div> esc再按 . 同上 远程支持<br></div><div> alt+. 同上 xshell远程不支持</div><div><div>调用上一条命令的最后一个参数:</div><div><span> </span>快捷键:ESC, .</div><div><span> </span>字符串:!$</div></div><div> 命令历史 一般情况下在内存缓冲区中,用户正常退出后,追加到用户家目录.bash_histroy中 ,在/etc/profile 设置默认多少条</div><div> 环境变量:PATH HISTSIZE缓冲区大小 </div><div>控制以下变量命令历史记录的方式:</div><div>环境变量:HISTCONTROL,有以下3种取值:</div><div> ignoredups:忽略重复的命令;</div><div> ignorespace:以空白字符开头的命令不计入历史;</div><div> ignoreboth:以上两者同时生效;</div><div>eg: HISTCONTROL=ignoredups; 类似于key=valuer</div><div>```</div><div>添加环境变量:见sehll变量。</div><div>***</div></div><div>####命令的执行状态结果<br></div><div><div>命令执行的状态结果:</div><div>bash通过状态返回值来输出此结果:</div><div>成功:0<span> </span>失败:1-255</div><div>命令执行完成之后,其状态返回值保存于bash的特殊变量$?中;<br></div><div>命令正常执行时,有的还回有命令返回值:<br></div><div>根据命令及其功能不同,结果各不相同;</div><div><br></div><div>引用命令的执行结果:<br></div><div>$(COMMAND)</div><div>或`COMMAND`</div><div>***</div><div>####2.bash的基础特性:引用</div><div>‘’单引号,强引用,所有特殊符号没有没有特殊含义。单引号原不动</div><div><div> "" 双引号,弱引用引号内特殊含义没有特殊含义,有例外$ 调用变量 ` 引用命令 \转意符 </div><div>``` </div><div> `反引号, 引起来的是系统命令。 用于设置别名。 </div><div> #注释 $引用变量 </div></div><div>```</div><div>***</div><div>####3.命令行快捷键</div><div> ctrl+c: 强行结束<br></div><div> Ctrl+a:跳转至命令行行首</div><div> Ctrl+e:跳转至命令行行尾</div><div><br></div><div> Ctrl+u:删除行首至光标所在处之间的所有字符;</div><div> Ctrl+k:删除光标所在处至行尾的所有字符;</div><div> ctrl+y :粘贴 </div><div><br></div><div> Ctrl+l:清屏,相当于clear</div></div><div> ctrl+d : 退出当前终端<br></div><div>###4.命令行展开<br></div><div>####5.命令hash,加速命令执行</div><div>linux把执行过的命令,做hash,缓存的是命令的路径,再后执行时找缓存</div><div><div>```</div><div>hash:列出</div><div>hash -d COMMAND:删除</div><div>hash -r:清空</div></div><div>```</div><div>####globbing:文件名通配(整体文件名匹配,而非部分)<br></div><div><div>匹配模式:元字符<br></div><div><div>通配符和特殊符号 //用来匹配文件名</div><div>```</div><div> ? 任意匹配一个</div><div> * 任意一个或多个或0个</div><div> [] 任意括号内一个</div><div> [x-y] 任意x-y中一个字符</div><div> [^] 排除匹配 </div></div><div> *:匹配任意长度的任意字符</div><div><br></div><div><span> </span>pa*, *pa*, *pa, *p*a*</div><div> pa, paa, passwd</div><div> ?:匹配任意单个字符</div><div><span> </span>pa?, ??pa, p?a, p?a?</div><div><span> </span>pa, paa, passwd</div><div> []:匹配指定范围内的任意单个字符</div><div> 有几种特殊格式:</div><div><span> </span>[a-z], [A-Z], [0-9], [a-z0-9]</div><div><span> </span>[[:upper:]]:所有大写字母</div><div><span> </span>[[:lower:]]:所有小写字母</div><div><span> </span>[[:alpha:]]:所有字母</div><div><span> </span>[[:digit:]]:所有数字</div><div><span> </span>[[:alnum:]]:所有的字母和数字</div><div><span> </span>[[:space:]]:所有空白字符</div><div><span> </span>[[:punct:]]:所有标点符号</div><div> <span> </span>pa[0-9][0-9], 2[0-9][0-9]</div><div>[^]:匹配指定范围外的任意单个字符</div><div><span> </span>[^[:upper:]]</div><div><span> </span>[^0-9]</div><div><span> </span>[^[:alnum:]]</div></div><div>```</div><div>***</div><div><br></div><div>### 6.管道,I/O重定向</div><div><div>echo命令的功能是在显示器上显示一段文字,一般起到一个提示的作用。</div><div>```</div><div>####重定向</div><div>></div><div>tail -n 100 /var/log/dmesg > /tmp/last-100-boot //把最后100行日志放到另一个文件中 ,*覆盖输出*</div><div>cat file file1 file2 file3 > /tmp/allthree //把三个文件合在一起</div><div>>></div><div><div>echo "new line of information " >> /tmp/all-file // 把引号中的附加到文件最后,*追加输出*</div><div>diff file1 file2 >> /tmp/all-file //两个文件中的不同的放在一个文件中<br></div><div>2> 重定向错误输出</div><div>2>> 追加方式 &>正确和错误输出至同一个文件 </div><div>< 输入重定向,默认输入时键盘。</div><div> eg: #tr 'a-z' 'A-Z' < /etc/</div><div><< 输入不能追加,在此处生成文档。Here Docment .</div><div> eg :</div><div>cat << END 在下一行生成>输入文字,直到输入<< 后面的终止符类似END.文档结束标记是类似的用的多的是EOF。</div><div>cat >> /tmp/myfile.txt << EOF 输出输入的文档到文件中,在脚本中生成文件或文档。 </div><div>set -C 禁止对已存在文件使用覆盖重定向;强制覆盖输出,则使用>|</div><div>set +C 关闭上述功能</div><div><div>####管道</div><div>COMMAND1 | COMMAND2 | COMMAND3 | ... 管道:前一个的输入当成后一个命令的输入。</div><div><div>tee xxxx 从标准输入中读取输入,存到文档中一个并且放到屏幕上一份。<br></div><div> tee命令:</div><div><span> </span>COMMAND | tee /PATH/TO/SOMEFILE</div></div><div>```</div><div>***<br></div></div></div></div><div>###7.命令别名</div><div>alias 'A=ls'只在当前shell进程中有效</div><div>命令别名<br></div><div>unalias 撤销别名<br></div><div>alias 显示现在所有的别名。</div><div>alias 别名='命令' //临时生效,放入/etc/bashrc永久生效</div><div>`#unalias 别名 //输出`</div><div>命令优先级</div><div>第一顺位执行路径命令。</div><div>第二执行别名、</div><div>第三bash内部命令。//有些命令没有</div><div>第四\$PATH环境中查询到的命令。</div><div>/xxx/.bashrc目录下.</div><div>命令替换用\$或``. 把某个字符串替换为命令执行结果。echo ‘$pwd’</div><div>touch ./file-$(%F-%H-%M-%S).txt 创建了一个带时间的文件<br></div><div>``命令替换 ''强引用 ""弱引用可以完成变量替换</div><div>***</div><div>###7.变量</div><div>移步shell变量</div><div>###8编程 </div><div>移步shell编程<br></div><div>运行时 路径调用执行<br></div><div><div> 或bash xxxx //这种方法可不用该权限</div><div> linux中回车符识别为$ </div><div> </div><div> windows中回车符为^M$</div><div> #dos2unix xxxx //从dos转unix+</div><div>引用变量”$xxxx“<br></div></div></div></div></div></body></html>