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

鸟哥的linux私房菜学习笔记《二十》bash简介

2017-03-09 09:49 134 查看
shell的功能:

提供用户操作系统的一个接口。

系统上合法的shell要写在/etc/shells这个文件,因为系统某些服务在运行过程中会去检查用户能够使用的shells,而这些shell的查询就是借助/etc/shells这个文件

用户登录取得的shell就记录在/etc/passwd这个文件内。

[root@CentOS ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin


shell的功能:

命令记忆功能
命令补全
命令别名(alias)
作业控制、前台、后台控制
程序脚本(shell script)
通配符(wildcard)


type:判断命令内、外部命令

参数:
-a  会由PATH变量定义的路径中,将所有含有name的命令都列出来
-p  如果后面接的是外部命令,才会显示完整文件名
-t  当加入-t参数,会显示出意义:
file:外部命令
alias:命令别名
builtin:内建命令


root@Ubuntu:~# type -t ls
alias
root@Ubuntu:~# type -t cd
builtin
root@Ubuntu:~# type -t cp
file
root@Ubuntu:~# type ls
ls 是 `ls --color=auto' 的别名
root@Ubuntu:~# type -a ls
ls 是 `ls --color=auto' 的别名
ls 是 /bin/ls


显示变量

root@Ubuntu:~# echo $变量名 或者 ${变量名}
root@Ubuntu:~# echo $PATH
root@Ubuntu:~# echo ${PATH}
root@Ubuntu:~# echo $HOME
root@Ubuntu:~# echo ${HOME}


设置变量

root@Ubuntu:~# echo $myname

# 为空,下面设置:

root@Ubuntu:~# myname=kevin
root@Ubuntu:~# echo $myname

# 设置完成


变量的规则:

字符串需要用单/双引号括起来
用转义字符可以将特殊字符转义
为变量增加内容:"PATH"="$PATH":/home/bin"
单引号`表示先执行,然后取执行结果
设置成环境变量:export 变量名
取消环境变量:unset 变量名
通常大写表示环境变量,小写是普通变量


# 在PATH变量中累加/home/dmtsai/bin:(以下都可以)

root@Ubuntu:~# PATH=$PATH:/home/dmtsai/bin
root@Ubuntu:~# PATH="$PATH":/home/dmtsai/bin
root@Ubuntu:~# PATH=${PATH}:/home/dmtsai/bin

# 将name内容多出来yes:($可以理解为取变量的内容)

root@Ubuntu:~# name=$name"yes
root@Ubuntu:~# name=${name}yes

# 设置环境变量:

root@Ubuntu:~# export name

# 取消环境变量:

root@Ubuntu:~# unset name

# 进入内核的子进程(先执行uname -r命令,后执行cd命令)

root@Ubuntu:~# cd /lib/modules/`uname -r`/kernel
root@Ubuntu:~# cd /lib/modules/$(uname -r)/kernel


# 单引号只识别为字符,双引号可识别特殊符号

root@Ubuntu:~# name=kevin
root@Ubuntu:~# echo $name
kevin
root@Ubuntu:~# myname="$name its me"
root@Ubuntu:~# echo $myname
kevin its me
root@Ubuntu:~# name='$name its me'
root@Ubuntu:~# echo $myname
$name its me
root@Ubuntu:~#


local:影响显示结果的语言

# 显示所有linux支持的语言:

[root@CentOS ~]# locale locale -a
zh_TW.euctw
zh_TW.utf8
zu_ZA
zu_ZA.iso88591
zu_ZA.utf8

# 当前系统所设置的语言

[root@CentOS ~]# locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"


可以注意设置以上原因,当设置LANG或者LC_ALL时,其他选项的语言都会被替代

目前主机内包含的所有语言所在的文件:/usr/lib/locale

整体系统默认的原因定义:/etc/sysconfig/i18n(会显示安装系统时选的语言环境)

[root@CentOS ~]# ll /usr/lib/locale/
total 96796
-rw-r--r--. 1 root root 99158544 Mar  1 16:07 locale-archive
-rw-r--r--. 1 root root        0 Mar  1 16:07 locale-archive.tmpl
[root@CentOS ~]# cat /etc/sysconfig/i18n
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"


键盘读取变量,数组,声明

read:键盘读取
参数:
-p:后接提示符
-t:后接等待的秒数

# 键盘读取name为kevin

[root@CentOS ~]# read name
kevin
[root@CentOS ~]# echo $name
kevin

# 等待读取30秒

[root@CentOS ~]#  read -p "please keyin your name:" -t 30 name
please keyin your name:kevin
[root@CentOS ~]# echo $name
kevin


declare/typeset:变量声明
如果使用declare没有接任何参数,那么bash会将所有变量名称与内容全部调出来,就像set一样
参数:
-a:定义为数组
-i:定义为整型数字
-x:定义为环境变量
-r:定义为只读
-p:单独列出变量类型
[root@CentOS ~]# declare -i sum=100+200+300
[root@CentOS ~]# echo $sum
600

# 查看类型:

[root@CentOS ~]# declare -x sum
[root@CentOS ~]# declare -p sum
declare -ix sum="600"
[root@CentOS ~]# declare +x sum
[root@CentOS ~]# declare -p sum
declare -i sum="600"

# declare -x:设置为环境变量

# declare +x:取消设置环境变量

# 如果不小心定义为只读,只能注销重新登录方可复原


# 数组的设置方式:var[#] = 内容

[root@CentOS ~]# var[1]="smallmin"
[root@CentOS ~]# var[2]="bigmin"
[root@CentOS ~]# var[3]="min"
[root@CentOS ~]# echo "${var[1]}, ${var[2]}, ${var[3]}"
smallmin, bigmin, min

# 建议直接以 ${数组}的方式读取比较正确


ulimit:文件系统与程序限制

我们的bash可以限制用户的某些系统资源,包括可以打开的文件数量、可以使用的CPU时间、可以使用的内存总量

参数:
-a:列出列出所有的限制额度
-f:限制用户创建的最大的文件大小
-t:可使用最大CPU时间
-u:最大进程数量
-l:锁定内存量

# 列出目前身份的所有限制:

[root@CentOS ~]# ulimit -a
file size               (blocks, -f) unlimited

#设置限制10M    :

[root@CentOS ~]# ulimit -f 10240

# 列出目前身份的所有限制:

[root@CentOS ~]# ulimit -a
file size               (blocks, -f) 10240

# 创建大文件:

[root@CentOS ~]# dd if=/dev/zero of=123 bs=1M count=20
File size limit exceeded (core dumped)


单一文件系统能支持的文件大小与block有关,例如block为1024字节时,单一文件可达16G,但是,我们可以使用ulimit限制。若某天发发现无法创建大容量的文件,记得查看ulimit的信息

想要复原重新登录即可,否则就要重新设置

alias/unalias:设置/取消命令别名

# 设置别名:
[root@CentOS ~]# alias rm='rm -i'
# 取消设置:
[root@CentOS ~]# unalias rm
# 设置别名:
[root@CentOS ~]# alias lm='ls -l | more'
[root@CentOS ~]# alias cls='clear'
# 显示全部已存在别名:
[root@CentOS ~]# alias


history:命令历史

参数:

n:数字,列出最近n行

-c:删除目前shell中的所有历史命令

-a:将目前新增的history命令增入histfiles中,若为加hisfiles,则默认写入~/.bash_history

-r:将histfiles的内容读到shell的history中

-w:将目前history写入histfiles中

# 列出目前所有history:
[root@CentOS ~]# history
# 列出最近3条数据:
[root@CentOS ~]# history 3
# 输出数值:
[root@CentOS ~]# echo $HISTORY
# 将目前数据写入histfiles文件
[root@CentOS ~]# history -w


系统在注销时会将最近HISTORY条记录更新到~/.bash_history记录文件当中。

~/.bash_history记录的条数永远是HISTORY那么多,旧的会被去掉,仅保留最新的。

# 执行第25条命令
[root@CentOS ~]# !25
# 执行上一条命令
[root@CentOS ~]# !! (即为!25那条命令)
# 执行最近一条历史命令开头符合command的命令
[root@CentOS ~]# !ali (匹配最近的一条ali开头的命令,比如alias)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: