知识点

环境变量

  1. HOME
  2. PATH
  3. MAIL
  4. SHELL
  5. RANDOM // 0~32767的随机数

    declare -i number=$RANDOM*10/32768 //0-9的随机数

  6. HISTSIZE
  7. HISTFILESIZE

通过echo $PATHecho $LANG 输出变量

通过VAR=VALUE 设定变量,等号两边不能有空白符

a=1
var='lang is $LANG'
[Enter] $  空格 需要用\反斜杠进行转义。

通过$() 或者 `` 可以进行命令取代

version=$(uname -r)
echo $version

通过"" 或者 ${}累加内容

PATH=${PATH}:/home/bin
PATH="PATH":/home/bin

子程序会继承父程序的环境变量,子程序不会继承父程序的自定义变量

Bash变量

PS1 -> shell提示字符

\d 显示日期,如"Mon Feb 2"
\H 显示完整主机名 "WWW.SMALLPI.CN"
\h 仅取主机名第一个小数点前的内容 如 "WWW"
\t 显示时间 如 "HH:MM:SS" 24小时格式
\T 显示时间 如 "HH:MM:SS" 12小时格式
\A 显示时间 如 "HH:MM: 24小时格式
@ 显示时间 12小时的am/pm格式
\u 目前使用者的账号名称 如 root
\v BASH版本信息
\w 完整工作目录名称
\W 仅列出最后一个目录名
# 下达的第几个指令
$ 提示字符 root为# 否则为$

$ -> 本shell的PID

echo $$ 输出本shell的PID

? -> 上个执行命令的回传值

上个指令成功执行 回传 0
上个指令执行出错 回传 非0

OSTYPE HOSTTYPE MACHTYPE 主机硬件和核心的等级

散乱知识

/etc/shells 查看linux可以使用的shell

/bin/sh (已经被bash取代)
/bin/bash (linux系统默认的shell)
/bin/ksh (兼容于bash)
/bin/tcsh (整合csh,提供更多功能)
/bin/csh (已经被tcsh取代)
/bin/zsh (ksh发展而来)

/etc/passwd 中记录着用户登录系统使用的shell

~/bash_history 记录上次登录bash的命令历史

alias lm='ls -al' 设定命令别名。而alias显示命令别名。

可以使用通配符 ls /etc/a* 列出以/etc下a开头的档案。

通过 export PATH 将变量变成环境变量,该变量在子程序中都有效

通过 unset varname 取消变量设定

"" 双引号可以保留变量的内容。而''单引号仅仅是纯文本。

var[1]="first element" 定义数组,**echo "${var[1]}"

bash进站信息记录在 /etc/issue
telnet远程登录bash的进站信息记录在 /etc/issue.net

/etc/issue中的反斜杠变量(与bash进入信息有关)

\d 本地端时间的日期
\l 显示第几个终端机接口
\m 显示硬件的等级 (i386,i486,i586,i686...)
\n 显示主机的网络名称
\o 显示domain name
\r 显示操作系统版本,相当于(uname -r)
\t 显示本地端时间的时间
\s 操作系统的名称
\v 操作系统的版本

/etc/motd 中写有登录后的通知信息

Bash 的环境配置文件

login shell 和 nologin shell

