一、认识BASH
1、硬件、核心与shell
硬件:整个系统的实体工作者,包含了硬盘、cpu等
核心:控制硬件工作
shell:使用者界面
2、文字接口的shell
·远程管理
Linux管理常需要远程连接,且要求传输速度要快,不易出现短线或是信息外流。
3、系统的合法shell与/etc/shells功能
查看有哪些可以使用的shells
cd /etc
ls
cat shells
·/bin/sh:已经被/bin/bash所取代
`/bin/bash:Linux预设的shell
·/bin/ksh:兼容于bash
·/bin tcsh:整合c shell,提供更多的功能
·/bin/csh:已经被/bin/tcsh索取嗲
·/bin/zsh:功能更加强大的shell
4、Bash shell的功能
1)命令修改(history)
2)命令于档案补全功能【tab】
【tab】接在一串指令的第一个字的后面,命令补全
【tab】接在一串指令第二个字以后,档案补齐
3)命令别名设定功能(alias)
alias test='ls -al'
5、Bash shell的内建命令
type [-tpa] name
选项和参数:
-t:加入-t参数时,type会将name以底下这些字眼显示出他的意义
file:表示为外部指令
alias:表示该指令为命令别名所设定的名称
builtin:该指令为bash内建的指令功能
-p:如果后面接name为外部指令时,才会显示完整文件名
-a:会由PATH变量定义的路径中,将所有含name的指令都列出,包含
二、shell的变量功能
1、变量
让某一个特定的字符串代表不固定的内容
2、变量的取用与修改
echo取用变量,变量在被取用时,前面必须要加上($)
echo $PATH
修改某个变量的内容,用(等号=)连接变量与他的内容
echo $myname
myname=10
echo $myname
·变量设定的规则
变量与变量内容以一个(=)连接
name=10
等号两边不能直接接空格符
变量名称只能时英文字母与数字,且开头字符不能是数字
变量内容若有空格符可以使用双引号或单引号将变量内容结合起来
双引号内的特殊字符$,可以保留原本特性
单引号内的特殊字符仅为一般字符(纯文本)
可以用(\)将特殊符号($,\,空格)变为一般字符
name=xxx\'\ name
在一串指令中,还需要藉由其他的指令提供的信息,可以用反单引号【`指令`】或【$(指令)】
若该变量为扩增变量内容时,可用"$变量名称"或${变量}累加内容
name=$(name)addition
若该变量需要其他子程序执行,需要以export来使变量变成环境变量
#进入到子程序
bash
echo $name
#离开这个子程序
exit
export name
#进入到子程序
bash
#子程序在此执行
echo $name
#离开这个子程序
exit
通常大写字符为系统默认变量,自行设定变量可以使用小写字符,方便判断
取消变量的方法为使用unset:unset 变量名称
#取消设定的name这个变量内容
unset name
3、环境变量的功能
env
HOSTNAME:主机名
TERM:这个终端机使用的环境是什么类型
SHELL:目前环境下,使用的shell是哪一个程序
HISTSIZE:记录指定的笔数
USER:使用者的名称
MAIL:用户所取用的mailbox位置
PATH:执行文件指令搜寻路径
INPUTRC:与键盘按键功能有关,可以设定特殊按键
PWD:目前用户所在的工作路径
LANG:与语系有关
HOME:这个用户的家目录
_:上一次使用的指令的最后一个参数或指令本身
4、影响显示结果的语系变量
locale
5、变量键盘读取与宣告
·read:读取来自键盘输入的变量,常用于shell script的撰写中
read [-pt] variable
选项与参数:
·-p:接提示字符
·-t:接等待的秒数
read test
echo $test
read -p "Please enter your name:" -t 30 named
echo $named
注:read之后不加任何参数,直接加上变量名称
·declare/typeset
declare 【-aixr】 variable
选项与参数:
-a:将后面名为variable的变量定义为数组类型
·i:将后面名为variable的变量定义为整数数字 类型
-x:用法与export一样,将后面的variable变成环境变量
-r:将变量设定成为readonly类型,不可被更改内容,也不能unset
declare -i sum=100+100+100
echo $sum
7、与文件系统及程序的限制关系:ulimit
ulimit 【-SHacdfltu】 【配额】
选项与参数:
·-H:严格的设定,必定不能超过这个设定的数值
·-S:可以超过这个设定值,若超过则有警告讯息
·-a:后面不接任何选项与参数,可列出所有的限制额度
·-c:当某些程序发生错误时,系统可能会将该程序在内存中的信息写成档案
·-f:可建立最大档案容量单位为Kbytes
·-d:程序可使用的最大断裂内存容量
·-l:可用于锁定的内存量
·-t:可使用的最大CPU时间(单位为秒)
-u:单一用户可以使用的最大程序数量
三、命令别名与历史命令
1、命令别名设定:alias,unalias
ls -al | more
#简化命令
alias lm='ls -al | more'
注:rm提供了-i选项来让我们确认是否要移除该档案
#防止误删
alias rm=‘rm -i’
注: 如何知道目前有哪些的命令别名
alias
取消命令别名
unalias lm
注:命令别名与变量有什么不同?
命令别名:新创一个新的指令,可以直接下达该指令
变量:需使用【echo】指令才能呼叫出变量的内容
2、历史命令:history
history 【n】
history 【-c】
history 【-raw】 histfiles
选项与参数:
n:数字,意思是要列出最近的n笔命令行表
-c:将目前的shell中的所有history内容全部消除
-a:将目前新增的history指令新增入histfiles中,若没有加histfiles,则预设写入~/.bash_history
-r:将histfiles的内容督导这个shell的history记忆中
-w:将目前的history记忆内容写入histfiles中
四、Bash shell的操作环境
1、路径与指令搜寻顺序
type -a 指令名
2、bash的进站与欢迎讯息
#查看进站画面内容
cat /etc/issue
\d | 本地终端的时间 |
\l | 显示第几个终端机接口 |
\m | 显示硬件的等级 |
\n | 显示主机的网络名称 |
\o | 显示domain name |
\r | 操作系统的版本 |
-t | 显示本地端时间的时间 |
\s | 操作系统的名称 |
\v | 操作系统的版本 |
3、环境配置文件
·login与non-login shell
·login shell:取得bash时需要完整的登录流程
·non-login shell:取得bash接口的方法不需要重复登入的举动。
一般来说,login shell只会读取这两个配置文件:1、/etc/profile:系统整体的设定,最好不要修改该档案;2、~/.bash_profile或/~bash_login或~profile:使用者个人设定,要修改自己的数据,写入这里
·/etc/profiles(login shell才会读)
·PATH:依据UID决定PATH变量要不要含有sbin的系统指定目录
·MAIL:依据账号设定好使用者的mailbox到/var/spool/mail/账号名
·USER:依据用户的账号设定此变量内容
·HOSTNAME:依据主机的hostname指令决定此变量内容
·HISTSIZE:历史命令记录笔数
·/etc/inputrc
该档案不会被执行。该档案内容为bash的常用键、【tab】要不要有声音等数据,不建议修改。
·/etc/profile.d/*.sh
目录内的众多档案。只要在/etc/profile.d这个目录内且扩展名为.sh。使用者具有r的权限,该档案就会被/etc/profile呼叫进来。如果需要帮所有使用者设定一些共享的命令别名时,可以在这个目录底下自行建立扩展名为.sh的档案,并将所需要的数据写入。
·~/bash_profile(login shell才会读)
在login shell的bash环境中,所读取的个人偏好配置文件主要有三个:
~/.bash_profile
~/.bash_login
~/.profile
bash的login shell色丁只会读取上面三个档案的其中一个,读取的顺序依照上面的顺序
·source:读入环境配置文件的指令
·~/.bashrc(non-login shell)
当取得non-login shell时,bash配置文件仅会读取~/.bashrc。
注:由于root的身份与一般使用者不同,如果是一般使用者的~/.bashrc会有不同。
4、终端机的环境设定
·stty(终端机)
#列出所有的按键与按键内容
stty -a
·eof:End of file(代表结束输入)
·erase:向后删除字符
·inntr:送出一个interrupt(中断)的讯号给目前正在run的程序。
·kill:删除在目前指令列上的所有文字
·quit:送出一个quit的讯号给目前正在run的程序
·start:在某个程序停止后,重新启动他的output
·stop:停止目前屏幕的输出
·set
set 【-uvCHhmBx】
选项和参数:
-u:预设不启用。若启用后,当使用未设定变量时,会显示错误信息
-v:预设不启用。若启用后,在讯息被输出前,会先显示信息的原始内容
-x:预设不启用。若启用后,在指令被执行前,会显示指令内容
-h:预设启用。与历史命令有关
-H:预设启用。与历史命令有关
-m:预设启用。与工作管理有关
-B:预设启用。
-C:预设不启用。
组合按键 | 执行结果 |
ctrl+D | 输入结束(EOF) |
ctrl+M | 就是Enter |
ctrl+S | 暂停屏幕的输出 |
ctrl+Q | 恢复屏幕的输出 |
ctrl+C | 终止目前的命令 |
ctrl+U | 在提示字符下,按整列命令删除 |
ctrl+Z | 暂停目前的命令 |
5、通配符与特殊符号
符号 | 意义 |
* | 代表0个到无穷多个任意字符 |
? | 代表一定有一个字符 |
【】 | 代表一定有一个在括号内的字符(非任意字符) |
【-】 | 若有减号在中括号内时,代表在编码顺序内的所有字符 |
【^】 | 若中括号内的第一个字符为指数符号,代表反向选择 |
符号 | 内容 |
# | 批注符号:常被使用在script中,视为说明,在后的数据均不执行 |
\ | 将特殊字符或通配符还原成一般字符 |
| | 管线:分隔两个管线命令的界定 |
; | 连续指令下达分隔符:连续性命令的界定 |
~ | 用户的家目录 |
$ | 取变量之前需要加的变量取代值 |
& | 工作控制:将指令变成背景下工作 |
! | 逻辑运算意义上的非 |
/ | 目录符号:路径分隔的符号 |
>,>> | 数据流重导向:输出导向,分别是取代与累加 |
<,<< | 数据流重导向: |
‘ ’ | 单引号,不具有变量置换的功能 |
” “ | 具有变量置换的功能 |
·· | 两个·中间为可以先执行的指令,也可使用$() |
() | 在中间为子shell的起始于结束 |
{} | 在中间为命令区块的组合 |
五、数据流重导向(Redirection)
某个指令执行后应该要出现在屏幕上的数据,给他传输到其他的地方
·standard output (stdout)与 standard error output(stderr)
标准输出:指令执行所回传的正确的讯息。读取/etc/crontab后,将该档案内容显示到屏幕上
标准错误输出:指令执行失败后,所回传的错误信息。
六、管线命令
1、撷取命令:cut、grep
·cut:将一段讯息的某一段切出来
选项与参数:
-d:后面接分隔字符,与-f一起使用
-f:依据-d的分隔字符将一段讯息分割成数段,用-f取出第几段的意思
-c:以字符的单位取出固定字符区间
#将PATH变量取出,找出第5个路径
echo $PATH
echo $PATH | cut -d ':' -f 5
#找出第三列和第五列
echo $PATH | cut -f ':' -f 3,5
#将export输出,取得第12个字符以后的所有字符串
export
export | cut -c 12-
#指定某个范围的值,取出15-25的字符
export | cut -c 15-25
#用last将显示的登录者的信息中,仅留下用户名
last
last | cut -d ' ' -f 1
·grep:分析一行信息,若当中有需要的信息,就将该行拿出来
grep [-acinv] [--color=auto] '搜寻字符串' filename
选项与参数:
-a:将binary档案以text档案的方式搜寻数据
-c:计算找到‘搜寻字符串’的次数
-i:忽略大小写的不同
-n:输出行号
-v:反向选择,即显示出没有‘搜寻字符串’内容的那一行
--color=auto:可以将找到的关键词部分加上颜色的显示
last | grep 'root'
#在last的输出信息中,只有root,并且仅取第一栏
last | grep 'root' | cut -d ' ' -f 1
2、排序命令:sort、uniq、wc
sort [-fbMnrtuk][file]
选项与参数:
-f:忽略大小写的差异
-b:忽略最前面的空格符部分
-M:以月份的名字排序
-n:使用纯数字进行排序(默认以文字形态排序)
-r:反向排序
-u:相同数据中,仅出现一行代表
-t:分隔符,预设用【tab】键分隔
-k:以哪个区间来进行排序
cat /etc/passwd | sort
cat /etc/passwd | sort -t ':' -k 3
#使用数字排序
cat /etc/passwd | sort -t ':' -k 2 -n
·uniq
uniq 【-ic】
选项与参数:
-i:忽略大小写字符的不同
-c:进行计数
#使用last将账号列出,仅取出账号栏,进行排序后仅取出一位
last | cut -d ' ' -f 1 | sort | uniq
#获取每个人的登录次数
last | cut -d ' ' -f 1 | sort | uniq -c
·wc
wc 【-lwm】
选项与参数:
-l:仅列出行
-w:仅列出多少英文单字
-m:多少字符
#/etc/man.config里面有多少相关字、行、字符数
cat /etc/man.config | wc
3、双向重导向:tee
tee 【-a】 file
选项与参数:
-a:以累加的方式,将数据加入file中
#将last的输出存一份到last.list档案中
last | tee last.list | cut -d " " -f 1
#将ls的数据存一份到~/homefile | more,同时屏幕有输出信息
ls -l /home | tee ~/homefile | more