Please indicate the source: http://blog.csdn.net/gaoxiangnumber1
Welcome to my github: https://github.com/gaoxiangnumber1
~/.bash_history
记录本次登入前执行的指令,本次登入执行的指令暂存在内存;当成功注销后,本次的指令才会记录到.bash_history。按上下键就能找到前/后一个输入的指令。alias
得到目前设定的命令别名。type [-tpa] name
file
为外部指令;alias
表示该指令为命令别名设定的名称; builtin
为内建指令 xiang :~ $ type cd
cd is a shell builtin
xiang :~ $ type ps
ps is /bin/ps
xiang :~ $ type -t ps
file
xiang :~ $ type -p ps
/bin/ps
xiang :~ $ type -a ps
ps is /bin/ps
xiang :~ $ type xiang
bash: type: xiang: not found
\
跳脱下一个紧接字符。指令太长用\[Enter]
来将[Enter]
键跳脱。 变量的读取echo
echo $变量
或echo ${变量}
读取变量。xiang :~ $ echo $HOME
/home/xiang
xiang :~ $ echo ${HOME}
/home/xiang
=
连接变量与对应内容来设定/修改变量。xiang :~ $ echo $name #变量未被设定时,默认内容为空
xiang :~ $ name=xiang_gao
xiang :~ $ echo $name
xiang_gao
变量的设定规则
=
连接:name=xiang
name = xiang
、name=xiang gao
"
或单引号'
将变量内容结合起来,但 xiang :~ $ home="home is $HOME"
xiang :~ $ echo $home
home is /home/xiang
2.单引号内的特殊字符不保留特性。
xiang :~ $ home="home is $HOME"
xiang :~ $ echo $home
home is $HOME
\
将特殊符号(Enter、$、\、空格等)变成一般字符:name=xiang\ gao
指令
”或$(指令)
的指令先执行,其执行结果将做为外部的输入信息。xiang :~ $ version=$(uname -r)
xiang :~ $ echo $version
3.16.0-76-generic
xiang :~ $ content=`ls`
xiang :~ $ echo $content
Codes Desktop Gao
"$变量"
或${变量}
累加内容: PATH="$PATH":/home/bin
或PATH=${PATH}:/home/bin
export 变量
成为环境变量,则该变量可在子程序使用:export name
unset 变量
取消变量的设定:unset name
xiang:~ $ name=xiang's name #失败。单/双引号必须成对。仅有一个单引号,
> #按下enter后,还可继续输入变量内容。
xiang:~ $ name="xiang's name" #成功。指令由左向右,先遇到的引号先有用,
#该单引号变成一般字符。
xiang:~ $ name='xiang's name' #失败。前两个单引号成对,后面多一个单引号。
xiang:~ $ name=xiang\'s\ name #成功。用\跳脱特殊字符。
xiang:~ $ name=xiang
xiang:~ $ bash #进入子程序
xiang:~ $ echo $name #子程序echo。没有设定的内容。
xiang:~ $ exit #退出子程序
xiang:~ $ export name
xiang:~ $ bash #进入子程序
xiang:~ $ echo $name #子程序echo
xiang #出现设定值
xiang:~ $ exit #退出这个子程序
#进入核心的模块目录
xiang:~ $ cd /lib/modules/`uname -r`/kernel
xiang:~ $ cd /lib/modules/$(uname -r)/kernel
#得到每个example相关档名的权限
xiang:~ $ ls -ld `locate example`
xiang:~ $ ls -ld $(locate example)
用env观察环境变量与常见环境变量说明
env
列出目前shell环境下所有环境变量与其内容。重要的: :
分隔。 $RANDOM
得到随机数值,介于0~32767。用set观察所有变量(含环境变量与自定义变量)
root@www ~#
或xiang ~$
的设定值 PS1:提示字符的设定(数字1不是英文字母)
星期 月 日
~
取代 $:本shell的PID
echo $$
得到shell的PID。?:上个指令执行的返回值
xiang :~ $ echo $HOME
/home/xiang
xiang :~ $ echo $?
0
xiang :~ $ 12name=xiang
12name=xiang: command not found
xiang :~ $ echo $?
127
xiang :~ $ echo $?
0 #上个指令执行`echo $?`,没有错误,所以是0
export自定义变量转成环境变量
export 变量
让自定义变量在子程序中使用。read
read [-pt] variable
xiang :~ $ read name
gao xiang
xiang :~ $ echo $name
gao xiang
xiang :~ $ read -p "Please input your name:" -t 10 name
Please input your name:gao xiang number one
xiang :~ $ echo $name
gao xiang number one
xiang :~ $ read -p "Please input your name:" -t 10 name
Please input your name:xiang :~ $
declare/typeset
declare [-aixr] variable
xiang:~ $ sum=100+300+50
xiang:~ $ echo ${sum}
100+300+50 #没有计算,因为这是文字形式的变量
xiang:~ $ declare -i sum=100+300+50
xiang:~ $ echo ${sum}
450
xiang:~ $ declare -x sum #将sum变成环境变量
xiang:~ $ export | grep sum
declare -ix sum="450"
xiang:~ $ declare -r sum #让sum变成只读
xiang:~ $ sum=other
-bash:sum:read-only variable
#让sum变成非环境变量的自定义变量
xiang:~ $ declare +x sum #将-变成+进行取消
xiang:~ $ declare -p sum #-p单独列出变量类型
declare -ir sum="450" #只剩i、r类型,不具有x
数组array变量类型
var[index]=content
var为数组名。xiang :~ $ var[1]="gao"
xiang :~ $ var[2]="xiang"
xiang :~ $ var[3]="number one"
xiang :~ $ echo $var[1] $var[2] $var[3]
[1] [2] [3]
xiang :~ $ echo "${var[1]} ${var[2]} is ${var[3]}" #使用${数组}读取
gao xiang is number one
xiang :~ $ echo "${var[1]} ${var[2]} is ${var[3]}!"
gao xiang is number one!
xiang :~ $ echo ${var[1]} ${var[2]} is ${var[3]}!
gao xiang is number one!
ulimit [-SHacdfltu] [配额]
xiang :~ $ ulimit -a
core file size (blocks, -c) 0#0代表没限制
file size (blocks, -f) unlimited
pending signals (-i) 31348
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 31348
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
ulimit -f
设定文件大小,那么它只能继续减小容量,不能增加容量。alias {别名='指令 选项...' }
输入alias
得到目前的命令别名。history [n]
history [-c]
history [-raw] file
!number 执行第number条指令
!command 由最近的指令向前搜寻指令串开头为command的指令并执行
!! 执行上一个指令
同一账号同时多次登入的history写入问题
xiang :~ $ cat /etc/issue
Ubuntu 14.04.3 LTS \n \l
root:~ # vim /etc/motd
Hello everyone,
Our server will be maintained at 2015/07/10 0:00 ~ 24:00.
Please don't login server at that time. ^_^
Last login:Wed Jul 8 23:22:25 2015 from 127.0.0.1
Hello everyone,
Our server will be maintained at 2015/07/10 0:00 ~ 24:00.
Please don't login server at that time. ^_^
login与non-login shell
/etc/profile(login shell才会读)
~/.bash_profile(login shell才会读)
xiang :~ $ cat .profile
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then #判断~/.bashrc是否存在,若存在则读入~/.bashrc
. "$HOME/.bashrc"
fi
fi
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH" #处理个人化设定
fi
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_77
source:读入环境配置文件的指令
source
或.
指令能直接读取配置文件而不注销登入。source或. 配置文件档名
#实例:将~/.bashrc的设定读入目前的bash环境中。
xiang:~ $ source ~/.bashrc
xiang:~ $ . ~/.bashrc
~/.bashrc(non-login shell会读)
其它相关配置文件
stty [-a]
xiang :~ $ stty -a
speed 38400 baud; rows 12; columns 92; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?; swtch = M-^?;
start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O;
min = 1; time = 0;
...
stty erase ^h
用Ctrl+h进行字符删除,按下backspace则会出现^?。 stty erase ^?
恢复使用backspace。
**set [-uvCHhmBx]**
xiang:~ $ echo $-#显示目前所有set设定值。变量`$-`的内容是set的所有设定。
himBH#bash默认是himBH
#未设定的变量默认为空;设定`-u`后使用未设定的变量时报错。
#`set+u`取消这个设定。
xiang:~ $ set -u
xiang:~ $ echo $xiang
-bash:xiang:unbound variable
-
代表在编码顺序内的所有字符。[0-9]代表0到9之间的所有数字。 ^
表示反向选择。[^abc]代表一定有一个字符不是a/b/c#找出/etc/下五个字母的文件名,`?`代表一定有一个
xiang:~ $ ll -d /etc/?????
#找出/etc/下含有数字的文件名。中括号左右两边均需`*`
xiang:~ $ ll -d /etc/*[0-9]*
#找出/etc/下档名开头不是小写字母的文件名。中括号左边没有`*`
xiang:~ $ ll -d /etc/[^a-z]* #注意
#将上例找到的文件复制到/tmp/upper
xiang:~ $ mkdir /tmp/upper; cp -a /etc/[^a-z]* /tmp/upper
standard output与 standard error output
#一:观察你的系统根目录(/) 下各目录的文件名、权限与属性,并记录下来
xiang:~ $ ll / #此时屏幕会显示出文件名信息
xiang:~ $ ll / > ~/file #屏幕并无任何信息
xiang:~ $ ll ~/file #有个新档被建立了。
-rw-rw-r--. 1 xiang xiang 1078 Jul 9 18:51 /home/xiang/file
>
或2>
写入文件的建立方式: >>
或2>>
写入文件的建立方式:/dev/null垃圾桶装置与特殊写法
>file1 2>file2 #将stdout与stderr存入不同文件
#将stdout与stderr均写入文件list
>list 2>list #错误
>list 2>&1 #正确
&> list #正确
>list 2>list
错误原因:两组数据同时写入一个文件,数据可能会交叉,造成次序错乱。虽然list文件包含所有stdout、stderr的输出,但是数据排列不是原屏幕的输出顺序。 2>&1
或&>
。standard input<与<<
<
将原来由键盘输入的数据改为文件内容。xiang :~ $ cat > hello.c
#include
int main()
{
printf("hello world\n");
}#按Ctrl+d退出
xiang :~ $ cat hello.c
#include
int main()
{
printf("hello world\n");
}
xiang :~ $ gcc hello.c
xiang :~ $ ./a.out
hello world
xiang :~ $ cat > hello2.c < hello.c #用stdin取代键盘输入建立新文件
xiang :~ $ ll hello*
-rw-rw-r-- 1 xiang xiang 60 10月 12 19:59 hello2.c
-rw-rw-r-- 1 xiang xiang 60 10月 12 19:57 hello.c #大小一样
xiang :~ $ cat > eof << "eof"
> i am gaoxiang
> life is competition!
> eof #输入关键词立刻结束,不需要输入Ctrl+d
xiang :~ $ cat eof
i am gaoxiang
life is competition! #只有两行,无关键词那行
2>&1
将2>
转到1>
,1>&2
反之。#将`echo "error message"`以stderr格式输出
xiang:~ $ echo "error message" 1>&2 #输出到屏幕
xiang:~ $ echo "error message" 2> /dev/null 1>&2 #屏幕没有信息
不考虑指令相关性的连续指令下达cmd;cmd
;
隔开,分号前的指令执行完后立刻执行后面的指令。指令返回值$?与&&或||
cmd1 && cmd2
若cmd1执行正确($?=0),执行cmd2;否则不执行cmd2。 cmd1 || cmd2
若cmd1执行正确,不执行cmd2;否则执行cmd2。#先判断目录是否存在;若存在才在该目录下新建文件。
xiang :~ $ ls abc/ && touch abc/xyz
ls: cannot access abc/: No such file or directory#没有touch错误,说明touch没执行
xiang :~ $ mkdir abc
xiang :~ $ ls abc/ && touch abc/xyz
xiang :~ $ ll abc/
total 0
-rw-rw-r-- 1 xiang xiang 0 10月 12 20:29 xyz
#实现无论abc是否存在,都会新建abc/xyz
xiang :~ $ rm -rf abc/
xiang :~ $ ls abc/ || mkdir abc && touch abc/xyz
ls: cannot access abc/: No such file or directory
xiang :~ $ ll abc/
total 0
-rw-rw-r-- 1 xiang xiang 0 10月 12 20:35 xyz
#以ls测试abc是否存在,若存在显示"exist";否则显示"not exist"。
xiang :~ $ ll abc
ls: cannot access abc: No such file or directory
xiang :~ $ ll abc && echo "exist" || echo "not exist" #正确
ls: cannot access abc: No such file or directory
not exist
xiang :~ $ ll abc || echo "not exist" && echo "exist" #错误
ls: cannot access abc: No such file or directory
not exist
exist
|
: 2>&1
将stderr重导向至stdout,即可让管线命令处理stderr。grep
grep [-acinv] [--color=auto] '字符串' filename
tee [-a] file #-a以累加的方式将数据加入file
ll | tee file #将ls的数据存到file,同时输出到屏幕
mkdir /tmp/home
tar -cvf - /home | tar -xvf - -C /tmp/home
tar -cvf - /home
传送给后面的tar -xvf -
。后面-
读取前一个指令的stdout,因此不需要使用文件名。Please indicate the source: http://blog.csdn.net/gaoxiangnumber1
Welcome to my github: https://github.com/gaoxiangnumber1