linux备忘录-bash
知识点
环境变量
- HOME
- PATH
- SHELL
RANDOM // 0~32767的随机数
declare -i number=$RANDOM*10/32768 //0-9的随机数
- HISTSIZE
HISTFILESIZE
通过echo $PATH 或 echo $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,只会读取两个配置文件
- /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语系有关)- ~/.bash_profile 或 ~/.bash_login 或 ~/.profile 个人设定
-- ~/.bash_profile会呼叫~/.bashrc
也可以在/etc/profile.d写shell脚本 custom.sh 进行bash的环境配置nologin shell -> 取得bash时不需要登录流程,不需要账号密码的,例如X Window启动终端机。又例如在bash中下达bash命令
对于nologin shell 会读取下面的配置文件
- ~/.bashrc
-- 会呼叫 /etc/bashrc
---- 依据不同UID规范umask值
---- 依据不同UID规范提示字符(PS1变量)
---- 呼叫 /etc/profile.d/*.sh设定
-- 通过/etc/skel/.bashrc恢复~/.bashrc
其他bash配置文件
/etc/man.config
规范使用man命令时,查找数据的路径
最重要的是MANPATH变量~/.bash_history
记录bash的命令历史
~/.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 不存在时为 contentvarname = ${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的起始和结束
{} 命令区块组合
数据流重定向
- 标准输入(stdin) 代码为0 使用<或<<
- 标准输出(stdout) 代码为1 使用>或>>,也可以是1>或1>>
- 错误输出(stderr) 代码为2 使用2>或2>>
- 同时重定向stdout和stderr, 使用&>或&>> 也可以 2>&1
find /home -name .bashrc > outfile 2> errfile 同时重定向标准输出和错误输出
cat > catfile <~/.bashrc
car > catfile << "eof" 指定键盘的结束字符为eof
命令执行连续与逻辑判断
通过;连续下达指令
sync;sync;shutdown -h -now
通过&&,只有前一条指令执行正确,下一条指令才会继续执行
&& 是通过$?进行判断的
ls /tmp/abc && touch /tmp/abc/newfile 只有/tmp/abc目录存在才会去创建newfile文件通过||,只要前一条指令执行正确,下一条指令就不执行;换句话说,前一条指令执行错误,下一条指令才会执行
|| 也是通过$?进行判断的
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"
管线命令
管线 | 将前一个指令的输出作为后一个指令的输入
注意
管线命令只会处理 标准输出
管线命令必须要接受前一个命令的数据成为 标准输入 才能进行处理
通过与 cut 或 grep 等命令配合使用。
/dev/null 垃圾桶黑洞装置
find /home -name .bashrc 2> /dev/null
命令
type [-tpa] name (查询name是內建命令还是外部命令)
type -t 显示类型,如file为外部命令,alias为命令别名,builtin为內建命令。
type -a 将path中所有name指令列出来,包括aliasecho (输出)
echo $LANG 输出变量LANG
echo ${PATH} 输出变量PATHexport (将变量变成环境变量)
export PATH (PATH在子程序中都有效)
unset (取消变量设定)
unset var
bash (进入子程序)
bash 进入子程序
exit 离开子程序- env (观察环境变量)
export (列出环境变量、自定义变量转成环境变量)
export 列出环境变量
export varname 将变量varname转成环境变量- set (观察所有变量,包括环境变量和自定义变量)
locale (与系统语系有关)
locale -a 查询系统支持的所有语系编码
locale 查看所有语系变量
语系档案放置在 /usr/lib/locale
整体系统默认语系定义在 /etc/sysconfig/i18nread [-pt] variable (读取内容,保存到variable中)
read -p 后面接提示内容
read -t 后面接最长等待秒数
read varname 输入内容保存到varname中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 列出变量的类型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以下的档案alias (设置命令别名)
alias 显示所有命令别名
alias other=command 设置command命令的别名为otherunalias (取消命令别名)
unalias (取消命令别名)
unalias aliasCommandhistory 查看命令历史
history [n] 查看最近n条命令
history -c 清楚所有命令历史
history [-raw] hisfiles
history -a 新增hisfiles中的命令历史
history -w 将shell命令历史写入hisfiles
!number 执行number号命令历史
!command 执行最近的command开头的命令历史
!!执行最近一条命令历史source (读取配置文件的指令)
source 配置文件档名
source ~/.bashrc 将.bashrc设定读入目前bash环境中
. ~/.bashrc 与source ~/.bashrc相同
同样也可以读取 /etc/profile 和 ~/.bash_profilestty (终端机环境设定)
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+Hset设定bash的终端机设定
set [-uvCHhmBx]
set -u 预设不启用。使用未设定变量时显示错误信息
echo $- 显示目前所有set设定值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字符- last (显示登入者的信息)
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 ' ' -f1sort (排序指令)
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 | sortuniq (重复的数据只列出一个)
uniq [-ic]
uniq -i 忽略大小写
uniq -c 进行计数
last | cut -d ' ' -f1 |sort|uniq
last | cut -d ' ' -f1 |sort|uniq -cwc (字数,单词数,行数统计)
wc [-lwm]
wc -l 显示行数
wc -w 显示单词数
wc -m 显示字符数tee (双向重导向)
tee [-a] file
tee 累加的方式
字符串转换命令
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'col (字符串替换)
col [-xb]
col -x 将tab转换成对等的空格
col -b 有/时,仅保留/最后的字符,常用来转换man page成纯文本join (整个两个文档,相同的字段提到最前面)
join [-ti12] file1 file2
join -t 指定分隔符,默认空格符分割数据,并比对第一个字段数据,相同则合成一行
join -i 忽略大小写
join -1 代表第一个档案要用这个字段解析
join -2 代表第二个档案用这个字段解析paste (将两个文档贴在一起,中间默认tab分割)
paste -d file1 file2
paste -d 指定分割符
paste - 如果file写成-,则表示standard inputexpand (将tab键转成空格键)
expand -t n 指定一个tab键转换成n个空格键
expand - 其中-为标准输入- unexpand (将空白转成tab)
split (大档案分割成小档案)
split [-bl] file PREFIX
split -b 后接分割成的档案大小
split -l 以行数进行分割
split PREFIX 作为分割档案名的前导文字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的更多相关文章
- linux备忘录-基本命令
基本命令 将命令分类为获取信息类,文件管理类,目录管理类,文本处理类,系统类,工具类. 获取信息类 uname # 输出所有信息 # 一行输出,空格分割 uname -a # 输出内核名称 uname ...
- Linux下Bash入门学习笔记
学习好shell编程是很有用的,可以使用shell脚本轻巧地完成有趣的工作. 本文地址:http://www.cnblogs.com/yhLinux/p/4047516.html 1. Bash实例, ...
- 关于LINUX权限-bash: ./startup.sh: Permission denied
关于LINUX权限-bash: ./startup.sh: Permission denied <script type="text/javascript"></ ...
- [linux服务器][bash]让切换目录更方便
本文转载:[linux服务器][bash]让切换目录更方便: 一,为何要使用这几个命令? 可能大家会有疑问,为何要使用这几个命令, 难道用cd不就可以切换目录了吗? 没错,使用cd就可以切 ...
- Ubuntu Linux 解决 bash ./ 没有那个文件或目录 的方法
Ubuntu Linux 解决 bash ./ 没有那个文件或目录 的方法 经常在ubuntu 64位下运行 ./xxx 会跳出来说没有这个文件或者目录,但是ls看又有这个文件,很是奇怪. 其实原因很 ...
- Linux常用 bash
学会Linux常用 bash命令 目录 基本操作1.1. 文件操作1.2. 文本操作1.3. 目录操作1.4. SSH, 系统信息 & 网络操作 基本 Shell 编程2.1. 变量2.2. ...
- Linux Shell Bash 带有特殊含义的退出码
linux在执行完一条命令后,使用 echo $? 会显示上一条命令是否执行成功,相关状态码如下 0为成功 表格 D-1. "保留的"退出码 退出码的值 含义 例子 注释 1 通用 ...
- Linux中Bash发现重大安全漏洞修改方法
北京时间9月25日消息,Linux用户今天又得到了一个“惊喜”!Red Hat安全团队在 Linux 中广泛使用的Bash shell中发现了一个隐晦而危险的安全漏洞.该漏洞被称为“Bash Bug” ...
- linux出现bash: ./java: cannot execute binary file 问题的解决办法
问题现象描述: 到orcal官网上下载了两个jdk: (1)jdk-7u9-linux-i586.tar.gz ------------>32位 (2)jdk-7u9-linux-x64.tar ...
随机推荐
- python title() upper() lower() 以首字母大写的方式显示每个单词/将字符串改为全部大写或全部小写
以首字母大写的方式显示每个单词 [root@chenbj python]# cat name.py #!/usr/bin/env python # _*_ coding:utf-8 _*_ name ...
- 线程 Thread类 的四个构造方法简介
在线程中,Thread类有四个构造方法: 当我们使用 Thread类创建对象的时候,传入参数,就会用到构造方法.ThreadStart 和ParameterizedThreadStart 都是 委托类 ...
- WinSCP 工具
windows 与 Linux 传文件,非常方便.安全.
- cudpp库使用说明
所有信息是我个人在使用过程中的小小经验,不是什么权威性文档,旨在帮助需要研究此类信息的朋友少走点弯路. 整个项目的主函数,一切从这里开始 在cudpp_testrig右键属性页里找到调试,在命令行里输 ...
- phpmyadmin高级功能尚未完全设置部分功能未激活
1.登录phpmyadmin,点击导入,选择/var/ww/html/phpmyadmin/examples/create_tables.sql并执行 完成后可以看到多出了一个库phpmyadmin. ...
- oracle: listener.ora 、sqlnet.ora 、tnsnames.ora的配置及例子
1.解决问题:TNS或者数据库不能登录. 最简单有效方法:使用oracle系统提供的工具 netca 配置(把原来的删除掉重新配置) $netca 2.然而,仍有疑问:如何指定'l ...
- 记录表TABLE的使用详解
定义记录表(或索引表)数据类型与记录类型相似,但它是对记录类型的扩展.它可以处理多行记录,类似于高级中的二维数组,使得可以在PL/SQL中模仿数据库中的表. 定义记录表类型的语法如下: 1 2 TYP ...
- BZOJ4128: Matrix(BSGS 矩阵乘法)
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 813 Solved: 442[Submit][Status][Discuss] Descriptio ...
- datatables 给字段设置默认值,屏蔽没有字段的错误
我们返回的数据不能保证都是正常的,可能包含 null ,显然这个对于最终用户来说是不友好的,那么我们可以这么处理 先有如下数据格式: //示例数据 { data:[ {"id":1 ...
- GNU汇编 存储器访问指令
.text .global _start _start: mov r0,#0xff str r0,[r1] ldr r2,[r1]