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 ...
 
随机推荐
- maven解析xml+测试test+注解
			
条件:maven项目 测试图: 创建maven项目,在maven项目中scr目录下有main.test(没有就创建) 一.解析XML文件方式 在main目录下有java.resources.webap ...
 - quartz的持久化任务调度使用应用的dataSource
			
Quartz提供两种基本作业存储类型--->第一种类型叫做RAMJobStore: 最佳的性能,因为内存中数据访问最快 不足之处是缺乏数据的持久性,当程序路途停止或系统崩溃时,所 ...
 - CentOS 7 下 jdk8 安装教程
			
方法一: 一.下载 官网下载地址 下载需要确认当前系统是32位还是64位,可通过命令查询: sudo uname --m 根据查询结果下载对应的jdk版本(如): i686 //表 ...
 - cncert阅读报告
			
信息安全阅读报告 Problem 1: 国家计算机网络应急技术处理协调中心(简称“国家互联网应急中心”,英文缩写为“CNCERT”或“CNCERT/CC”)作为我国非政府层面网络安全应急体系核心技术协 ...
 - oracle下表空间、用户创建以及用户授权流程
			
Oracle,表空间的建立.用户创建以及用户授权 主要是以下几步,挑选需要的指令即可: # 首先以scott用户作为sysdba登陆 conn scott/tiger as sysdba #创建用户 ...
 - 如何快速查看mysql数据文件存放路径?
			
进入mysql终端 mysql>show variables like '%datadir%'; 出来的结果即是!
 - bootloader svc 模式
			
bootloader 和操作系统都是工作在svc模式下 /* * set the cpu to SVC32 mode */ mrs r0,cpsr bic r0,r0,#0x1f orr r0,r0, ...
 - 微信网页授权access_token与基础支持的access_token
			
问题1:网页授权access_token与分享的jssdk中的access_token一样吗? 答:不一样.网页授权access_token 是一次性的,而基础支持的access_token的是有时间 ...
 - 实例讲解如何利用jQuery设置图片居中放大或者缩小
			
大家有没有见过其他网站的图片只要鼠标放上去就能放大,移出去的时候就能缩小,而且一直保持居中显示!其实jQuery提供一个animate函数可以使图片放大和缩小,只要改变图片的长和高就OK啦!但是ani ...
 - python-无参函数
			
#!/usr/local/bin/python3 # -*- coding:utf-8 -*- ''' #-----------定义函数---------- def func1(): "te ...