linux学习日记

2020-06-19日记

  只要能够操作应用程序的接口都能称为shell。狭义的shell指的是命令行方面的软件,包括bash。广义的shell则包括图形界面软件,因为图形界面其实也可以操作各种应用程序来调用内核工作,不过,在这里我们主要指的是bash。

  # type [-tpa] command –> 查看命令是否为bash的内置命令或者是外部命令

  * 利用$var或者是${var}可获取变量var的值

  * bash中的双引号:特殊字符如$等,可以保有原本的特性

  * bash中的单引号:所有的字符均为普通的字符,没有其他含义

  *可以用将特殊字符变成一般字符

  * 可用$(其他命令)来在命令中嵌套其他命令的返回值,也就是说:${var}取得变量var的值,$(command)取得命令返回值

  * 若变量需要在其他子进程中执行,需要export var 来使变量成为环境变量

  * unset var 可取消变量var的定义

  ====环境变量====

  # env –> 查看当前系统的环境变量

  $本身也是一个变量,表示本shell的PID号,比如 # echo $$ 输出本shell的PID

  ?本事也是一个变量,表示上一个执行的命令的返回值,一般如果是0表示执行成功,如果非0表示有问题。

  公共的语系编码设置:/etc/sysconfig/i18n

  # read [-pt] variable –> 键盘读取变量输入值

  -p:后面可以跟提示符

  -t:后面可以接等待的秒数,不会一直等待用户输入

  ====变量的声明====

  # declare [-aixrp] var

  -a:将后面的var定义为数组类型

  -i:将后面的var定义为integer整数类型

  -x:用法与export一样,就是将后面的var变成环境变量

  -r:将变量var设置成readonly状态,该变量不能被更改,也不能重设

  -p:单独列出变量的类型

  如果把-改成+表示取消操作

  ====限制用户的计算机资源使用====

  # ulimit [-SHacdfltu] [配额]

  -H:hardlimit,严格的限制,必定不能超过这个数值

  -S:softlimit,可以超过这个值,但有警告信息

  -a:后面不接任何参数,列出所有的限制额度

  -c:某些进程发生错误的时候,系统会将该进程在内存中的信息写成文件,称为内核文件。限制每个内核文件的最大容量

  -f:此shell可创建的最大单一文件容量,单位为KB

  -d:进程可以使用的最大内存量

  -l:可用于lock的内存量

  -t:最大的CPU时间(单位为秒)

  -u:单一用户可使用的最大进程(process)数量

  ====变量内容的删除与替换====

  # echo ${path#/*:} –> 删除path变量中最前面的那个以/开头,以:结尾的

  # echo ${path##/*:} –> 删除最长的那个,也就是说只保留了最后的一个路径

  # –> 符合替换文字的最短的那个

  ## –> 符合替换文字的最长的那个

  如果想从后面开始删,用%替换#即可

  接下来讲替换功能:

  # echo ${path/sbin/SBIN} –> 将第一个sbin替换成SBIN

  # echo ${path//sbin/SBIN} –> 将所有的sbin替换成SBIN

  我们将这部分总结说明下一下:

  变量设定方式   说明       ${变量#关键字}

  ${变量##关键字}   若变量內容从头开始的数据符合『关键字』,则将符合的最短数据删除

  若变量內容从头开始的数据符合『关键词』,则将符合的最长数据删除       ${变量%关键字}

  ${变量%%关键字}   若变量內容从尾向前的数据符合『关键字』,则将符合的最短资料删除

  若变量內容從尾向前的数据符合『关键字』,则将符合的最長资料删除       ${变量/旧字串/新字串}

  ${变量//旧字串/新字串}   若变量內容符合『旧字串』則『第一個旧字串会被新字串取代』

  若变量內容符合『旧字串』則『全部的旧字串会被新字串取代』

  # username=${username:-root} –> 如果username非空就取原值,如果没有设置或者为空字符串就设置成root

  ====bash登录界面与登录成功后的欢迎界面====

  tips:最好是单一bash登陆,然后利用job control来切换不同的工作,这样的话shell的history才能完全保存下来

  命令的执行搜索路径顺序:先alias,再builtin,再$PATH

  bash的登陆界面配置文件:/etc/issue,远处登陆界面配置文件:/etc/issue.net

  命令# man mingetty查看issue中各个代码的意义

  登陆成功后显示的信息配置文件:/etc/motd

  ====bash环境变量====

  login shell的配置文件:

  /etc/profile:系统全局配置文件,最好不要修改这个文件

  ~/.bash_profile或者~/.bash_login或者~/.profile:用户自定义bash配置文件

  ~/.bashrc,这个配置文件login shell和non-login shell都会读取

  ====bash中的通配符和特殊字符====

  符号   意义       *   代表『 0 个到无穷多个』任意字符       ?   代表『一定有一个』任意字元       [ ]   同样代表『一定有一个在括号內』的字元(非任意字元)。例如 [abcd] 代表『一定有一个字元, 可能是 a, b, c, d 这四个任何一个』       [ - ]   若有减号在中括号内时,代表『在编码顺序內的`所有字元』。例如 [0-9] 代表 0 到 9 之间的所有数字,因为数字的语系编码是连续的!       [^ ]   若中括号內的第一个字元为指数符号 (^) ,那表示『反向选择』,例如 [^abc] 代表 一定有一个字元,只要是非 a, b, c 的其他字元就接受的意思。

  除了通配符之外,bash 環境中的特殊符號有哪些呢?底下我們先汇整一下:

  符号   內容       #   注释符号:这个最常被使用在 script 当中,视为说明#在后的语句均不执行          跳脱符号:將『特殊字符或万用字符』还原成一般字元       |   管道 (pipe):分隔两个管道命令的界定(后两节介紹);       ;   连续指令下达分隔符:连续性命令的界定 (注意!与管道命令不相同)       ~   使用者的家目录       $   取用变量前置字元:亦即是变量之前需要加的变量取代值       &   工作控制 (job control):将指令变成背景下工作       !   逻辑运算意义上的『非』 not 的意思!       /   目录符号,路径分割符号       >, >>   数据流重导向:输出导向,分別是『取代』与『累加』       <, <<   数据流重导向:输入导向 (这两个以后说明)       ‘ ‘   单引号,里面全是普通字符,不具备变量置换功能       ” “   具有变量置换的功能!       ` `   两个『 ` 』中间为可以先执行的指令,亦可使用 $( )       ( )   在中间为子 shell 的起始与结束       { }   在中间为命令区块的組合!

上一篇:拜年日记400字下一篇:常学习日记