login shell -> 取得bash时需要完整的登录流程的,称为login shell。
对login shell,只会读取两个配置文件

  1. /etc/profile 系统整体的bash配置文件
    -- 该目录用于设定下面变量
    ---- PATH: 依据UID决定PATH变量要不要包含sbin等系统目录
    ---- MAIL: 根据账号设定邮箱目录 /var/spool/mail/账号
    ---- USER: 用户账号
    ---- HOSTNAME: 根据主机的hostname设定
    ---- HISTSIZE: 历史记录笔数
    -- 呼叫外部数据
    ---- /etc/inputrc 和热键有关
    ---- /etc/profile.d/*.sh
    ---- /etc/sysconfig/i18n (由/etc/profile.d/lang.sh呼叫进来,与bash语系有关)
  2. ~/.bash_profile~/.bash_login~/.profile 个人设定
    -- ~/.bash_profile会呼叫~/.bashrc
    也可以在/etc/profile.d写shell脚本 custom.sh 进行bash的环境配置

nologin shell -> 取得bash时不需要登录流程,不需要账号密码的,例如X Window启动终端机。又例如在bash中下达bash命令
对于nologin shell 会读取下面的配置文件

  1. ~/.bashrc
    -- 会呼叫 /etc/bashrc
    ---- 依据不同UID规范umask值
    ---- 依据不同UID规范提示字符(PS1变量)
    ---- 呼叫 /etc/profile.d/*.sh设定
    -- 通过/etc/skel/.bashrc恢复~/.bashrc

其他bash配置文件

  1. /etc/man.config

    规范使用man命令时,查找数据的路径
    最重要的是MANPATH变量

  2. ~/.bash_history

    记录bash的命令历史

  3. ~/.bash_logout

    定义注销bash时的一些收尾工作

${} 的删除输出

path=${PATH}
echo ${path#/*kerberos/bin:} 在path中删除 **/*kerberos/bin:** 内容,原本内容不变
echo ${path##/*} path中删除掉最长的那个数据,原本内容不变
# 为符合取代文字的最短的那一个
## 为符合取代文字的最长一个

echo ${path%:bin} 删除path最后面的变量,原本内容不变
echo ${path%%:
bin} 删除从后面开始符合的最长字符串,原本内容不变

${} 的取代输出

${varname/word1/word2} 用word2取代word1,只取代一个
${varname//word1/word2} 用word2取代word1,取代所有

判断变量是否存在

varname = ${varname-content} 判断是否设定
varname 存在时为 varname
varname 不存在时为 content

varname = ${varname:-content} 判断是否设定,以及是否为空
varname = 存在且不为空 为 varname
varname 不存在或为空 content

${str-expr}
${str:-expr}
${str+expr}
${str:+expr}
${str=expr} str不存在时,整个表达式和str均为expr
${str:=expr}
${str?expr}
${str:?expr}

终端机环境设定

通过stty命令设定

通配符和特殊符号

通配符

-> 代表0个到无穷多个字符
? -> 代表一个字符
[] -> 代表一个括号内的字符
[-] -> 代表括号范围内的一个字符
[^] -> 代表括号以外的一个字符
例如
ls -d /etc/cron
ls -d /etc/?????
ls -d /etc/
[0-9]* 含有数字的文件名
ls -d /etc/[^a-z]* 档名开头非小写字母的文件名

特殊符号

# 批注符号
\ 跳脱符号
| 管线符号
; 连续指令下达符号
~ 用户家目录
取用变量符号
& 工作控制符号,将指令变成背景下工作
! 逻辑非
/ 目录分割符
>和>> 数据流重定向,取代和累加
<和<< 数据流重定向,
'' 代表纯文本
"" 可以替换变量
`` 相当于$(),代表先执行的指令
() 子shell的起始和结束
{} 命令区块组合

数据流重定向

  1. 标准输入(stdin) 代码为0 使用<<<
  2. 标准输出(stdout) 代码为1 使用>>>,也可以是1>1>>
  3. 错误输出(stderr) 代码为2 使用2>2>>
  4. 同时重定向stdout和stderr, 使用&>&>> 也可以 2>&1

find /home -name .bashrc > outfile 2> errfile 同时重定向标准输出和错误输出
cat > catfile <~/.bashrc
car > catfile << "eof" 指定键盘的结束字符为eof

命令执行连续与逻辑判断

  1. 通过;连续下达指令

    sync;sync;shutdown -h -now

  2. 通过&&,只有前一条指令执行正确,下一条指令才会继续执行

    && 是通过$?进行判断的
    ls /tmp/abc && touch /tmp/abc/newfile 只有/tmp/abc目录存在才会去创建newfile文件

  3. 通过||,只要前一条指令执行正确,下一条指令就不执行;换句话说,前一条指令执行错误,下一条指令才会执行

    || 也是通过$?进行判断的
    ls /tmp/abc || mkdir /tmp/abc 目录abc不存在就进行创建
    ls /tmp/abc || mkdir /tmp/abc && touch /tmp/abc/newfile
    ls /tmp/testfile && echo "exits" || echo "not exits"

管线命令

管线 | 将前一个指令的输出作为后一个指令的输入

注意
管线命令只会处理 标准输出
管线命令必须要接受前一个命令的数据成为 标准输入 才能进行处理

通过与 cutgrep 等命令配合使用。

  1. /dev/null 垃圾桶黑洞装置

    find /home -name .bashrc 2> /dev/null

命令

  1. type [-tpa] name (查询name是內建命令还是外部命令)

    type -t 显示类型,如file为外部命令,alias为命令别名,builtin为內建命令。
    type -a 将path中所有name指令列出来,包括alias

  2. echo (输出)

    echo $LANG 输出变量LANG
    echo ${PATH} 输出变量PATH

  3. export (将变量变成环境变量)

    export PATH (PATH在子程序中都有效)

  4. unset (取消变量设定)

    unset var

  5. bash (进入子程序)

    bash 进入子程序
    exit 离开子程序

  6. env (观察环境变量)
  7. export (列出环境变量、自定义变量转成环境变量)

    export 列出环境变量
    export varname 将变量varname转成环境变量

  8. set (观察所有变量,包括环境变量和自定义变量)
  9. locale (与系统语系有关)

    locale -a 查询系统支持的所有语系编码
    locale 查看所有语系变量
    语系档案放置在 /usr/lib/locale
    整体系统默认语系定义在 /etc/sysconfig/i18n

  10. read [-pt] variable (读取内容,保存到variable中)

    read -p 后面接提示内容
    read -t 后面接最长等待秒数
    read varname 输入内容保存到varname中

  11. declare或typeset (宣告变量的类型)

    declare 和set一样,显示环境变量和bash变量
    declare [-aixr] variable
    declare -a 定义为数组(array)类型
    declare -i 定义为整数(integer)类型
    declare -x 将variable变成环境变量
    declare -r 将variable变成只读,不能改,也不能unset
    declare -i sum=100+300+50 // sum=450
    默认变量类型为字符串
    Bash中的数值运算,最多仅能为整数形式
    declare +x variable 将variable变成自定义变量
    declare -p 列出变量的类型

  12. ulimit (限制用户)

    ulimit [-sHacdfltu] 配额
    ulimit -H 严格设定
    ulimit -S 警告设定
    ulimit -a 列出所有的限制
    ulimit -c 限制每个核心档案(core file)的最大容量
    ulimit -f 该shell可建立的最大档案容量
    ulimit -d
    ulimit -l
    ulimit -t 可使用的最大CPU时间
    ulimit -u 单一用户可使用的最大程序数量
    ulimit -f 10240 限制用户只能建立10MB以下的档案

  13. alias (设置命令别名)

    alias 显示所有命令别名
    alias other=command 设置command命令的别名为other

  14. unalias (取消命令别名)

    unalias (取消命令别名)
    unalias aliasCommand

  15. history 查看命令历史

    history [n] 查看最近n条命令
    history -c 清楚所有命令历史
    history [-raw] hisfiles
    history -a 新增hisfiles中的命令历史
    history -w 将shell命令历史写入hisfiles
    !number 执行number号命令历史
    !command 执行最近的command开头的命令历史
    !!执行最近一条命令历史

  16. source (读取配置文件的指令)

    source 配置文件档名
    source ~/.bashrc 将.bashrc设定读入目前bash环境中
    . ~/.bashrc 与source ~/.bashrc相同
    同样也可以读取 /etc/profile 和 ~/.bash_profile

  17. stty (终端机环境设定)

    stty -a 列出所有stty参数
    其中
    eof 表示结束输入 ^D
    erase 向后删除字符 ^?
    intr 送出interrupt信号给目前正在run的程序 ^C
    kill 删除目前指令列上的所有文字 ^U
    quit 送出一个quit信号给目前正在run的程序 ^
    start 某个程序停止后,重新启动它的output ^Q
    stop 停止目前屏幕的输出 ^S
    susp 送出一个terminal stop信号给目前正在run的程序 ^Z
    stty erase ^H 修改erase热键为Ctrl+H

  18. set设定bash的终端机设定

    set [-uvCHhmBx]
    set -u 预设不启用。使用未设定变量时显示错误信息
    echo $- 显示目前所有set设定值

  19. cut (对一行文本进行信息切割)

    cut -d '分隔符' -f n 根据分隔符进行分割并取出第n段
    echo $PATH | cut -d ':' -f 5
    echo $PATH | cut -d ':' -f 3,5
    cut -c n1-n2取出字符范围的信息
    export | cut -c 12- 取出12字符之后的内容
    export | cut -c 12-20 取出12-20字符

  20. last (显示登入者的信息)
  21. grep (用正则表达式搜寻字符串)

    grep [-acinv] [--color=auto] '搜寻字符串' filename
    grep -a 将binary文档以text文档的方式搜寻数据
    grep -c 计算搜寻到的字符串次数
    grep -i 忽略大小写
    grep -n 顺便输出行号
    grep -v 显示没有搜寻到字符串的行
    grep --color=auto 搜寻到的字符串高亮显示
    last | grep 'root'
    last | grep -v 'root'
    last | grep 'root' | cut -d ' ' -f1

  22. sort (排序指令)

    sort [-fbMnrtuk] [file or stdin]
    sort -f 忽略大小写
    sort -b 忽略最前面的空格
    sort -M 以月份的名字来排序
    sort -n 以纯数字进行排序
    sort -r 反向排序
    sort -u 相同的数据仅出现一行
    sort -t 指定分隔符,默认为[tab]
    sort -k 以第几个字段进行排序
    cat /etc/passwd | sort -t ':' -k 3
    cat /etc/passwd | sort -t ':' -k 3 -n
    last | cut -d ' ' -f1 | sort

  23. uniq (重复的数据只列出一个)

    uniq [-ic]
    uniq -i 忽略大小写
    uniq -c 进行计数
    last | cut -d ' ' -f1 |sort|uniq
    last | cut -d ' ' -f1 |sort|uniq -c

  24. wc (字数,单词数,行数统计)

    wc [-lwm]
    wc -l 显示行数
    wc -w 显示单词数
    wc -m 显示字符数

  25. tee (双向重导向)

    tee [-a] file
    tee 累加的方式

字符串转换命令

  1. tr (字符串的删除或替换)

    tr [-ds] STR
    tr -d STR 删除STR字符串
    tr -s
    last | tr '[a-z]' '[A-Z]' 小写转换成大写
    cat /etc/passwd | tr -d ':' 删除冒号
    cp /etc/passwd /root/passwd && unix2dos /root/passwd
    file /etc/passwd /root/passwd
    cat /root/passwd | tr -d '\r'

  2. col (字符串替换)

    col [-xb]
    col -x 将tab转换成对等的空格
    col -b 有/时,仅保留/最后的字符,常用来转换man page成纯文本

  3. join (整个两个文档,相同的字段提到最前面)

    join [-ti12] file1 file2
    join -t 指定分隔符,默认空格符分割数据,并比对第一个字段数据,相同则合成一行
    join -i 忽略大小写
    join -1 代表第一个档案要用这个字段解析
    join -2 代表第二个档案用这个字段解析

  4. paste (将两个文档贴在一起,中间默认tab分割)

    paste -d file1 file2
    paste -d 指定分割符
    paste - 如果file写成-,则表示standard input

  5. expand (将tab键转成空格键)

    expand -t n 指定一个tab键转换成n个空格键
    expand - 其中-为标准输入

  6. unexpand (将空白转成tab)
  7. split (大档案分割成小档案)

    split [-bl] file PREFIX
    split -b 后接分割成的档案大小
    split -l 以行数进行分割
    split PREFIX 作为分割档案名的前导文字

  8. xargs (将stdin内容作为某个命令的参数)

    xargs -p 每次执行都询问
    xargs -n N 指定命令后面接N个参数
    xargs -e"STR" 当xargs分析到STR时结束工作
    echo "/" | xargs ls
    find /sbin -perm +7000 | ls -l

管道命令中出现文件名且该文件名需要作为stdin和stdout时,可以用-

tar -cvf - /home | tar -xvf -

参考

鸟哥的Linux私房菜 第三版

linux备忘录-bash的更多相关文章

  1. linux备忘录-基本命令

    基本命令 将命令分类为获取信息类,文件管理类,目录管理类,文本处理类,系统类,工具类. 获取信息类 uname # 输出所有信息 # 一行输出,空格分割 uname -a # 输出内核名称 uname ...

  2. Linux下Bash入门学习笔记

    学习好shell编程是很有用的,可以使用shell脚本轻巧地完成有趣的工作. 本文地址:http://www.cnblogs.com/yhLinux/p/4047516.html 1. Bash实例, ...

  3. 关于LINUX权限-bash: ./startup.sh: Permission denied

    关于LINUX权限-bash: ./startup.sh: Permission denied <script type="text/javascript"></ ...

  4. [linux服务器][bash]让切换目录更方便

    本文转载:[linux服务器][bash]让切换目录更方便: 一,为何要使用这几个命令?   可能大家会有疑问,为何要使用这几个命令,   难道用cd不就可以切换目录了吗?   没错,使用cd就可以切 ...

  5. Ubuntu Linux 解决 bash ./ 没有那个文件或目录 的方法

    Ubuntu Linux 解决 bash ./ 没有那个文件或目录 的方法 经常在ubuntu 64位下运行 ./xxx 会跳出来说没有这个文件或者目录,但是ls看又有这个文件,很是奇怪. 其实原因很 ...

  6. Linux常用 bash

    学会Linux常用 bash命令 目录 基本操作1.1. 文件操作1.2. 文本操作1.3. 目录操作1.4. SSH, 系统信息 & 网络操作 基本 Shell 编程2.1. 变量2.2.  ...

  7. Linux Shell Bash 带有特殊含义的退出码

    linux在执行完一条命令后,使用 echo $? 会显示上一条命令是否执行成功,相关状态码如下 0为成功 表格 D-1. "保留的"退出码 退出码的值 含义 例子 注释 1 通用 ...

  8. Linux中Bash发现重大安全漏洞修改方法

    北京时间9月25日消息,Linux用户今天又得到了一个“惊喜”!Red Hat安全团队在 Linux 中广泛使用的Bash shell中发现了一个隐晦而危险的安全漏洞.该漏洞被称为“Bash Bug” ...

  9. linux出现bash: ./java: cannot execute binary file 问题的解决办法

    问题现象描述: 到orcal官网上下载了两个jdk: (1)jdk-7u9-linux-i586.tar.gz ------------>32位 (2)jdk-7u9-linux-x64.tar ...

随机推荐

  1. [转] JAVA中读取网络中的图片资源导入到EXCEL中

    需求 导出人员的信息并且加上人员的照片至EXCEL中 完整的代码 //创建一个表格 HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb ...

  2. android build.prop详解

    # begin build properties开始设置系统性能 # autogenerated by buildinfo.sh{通过设置形成系统信息} ro.build.id=MIUI(版本ID) ...

  3. machine learning学习笔记

    看到Max Welling教授主页上有不少学习notes,收藏一下吧,其最近出版了一本书呢还,还没看过. http://www.ics.uci.edu/~welling/classnotes/clas ...

  4. 6.安装使用vue-quill-editor

    前言: 在vue项目中,因为涉及到使用文本编辑器, 恰恰vue-quill-editor就是一个简单实用的富文本编辑器. 参考文档:vue中使用vue-quill-editor富文本编辑器,自定义to ...

  5. mysql存储问题

    为什么标题要起这个名字呢?commen sence指的是那些大家都应该知道的事情,但往往大家又会会略这些东西,或者对这些东西一知半解,今天我总结下自己在mysql中遇到的一些commen sense类 ...

  6. 2018/7/16 YMOI模拟 NOIP2013D2T3华容道

    题目描述 Description 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面,华容道是否根本就无法完成,如果能完成,最少需要多少时间. ...

  7. activemq启动闪退/失败 (Illegal character in hostname at index 5: ws://****:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600)

    java.net.URISyntaxException: Illegal character in hostname at index 5: ws://****:61614?maximumConnec ...

  8. 搭建MQTT代理服务器

    # 解压tar zxfv mosquitto-1.4.14.tar.gz# 进入目录cd mosquitto-1.4.14# 编译make# 安装sudo make instal 1 启动代理服务在第 ...

  9. 分享spring、spring boot、spring cloud一些学习资源,从基础知识到项目实战

    1.spring注解驱动开发,学习spring boot和spring cloud必备知识 链接: https://pan.baidu.com/s/1xhULzLlpkERhoMi1G5Lgfg 密码 ...

  10. Android面试收集录2 Broadcast Receiver详解

    1.Broadcast Receiver广播接收器简单介绍 1.1.定义 Broadcast Receiver(广播接收器),属于Android四大组件之一 在Android开发中,Broadcast ...