man [command] 命令帮助
man -f [command] 查看[command]的说明文件 等价于 whatis
man -k [command] 说明文件中有关键字[command]的文件列出 等价于apropos
who 查看有谁在线
netstat -a 查看网络联机状态
fsck /dev/sda7 fsck文件系统检查命令
ls -al 列出所有文件的文件详细的权限与属性(包含隐藏文件)
uname -r 查看实际的内核版本
环境变量的功能:
变量的有效范围:环境变量=全局变量,自定义变量=局部变量。可以用export将局部变量编程全局变量
env 列出目前shell环境下的所有环境变量与其内容
HOME 用户主文件夹
SHELL 目前使用哪个shell程序
HISTSIZE 历史记录条数
MAIL 用户邮件存储路径
PATH 执行文件查找的路径,目录与目录之间以冒号(:)分割
LANG 语系数据
RANDOM 随机数变量
PS1 提示符的设置
$ 关于本shell的PID,echo $$可以打出你的PID号码
? 关于上个命令执行的回传码,如果命令成功执行,则会回传一个0值,如果执行发生错误,返回一个非0值
export:自定义变量转成环境变量,如果仅执行export而没有接变量时,此时会把所有的“环境变量“显示出来,但仅对当前bash有效,如果要想永久生效,需要把变量写进/etc/profile中,或者~/.bashrc、~./bash_profile中
locale -a 显示出所有支持的语系
1.了解PS1
PS1是Linux终端用户的一个变量,但不是环境变量,用来定义命令行提示符的参数。
在终端输入命令:
# set | grep PS1
可得到当前PS1的定义值:
PS1='[\u@\h \W]\$ '
PS1的常用参数以及含义:
\d :代表日期,格式为weekday month date,例如:"Mon Aug 1"
\H :完整的主机名称
\h :仅取主机名中的第一个名字
\t :显示时间为24小时格式,如:HH:MM:SS
\T :显示时间为12小时格式
\A :显示时间为24小时格式:HH:MM
\u :当前用户的账号名称
\v :BASH的版本信息
\w :完整的工作目录名称
\W :利用basename取得工作目录名称,只显示最后一个目录名
\# :下达的第几个命令
\$ :提示字符,如果是root用户,提示符为 # ,普通用户则为 $
所以linux默认的命令行提示信息的格式
PS1='[\u@\h
\W]\$ ' 的意思就是:[当前用户的账号名称@主机名的第一个名字 工作目录的最后一层目录名]#
2.颜色设置参数
在PS1中设置字符颜色的格式为:\[\e[F;Bm\],其中“F“为字体颜色,编号为30-37,“B”为背景颜色,编号为40-47。
颜色对照表:
F B
30 40 黑色
31 41 红色
32 42 绿色
33 43 黄色
34 44 蓝色
35 45 紫红色
36 46 青蓝色
37 47 白色
代码
0
1
4
7
8
只需将对应数字套入设置格式中即可。
比如要设置命令行的格式为绿字黑底(\[\e[32;40m\]),显示当前用户的账号名称(\u)、主机的第一个名字(\h)、完整的当前工作目录名称(\w)、24小时格式时间(\t),可以直接在命令行键入如下命令:
# PS1='[\[\e[32;40m\]\u@\h \w \t]$ '
经过多次测试后,最终确定了一个适合我自己的格式:
# PS1="\[\e[37;40m\][\[\e[32;40m\]\u\[\e[37;40m\]@\h \[\e[36;40m\]\w\[\e[0m\]]\\$ "
但注意这样的设置只是临时性的.
PS1="[\[\e[32;40m\]\u\[\e[36;40m\]@\h \[\e[36;40m\]\w]\\$\[\e[0;m\] "
//自己喜欢的样式3.修改.bashrc文件,永久保存命令行样式.
上面的设置的作用域只有当前终端的登陆有效,关闭终端或退出登录即刻失效。要想永久性的保存设置,需要修改.bashrc配置文件。
键入命令:
1 # cd2 # ls -la
现在可以看到.bashrc这个文件。
编辑.bashrc:
# vim .bashrc
加入这一行:
PS1="\[\e[37;40m\][\[\e[32;40m\]\u\[\e[37;40m\]@\h \[\e[36;40m\]\w\[\e[0m\]]\\$ "
保存退出。
重新加载bash配置文件:
# source .bashrc
即可立即并永久生效了。
变量键盘读取、数组与声明:read,array,declare:
read [-pt] variable 读取来自键盘的输入
参数:
-p:后面可以接提示符
-t:后面可以接等待的秒数
例:
read atest;echo $atest
read -p "Please keyin your name:" -t 30 named;echo $named
declare/typeset 声明变量的类型,变量类型默认是字符串,bash环境中的数值运算,最多仅能达到整数类型
declare [-aixr] variable
参数:
-a:将后面名为variable的变量定义成为数组类型
-i:将后面名为variable的变量定义成为整数数字类型
-x:用法与export一样,将后面的variable变成环境变量,将减号(-)编程加号(+)可以让环境变量变为非环境变量
-r:将变量设置成为readonly类型,该变量不可被更改内容,也不能重设
变量内容的删除、替代与替换:
|
变量书写方式 |
功能描述 |
|
${变量名称#匹配字符} |
若变量内容有被匹配到,刚从变量内容的左边开删除,但删除匹配最短的 |
|
${变量名称##匹配字符} |
若变量内容有被匹配到,刚从变量内容的左边开删除,但删除匹配最长的,可理解成此时工作在贪婪模式 |
|
${变量名称%匹配字符} |
若变量内容有被匹配到,刚从变量内容的右边开删除,但删除匹配最短的 |
|
${变量名称%%匹配字符} |
若变量内容有被匹配到,刚从变量内容的右边开删除,但删除匹配最长的,可理解成此时工作在贪婪模式 |
|
${变量称/旧字符串/新字符串} |
从变量内容的左边开始匹配,用新字符串替换旧字符串,仅替换第一个匹配到的字符串 |
|
${变量称//旧字符串/新字符串} |
从变量内容的左边开始匹配,用新字符串替换旧字符串,全部替换匹配到的字符串 |
变量的测试与内容替换
${parameter:-word}
${}:关键字
parameter 变量
:- 关键字,被测试的选项
word 变量的替换内容
| 变量配置方式 | str 没有配置 | str 为空字符串 | str 已配置非为空字符串 |
| var=${str-expr} | var=expr | var= | var=$str |
| var=${str:-expr} | var=expr | var=expr | var=$str |
| var=${str+expr} | var= | var=expr | var=expr |
| var=${str:+expr} | var= | var= | var=expr |
| var=${str=expr} | str=expr var=expr | str 不变 var= | str 不变 var=$str |
| var=${str:=expr} | str=expr var=expr | str=expr var=expr | str 不变 var=$str |
| var=${str?expr} | expr 输出至 stderr | var= | var=$str |
| var=${str:?expr} | expr 输出至 stderr | expr 输出至 stderr | var=$str |
bash的登录与欢迎信息:/etc/issue,/etc/motd
1、/etc/issue
用 法:当我们在终端接口登录的时候,会有几行提示字符串,那么这个字符串就是设置在/etc/issue。
[root@linux ~]#cat /etc/issue
CentOS release 5.6 (Final)
Kernel \r on an \m
issue内各代码说明:
\d 本地端时间的日期
\l 显示第几个终端接口
\m 显示硬件的等级
\n 显示主机的网络名称
\o 显示域名
\r 操作系统的版本
\t 显示本地端的时间
\s 操作系统的名称
\v 操作系统的版本
2、/etc/motd
用 法:如果想让用户登录后获取一些消息,比如想让大家都知道的消息,就可以加入这个文件,当登录后,告诉登录者,系统将会在某个时间进行维护。
eg:
[root@linux ~]#vi /etc/motd
Hello everyone,
Our server will be maintained at ....
please don't login at that time,thanks.
那么当用户登录的时候,就会显示设置的内容了。
z
bash默认组合键:
Ctrl+C 终止目前命令
Ctrl+D 输入结束,例如邮件结束
Ctrl+M Enter
Ctrl+S 暂停屏幕的输出
Ctrl+Q 恢复屏幕的输出
Ctrl+U 在提示符下,将整行命令删除
Ctrl+Z 暂停目前的命令
通配符与特殊符号:
|
符号 |
意义 |
|
* |
代表『 0 个到无穷多个』任意字符 |
|
? |
代表『一定有一个』任意字符 |
|
[ ] |
同样代表『一定有一个在括号内』的字符(非任意字符)。例如 [abcd] 代表『一定有一个字符, 可能是 a, b, c, d 这四个任何一个』 |
|
[ - ] |
若有减号在中括号内时,代表『在编码顺序内的所有字符』。例如 [0-9] 代表 0 到 9 之间的所有数字,因为数字的语系编码是连续的! |
|
[^ ] |
若中括号内的第一个字符为指数符号 (^) ,那表示『反向选择』,例如 [^abc] 代表 一定有一个字符,只要是非 a, b, c 的其他字符就接受的意思。 |
bash特殊符号:
|
符号 |
内容 |
|
# |
批注符号:这个最常被使用在 script 当中,视为说明!在后的数据均不运行 |
|
\ |
跳脱符号:将『特殊字符或通配符』还原成一般字符 |
|
| |
管线 (pipe):分隔两个管线命令的界定(后两节介绍); |
|
; |
连续命令下达分隔符:连续性命令的界定 (注意!与管线命令并不相同) |
|
~ |
用户的家目录 |
|
$ |
取用变量前导符:亦即是变量之前需要加的变量取代值 |
|
& |
工作控制 (job control):将命令变成背景下工作 |
|
! |
逻辑运算意义上的『非』 not 的意思! |
|
/ |
目录符号:路径分隔的符号 |
|
>, >> |
数据流重导向:输出导向,分别是『取代』与『累加』 |
|
<, << |
数据流重导向:输入导向 (这两个留待下节介绍) |
|
' ' |
单引号,不具有变量置换的功能 |
|
" " |
具有变量置换的功能! |
|
` ` |
两个『 ` 』中间为可以先运行的命令,亦可使用 $( ) |
|
( ) |
在中间为子 shell 的起始与结束 |
|
{ } |
在中间为命令区块的组合! |
数据流重定向:
> :以覆盖的方法将『正确的数据』输出到指定的文件或装置上
1> :以覆盖的方法将『正确的数据』输出到指定的文件或装置上
1>>:以累加的方法将『正确的数据』输出到指定的文件或装置上
2> :以覆盖的方法将『错误的数据』输出到指定的文件或装置上
2>>:以累加的方法将『错误的数据』输出到指定的文件或装置上
<:将原本需要由键盘输入的数据,改由文件内容来取代
<<:代表的是『结束的输入字符』
<<<:将字符串重定向到stdin。
例:
-
如果要将正确和错误的数据写在同一个文件内的话呢?
find /home -name .bashrc > list 2>&1
find /home -name .bashrc &> list
-
如果想将错误的信息丢弃,屏幕上只显示正确数据
find /home -name .bashrc 2> /dev/null
/dev/null可以吃掉任何导向这个设备的信息
-
我要用 cat 直接将输入的信息输出到 catfile 中, 且当由键盘输入 eof 时,该次输入就结束,那我可以这样做:
|
1
2
3
4
5
6
7
8
|
[root@www
~]#
cat > catfile << "eof" >
This is a test. >
OK now stop >
eof <==输入这关键词,立刻就结束而不需要输入 [ctrl]+d [root@www
~]#
cat catfile This
is a test. OK
now stop |
-
cat > catfile < ~/.bashrc
它代表将~/.bashrc的内容作为输入,然后将这些内容写入catfile
命令执行判断依据:
cmd;cmd 不考虑命令的相关性的连续命令执行
cmd1 && cmd2 若cmd1正确执行,则开始执行cmd2
cmd1 || cmd2 若cmd1执行完毕为错误,则开始执行cmd2
管道命令(pipe):
-
管道命令|:
这个|仅能处理由前一个命令传来的正确信息,也就是standard output信息,对于standard error并没有直接处理能力,管道命令必须要能够接收来自前一个命令的数据成为standard input继续处理才行
-
好用的less和tail
less
如ls
-al /etc | less就能用类似vi的方式浏览在屏幕上打印的内容了。还能用vi里的查找命令/、?,可以避免滚屏,非常好用。
tail
-
tail filename输出文件最后10行 -
tail -n 5 filename输出文件最后5行 -
tail -F filename监视文件的改变,一有变化就显示出来
在分析error log的时候非常有用,可以查看最近的错误信息。
-
选取命令:cut,grep:
cut 将一段信息的某一段切出来,处理的信息是以行为单位。
cut -d '分割字符' -f fieldscut -c 字符范围
参数:
-d : 后面接分隔符,与-f一起使用;
-f : 依据-d的分隔符将一段信息切割成为数段,用-f取出第几段的意思;
-c : 以字符(characters)的单位取出固定字符区间;
echo $PATH | cut -d ':' -f 3-5//将path的值按照':'进行分割,后取出第3到5个值export | cut -c 12-//对export的输出进行切分,每行输出从第12个字符往后的内容
grep 分析一行信息,如果有匹配的,就将该行拿出来。
grep [-acinv] [--color=auto] '查找字符串' filename
参数:
-a : 将binary文件以text文件的方式查找数据;
-c : 计算找到’查找字符串‘的次数;
-i : 忽略大小写的不同;
-n : 带行号;
-v : 反向选择,显示没有‘查找字符串’的行;
--color=auto : 可以将找到查找的关键字部分加上颜色显示
export | grep -in --color=auto 'bin'//列出export输出中带有bin的行,并给bin加上颜色,不区分大小写,带有行号。
-
排序命令:sort,wc,uniq:
sort 可以依据不同的数据类型进行排序。
sort [-fbMnrtuk] [file or stdin]
参数:
-f : 忽略大小写
-b : 忽略最前面的空格符
-M : 以月份的名字来排序,如 JAN, DEC等
-n : 使用“数字”进行排序(默认是以文字类型来排序的)
-r : 反向排序
-u : uniq,相同的数据,仅出现一行代表
-t : 分隔符,默认是[Tab]来分割
-k : 用哪个filed来进行排序,与-t相关
cat /etc/passwd | sort -t ':' -k 3 -n//根据 passwd中每行,按':'分隔符进行分隔后,按照第3个字段使用纯数字的方式进行排序。
uniq 重复的行只显示一个
uniq [-ic]
参数:
-i : 忽略大小写
-c : 进行计数
last | cut -d ' ' -f1 | sort | uniq -c//列出登录者名字,并进行排序,进行统一处理,并计数。
wc 输出信息的整体数据
wc [-lwm]
参数:
-l : 仅列出行
-w : 仅列出多少字(英文单字)
-m : 多少字符
cat /etc/man.config | wc//输出三个数字,分表代表行,字数,字符数
-
双向重定向:tee
tee 双重定向,存到文件/设备的同时,输出到屏幕以便继续处理。
tee [-a] file
参数:
[-a] : 以累加(append)的方式,输出到file中。
ls -l / | tee -a file.list | more//把文件目录输出到file.list中,同时用more将其输出到屏幕。
-
字符转换命令:tr,col,join,paste,expand
tr 删除一段信息中的文字,或者进行文字信息的转换。
tr [-ds] XXX ...
参数:
-d : 删除信息中XXX这个字符串
-s : 替换掉重复的字符
last | tr '[a-z]' '[A-Z]'//将last输出的信息中所有的小写字母变成大写字母
col 对特殊字符进行处理
col [-xb]
参数:
-x : 将tab键转换成对等的空格键
-b : 在文字内有反斜杠(/)时,仅保留反斜杠最后接的那个字符
cat /etc/man.config | col -x | cat -A | more//将/etc/man.config内容中的[tab]转成空白,并输出。
join 将两个文件当中有相同数据的那一行加在一起。
join [-ti12] file1 file2
参数:
-t : join默认以空格符分隔数据,并且对比“第一个字段”的数据;如果两个文件相同,则将两条数据连成一行,且第一个字段放在第一个。
-i : 忽略大小写
-1 : (数字1),代表第一个文件要用哪个字段进行比较
-2 : 代表第二个文件要用哪个字段进行比较
join -t ':' -1 4 /etc/passwd -2 3 /etc/group//用分隔符':'进行分隔,第一个文件用第4个字段,第二个文件用第3个字段,进行分析。
paste 将两个文件贴在一起,中间以[tab]键隔开。
paste [-d] file1 file2
参数:
-d : 后面可以接分隔符,默认是以[tab]进行分隔
- : 如果file部分写成-, 表示来自standard input的数据的意思
cat /etc/group|paste /etc/passwd /etc/shadow - |head -n 3//先将/etc/group读出,然后与/etc/passwd和/etc/shadow合并的内容粘贴在一起,且仅取出前三行。
expand 将[tab]按键转成空格键
expand [-t] file
参数:
-t : 后面可以接数字,代表一个tab用几个空格表示
-
切割命令:split:
split [-bl] file PREFIX
参数:
-b:后面可以接欲切割成的文件大小,可以加单位,b,k,m等
-l:以行数来进行切割
PREFIX:代表前导符,可作为切割文件的前导文字
# file文件名可以任意取,只要写上前导文字,小文件就回以xxxaa,xxxab,xxxac等方式来新建小文件的
-
参数代换:xargs:
xargs 读入stdin的数据,并且以空格符或断行符进行分辨,将stdin的数据分隔为arguments。
xargs [-0epn] command
参数:
-0 : 如果输入的stdin含有特殊字符,如`,\,空格键等,这个参数可以将它还原成一般字符。
-e : 是EOF(end of file)的意思,后面可以接一个字符串,当xargs分析到这个字符串时,就停止继续工作。
-p : 在执行每个命令的参数时,都会询问用户的意见
-n : 后面接次数
cut -d ':' -f1 /etc/passwd | xargs -p -e'lp' finger//分析到lp这个字符串时,后面的其它stdin的内容就被xargs舍弃掉了。
举个例子
如果你想统计一个文件夹下java代码的文件数量
find [folderPath] -name "*.java" | wc -l
那如果我想查询所有java代码的行数呢?
可以用xargs,因为wc -l filename可以查询单个文件的行数
find [folerPath] -name "*.java" | xargs wc -l
如果要去掉空行
find [folderPath] -name "*.java" |xargs cat| grep -v ^$|wc -l
-
关于减号-的用途:
连字符:年轻人称之为dash,年长者称之为minus,英文名称hyphen(连字符),minus sign(减号),或虚线
减号”-“就是代表标准输出/标准输入, 视命令而定. “-“代替stdin和stdout的用法,stdin就是标准输入,stdout就是标准。
1,为应用程序指定参数。
如ps -aux,tar -zxf test.tar
2.一个减号和两个减号
一个减号后面跟的参数必须是单字符参数,可以多个参数写在同一个减号后面。
例如:tar -xvf ×××
两个减号后面跟的参数必须是多字符参数,一个“–”只能跟一个参数。
例如:tar –version
3 表示上一级工作目录。如cd –
cd –
4 普通用户切换到root
su -相当于su – root
5、通过ssh传送文本
cat id_rsa.pub |ssh -p322 root@172.10.1.105 ‘cat – >> ~/.ssh/authorized_keys’
6、表示标准输出流。如tar -cvf – /home | tar -xvf –
tar -cvf – /home 把/home压缩后,打印在stdout上
| 管道,即前一命令的输出为后一命令输入
tar -xvf – 从stdin读取内容,并在当前目录解压
复制的例子
tar cf – access.log |tar xf – -C /opt
7、纯粹是演示 ‘-‘
grep -xvf a b 可以写成
cat a | grep -xvf – b
8、
脚本中可以这样在crontab里添加一个任务
{ crontab -l; echo “* * * * * /bin/date >> /tmp/log” ; } | crontab –
9、在文件头添加一行,也可以这样玩
cat – file <<<"line num 1" ###有问题 至今没看懂
10、只取一列并与另一文件做diff awk '{ print $1 }' a | diff - b 11、例子, 在当前我要打包1个文件夹 /var/log/ 到当前目录下,并用zip压缩, 那么我们可以分步执行 #tar -cvf log.tar /var/log/ #zip -r log.tar.zip log.tar #rm -rf log.tar 写成一条语句就是 tar -cvf log.tar /var/log/ && zip -r log.tar.zip log.tar && rm -rf log.tar 那么我们可以发现第一条语句的输出(log.tar) 就是第二条语句的输入 这种情况下我们可以用 “-” 来取代这个输出输入 直接执行如下语句就ok了 tar -cvf - /var/log | zip -r log.zip - 意思就是 第一条语句不再输入到1个具体文件,而输出到stdout中, 而作为第二条件的标准输入(stdin), 而stdin 和 stdout都可以用“-”来取代。 这样的话就不会有中间文件生成了~
2785

被折叠的 条评论
为什么被折叠?



