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

  1. shell的功能:
    提供用户操作系统的一个接口。
  2. 系统上合法的shell要写在/etc/shells这个文件,因为系统某些服务在运行过程中会去检查用户能够使用的shells,而这些shell的查询就是借助/etc/shells这个文件
  3. 用户登录取得的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
  4. shell的功能:

    命令记忆功能
    命令补全
    命令别名(alias)
    作业控制、前台、后台控制
    程序脚本(shell script)
    通配符(wildcard)
  5. 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
    
  6. 显示变量

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

    root@Ubuntu:~# echo $myname
    
    # 为空,下面设置:
    
    root@Ubuntu:~# myname=kevin
    root@Ubuntu:~# echo $myname
    
    # 设置完成
    
  8. 变量的规则:

    字符串需要用单/双引号括起来
    用转义字符可以将特殊字符转义
    为变量增加内容:"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:~# 
    
  9. 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"
    
  10. 键盘读取变量,数组,声明

    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
    
    # 建议直接以 ${数组}的方式读取比较正确
    
  11. 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的信息
    想要复原重新登录即可,否则就要重新设置

  12. 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
  1. 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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值