⑴ linux shell中 ~ 符号代表什么
shell命令中 代表用户的家目录 使用cd ~ 或者cd 可以转到这个目录
在bash shell awk命令中,~代表匹配正则表达式,例:awk ‘$0 ~ /.*/ {print}’ test.txt
⑵ Linux shell 中单引号字符串里面有单引号字符怎么办
Linux shell 中单引号字符串里面有单引号字符解决:
$echo"mocha。reporter('spec')"|sed"s/'spec'/'json'/"
mocha.reporter('json')
有单引号的情况就用双引号呗
$echo"mocha.reporter('spec')"|sed$'s/'spec'/'json'/'
mocha.reporter('json')
或者也可以这样、加个$让bash转义
控制字符
转义字符不属于控制字符;控制字符也不属于转义字符。如果控制字符的定义是非图形的字符,或者对输出设备(打印机、文本终端)有特殊意义的字符,那么针对这些设备的转义字符也是控制字符。但是程序设计用的转义字符是图形字符,因此它们不是控制字符。相反地,大多数ASCII控制字符单独都具有控制功能,因此它们不是转义字符。
⑶ linux shell中'""和`的区别
和现在的开发语言一样,语法上有些差异!
三种主要的 Shell 与其分身
在大部份的UNIX系统,三种著名且广被支持的shell 是Bourne shell(AT&T shell,在 Linux 下是BASH)、C shell(Berkeley shell,在 Linux 下是TCSH)和 Korn shell(Bourne shell的超集)。这三种 shell 在交谈(interactive)模式下的表现相当类似,但作为命令文件语言时,在语法和执行效率上就有些不同了。
Bourne shell 是标准的 UNIX shell,以前常被用来做为管理系统之用。大部份的系统管理命令文件,例如 rc start、stop 与shutdown 都是Bourne shell 的命令档,且在单一使用者模式(single user mode)下以 root 签入时它常被系统管理者使用。Bourne shell 是由 AT&T 发展的,以简洁、快速著名。 Bourne shell 提示符号的默认值是 $。
C shell 是柏克莱大学(Berkeley)所开发的,且加入了一些新特性,如命令列历程(history)、别名(alias)、内建算术、档名完成(filename completion)、和工作控制(job control)。对于常在交谈模式下执行 shell 的使用者而言,他们较喜爱使用 C shell;但对于系统管理者而言,则较偏好以 Bourne shell 来做命令档,因为 Bourne shell 命令档比 C shell 命令档来的简单及快速。C shell 提示符号的默认值是 %。
Korn shell 是Bourne shell 的超集(superset),由 AT&T 的 David Korn 所开发。它增加了一些特色,比 C shell 更为先进。Korn shell 的特色包括了可编辑的历程、别名、函式、正规表达式万用字符(regular expression wildcard)、内建算术、工作控制(job control)、共作处理(coprocessing)、和特殊的除错功能。Bourne shell 几乎和 Korn shell 完全向上兼容(upward compatible),所以在 Bourne shell 下开发的程序仍能在 Korn shell 上执行。Korn shell 提示符号的默认值也是 $。在 Linux 系统使用的 Korn shell 叫做 pdksh,它是指 Public Domain Korn Shell。
除了执行效率稍差外,Korn shell 在许多方面都比 Bourne shell 为佳;但是,若将 Korn shell 与 C shell 相比就很困难,因为二者在许多方面都各有所长,就效率和容易使用上看,Korn shell 是优于 C shell,相信许多使用者对于 C Shell 的执行效率都有负面的印象。
在shell 的语法方面,Korn shell 是比较接近一般程序语言,而且它具有子程序的功能及提供较多的资料型态。至于 Bourne shell,它所拥有的资料型态是三种 shell 中最少的,仅提供字符串变量和布尔型态。在整体考量下 Korn shell 是三者中表现最佳者,其次为 C shell,最后才是 Bourne shell,但是在实际使用中仍有其它应列入考虑的因素,如速度是最重要的选择时,很可能应该采用 Bourne shell,因它是最基本的 shell,执行的速度最快。
作者: benny_feng 发布日期: 2006-10-17
tcsh 是近几年崛起的一个软件(Linux 下的C shell 其实就是使用 tcsh)执行,它虽然不是UNIX 的标准配备,但是从许多地方您都可以下载到它。如果您是 C shell 的拥护者,笔者建议不妨试试 tcsh,因为您至少可以将它当作是 C shell 来使用。如果您愿意花点时间学习,您还可以享受许多它新增的优越功能,例如:
1. tcsh 提供了一个命令列(command line)编辑程序。
2. 提供了命令列补全功能。
3. 提供了拼字更正功能。它能够自动检测并且更正在命令列拼错的命令或是单字。
4. 危险命令侦测并提醒的功能,避免您一个不小心执行了rm* 这种杀伤力极大的命令。
5. 提供常用命令的快捷方式(shortcut)。
bash 对 Bourne shell 是向下兼容(backward compatible),并融入许多C shell 与Korn shell 的功能。这些功能其实 C shell(当然也包括了tcsh)都有,只是过去 Bourne shell 都未支持。以下笔者将介绍 bash 六点重要的改进(详细的使用说明笔者会在以后的章节介绍):
1. 工作控制(job contorl)。bash 支持了关于工作的讯号与指令,本章稍后会提及。
2. 别名功能(aliases)。alias 命令是用来为一个命令建立另一个名称,它的运作就像一个宏,展开成为它所代表的命令。别名并不会替代掉命令的名称,它只是赋予那个命令另一个名字。
3. 命令历程(command history)。BASH shell 加入了C shell 所提供的命令历程功能,它以 history 工具程序记录了最近您执行过的命令。命令是由 1 开始编号,默认值为500。history 工具程序是一种短期记忆,记录您最近所执行的命令。要看看这些命令,您可以在命令列键入 history,如此将会显示最近执行过之命令的清单,并在前方加上编号。
这些命令在技术上每个都称为一个事件。事件描述的是一个已经采取的行动(已经被执行的命令)。事件是依照执行的顺序而编号,越近的事件其编号码越大,这些事件都是以它的编号或命令的开头字符来辨认的。history 工具程序让您参照一个先前发生过的事件,将它放在命令列上并允许您执行它。最简单的方法是用上下键一次放一个历程事件在您的命令列上;您并不需要先用 history 显示清单。按一次向上键会将最后一个历程事件放在您的命令列上,再按一次会放入下一个历程事件。按向下键则会将前一个事件放在命令列上。
⑷ Linux系统shell工具打印输出
Linux系统shell工具打印输出
shell脚本都是以#!/bin/bash开头;这是固定的写法,其中/bin/bash是bash命令的路径。那么Linux系统shell工具如何打印输出呢?跟我一起来看看吧!
一般都会通过chmod授予shell脚本的可执行权限。
在shell脚本中的打印输出通常会有echo和printf两种,前者会自动换行。
在shell中如果用双引号("")作为打印输出的内容时,如果双引号中有特殊字符需要在特殊字符前加上转义字符,当然也可以使用单引号或者不使用引号直接输出,使用单引号或者不使用就不需要用到转义字符。
格式替代符
有一些常用的格式替代符会经常在打印输出中被用到,格式替代符只能用在printf输出中。
%-5s:表示5个字符宽度,其中的-表示左对齐
%-4.2f:其中的f表示浮点型,4.2代表长度为4个字符且小数点2位,如果小数点超过2会进行四舍五入,-表示左对齐。
整形:
%d:整数的参数会被转成一有符号的十进制数字
%u:整数的参数会被转成一无符号的十进制数字
%o:整数的参数会被转成一无符号的八进制数字
%x:整数的参数会被转成一无符号的十六进制数字,并以小写abcdef表示
%X:整数的参数会被转成一无符号的十六进制数字,并以大写ABCDEF表示
浮点型数:
%fdouble型的参数会被转成十进制数字,默认取小数点以下六位,四舍五入
%edouble型的参数以指数形式打印,有一个数字会在小数点前,六位数字在小数点后,而在指数部分会以小写的e来表示.
%E与%e作用相同,唯一区别是指数部分将以大写的'E来表示.
%gdouble型的参数会自动选择以%f或%e的格式来打印,其标准是根据欲打印的数值及所设置的有效位数来决定.
%G与%g作用相同,唯一区别在以指数形态打印时会选择%E格式.
字符及字符串:
%c读字符串的第一个字符
%s输出指定宽度的字符内容.
%p如果是参数是"void*"型指针则使用十六进制格式显示
打印输出
在写脚本的时候更多的会使用echo作为打印输出,且习惯性的会使用双引号。
echo
[root@localhosttmp]#echo"helloword"
helloword
printf
默认printf是不换行的
[root@localhosttmp]#printf"helloword"
helloword[root@localhosttmp]#
需要换行加上 参数
[root@localhosttmp]#printf"helloword "
helloword
[root@localhosttmp]#
编写shell脚本
vimscrip.sh
#!/bin/bash
printf"%-5s%-10s%-4s "NoNameMark;
printf"%-5s%-10s%-4.2f "1aaa10.111;
printf"%-5s%-10s%-4.2f "2bbb20.146;
授予脚本执行权限:chmo+xscrip.sh
如果使用echo就不能用格式替代符
#!/bin/bash
echoNoNameMark;
echo1aaa10.111;
echo2bbb20.146;
注意事项
在echo,printf中使用-e,-n参数时,-e,-n应该出现在命令行其它字符之前。
-e:如果要在echo的双引号使用转义序列作为参数得需要使用-e参数
-n:忽略末尾的换行符
不使用-e参数
[root@localhosttmp]#echo"1 2"
1 2
使用-e参数
[root@localhosttmp]#echo-e"1 2"
转义序列:
/n:换行
/t:tab键
彩色输出
字体颜色包括:0=重置,30=黑色,31=红色,32=绿色,33=黄色,34=蓝色,35=洋红,36=青色,37=白色
背景颜色包括:0=重置,40=黑色,41=红色,42=绿色,43=黄色,44=蓝色,45=洋红,46=青色,47=白色
echo-e"e[1;32mhelloworde[0m"
e[1;32m:将字体颜色设为绿色,e[0m:将颜色重置
;⑸ Linux Shell 脚本编程最佳实践
IT路边社
前言
与其它的编码规范一样,这里所讨论的不仅仅是编码格式美不美观的问题, 同时也讨论一些约定及编码标准。这份文档主要侧重于我们所普遍遵循的规则,对于那些不是明确强制要求的,我们尽量避免提供意见。
编码规范对于程序员而言尤为重要,有以下几个原因:
本文档中的准则致力于最大限度达到以下原则:
尽管本文档涵盖了许多基础知识,但应注意的是,没有编码规范可以为我们回答所有问题,开发人员始终需要再编写完代码后,对上述原则做出正确的判断。
注 :未明确指明的则默认为必须(Mandatory)
主要参考如下文档:
仅建议Shell用作相对简单的实用工具或者包装脚本。因此单个shell脚本内容不宜太过复杂。
在选择何时使用shell脚本时时应遵循以下原则:
可执行文件不建议有扩展名,库文件必须使用 .sh 作为扩展名,且应是不可执行的。
执行一个程序时,无需知道其编写语言,且shell脚本并不要求具有扩展名,所以更倾向可执行文件没有扩展名。
而库文件知道其编写语言十分重要,使用 .sh 作为特定语言后缀的扩展名,可以和其他语言编写的库文件加以区分。
文件名要求全部小写, 可以包含下划线 _ 或连字符 - , 建议可执行文件使用连字符,库文件使用下划线。
正例:
反例:
源文件编码格式为UTF-8。避免不同操作系统对文件换行处理的方式不同,一律使用 LF 。
每行最多不超过120个字符。每行代码最大长度限制的根本原因是过长的行会导致阅读障碍,使得缩进失效。
除了以下两种情况例外:
如出现长度必须超过120个字符的字符串,应尽量使用here document或者嵌入的换行符等合适的方法使其变短。
示例:
除了在行结束使用换行符,空格是源文件中唯一允许出现的空白字符。
对从来没有用到的或者被注释的方法、变量等要坚决从代码中清理出去,避免过多垃圾造成干扰。
Bash 是唯一被允许使用的可执行脚本shell。
可执行文件必须以 #!/bin/bash 开始。请使用 set 来设置shell的选项,使得用 bash echo "Process $: Done making $$$."
# 示例7:命令参数及路径不需要引号 grep -li Hugo /dev/ "$1"
# 示例8:常规变量用双引号,ccs可能为空的特殊情况可不用引号 git send-email --to "${reviewers}" ${ccs:+"--cc" "${ccs}"}
# 示例9:正则用单引号,$1可能为空的特殊情况可不用引号 grep -cP '([Ss]pecial||?characters*) ${1:+"$1"}
# 示例10:位置参数传递推荐带引号的"$@",所有参数作为单字符串传递用带引号的"$*" # content of t.sh func_t { echo num: $# echo args: 1:$1 2:$2 3:$3 }
func_t "$@" func_t "$*" # 当执行 ./t.sh a b c 时输出如下: num: 3 args: 1:a 2:b 3:c num: 1 args: 1:a b c 2: 3:
使用 $(command) 而不是反引号。
因反引号如果要嵌套则要求用反斜杠转义内部的反引号。而 $(command) 形式的嵌套无需转义,且可读性更高。
正例:
反例:
条件测试
使用 [[ ... ]] ,而不是 [ , test , 和 /usr/bin/[ 。
因为在 [[ 和 ]] 之间不会出现路径扩展或单词切分,所以使用 [[ ... ]] 能够减少犯错。且 [[ ... ]] 支持正则表达式匹配,而 [ ... ] 不支持。参考以下示例:
尽可能使用变量引用,而非字符串过滤。
Bash可以很好的处理空字符串测试,请使用空/非空字符串测试方法,而不是过滤字符,让代码具有更高的可读性。正例:
反例:
正例:
反例:
正例:
反例:
文件名扩展
当进行文件名的通配符扩展时,请指定明确的路径。
当目录中有特殊文件名如以 - 开头的文件时,使用带路径的扩展通配符 ./* 比不带路径的 * 要安全很多。
应该避免使用eval。
Eval在用于分配变量时会修改输入内容,但设置变量的同时并不能检查这些变量是什么。反例:
请使用进程替换或者for循环,而不是通过管道连接while循环。
这是因为在管道之后的while循环中,命令是在一个子shell中运行的,因此对变量的修改是不能传递给父shell的。
这种管道连接while循环中的隐式子shell使得bug定位非常困难。反例:
如果你确定输入中不包含空格或者其他特殊符号(通常不是来自用户输入),则可以用for循环代替。例如:
使用进程替换可实现重定向输出,但是请将命令放入显式子 shell,而非 while 循环创建的隐式子 shell。例如:
总是检查返回值,且提供有用的返回值。
对于非管道命令,使用 $? 或直接通过 if 语句来检查以保持其简洁。
例如:
当内建命令可以完成相同的任务时,在shell内建命令和调用外部命令之间,应尽量选择内建命令。
因内建命令相比外部命令而言会产生更少的依赖,且多数情况调用内建命令比调用外部命令可以获得更好的性能(通常外部命令会产生额外的进程开销)。
正例:
反例:
加载外部库文件不建议用使用.,建议使用source,已提升可阅读性。正例:
反例:
除非必要情况,尽量使用单个命令及其参数组合来完成一项任务,而非多个命令加上管道的不必要组合。常见的不建议的用法例如:cat和grep连用过滤字符串; cat和wc连用统计行数; grep和wc连用统计行数等。
正例:
除特殊情况外,几乎所有函数都不应该使用exit直接退出脚本,而应该使用return进行返回,以便后续逻辑中可以对错误进行处理。正例:
反例:
推荐以下工具帮助我们进行代码的规范:
原文链接:http://itxx00.github.io/blog/2020/01/03/shell-standards/
获取更多的面试题、脚本等运维资料点击: 运维知识社区 获取
脚本之---短信轰炸机
脚本之---QQ微信轰炸机
ansible---一键搭建redis5.0.5集群
elk7.9真集群docker部署文档
全球最全loki部署及配置文档
最强安全加固脚本2.0
一键设置iptbales脚本
⑹ linux shell中的比较符号与特殊符号介绍
shell字符串比较、判断是否为数字
二元比较操作符,比较变量或者比较数字。注意数字与字符串的区别。
整数比较
-eq 等于,如:if [ "$a" -eq "$b" ]
-ne 不等于,如:if [ "$a" -ne "$b" ]
-gt 大于,如:if [ "$a" -gt "$b" ]
-ge 大于等于,如:if [ "$a" -ge "$b" ]
-lt 小于,如:if [ "$a" -lt "$b" ]
-le 小于等于,如:if [ "$a" -le "$b" ]
< 小于(需要双括号),如:(("$a" < "$b"))
<= 小于等于(需要双括号),如:(("$a" <= "$b"))
> 大于(需要双括号),如:(("$a" > "$b"))
>= 大于等于(需要双括号),如:(("$a" >= "$b"))
字符串比较
= 等于,如:if [ "$a" = "$b" ]
== 等于,如:if [ "$a" == "$b" ],与=等价
注意:==的功能在[[]]和[]中的行为是不同的,如下:
1 [[ $a == z* ]] # 如果$a以"z"开头(模式匹配)那么将为true
2 [[ $a == "z*" ]] # 如果$a等于z*(字符匹配),那么结果为true
3
4 [ $a == z* ] # File globbing 和word splitting将会发生
5 [ "$a" == "z*" ] # 如果$a等于z*(字符匹配),那么结果为true
一点解释,关于File globbing是一种关于文件的速记法,比如"*.c"就是,再如~也是.
但是file globbing并不是严格的正则表达式,虽然绝大多数情况下结构比较像.
!= 不等于,如:if [ "$a" != "$b" ]
这个操作符将在[[]]结构中使用模式匹配.
< 小于,在ASCII字母顺序下.如:
if [[ "$a" < "$b" ]]
if [ "$a" \< "$b" ]
注意:在[]结构中"<"需要被转义.
> 大于,在ASCII字母顺序下.如:
if [[ "$a" > "$b" ]]
if [ "$a" \> "$b" ]
注意:在[]结构中">"需要被转义.
具体参考Example 26-11来查看这个操作符应用的例子.
-z 字符串为"null".就是长度为0.
-n 字符串不为"null"
链接:https://www.jianshu.com/p/6322715ad196
⑺ linux的shell编程中的符号`是什么
`` 符号在shell里面正式的名称叫做backquote , 一般叫做命令替换
其作用是将引用命令的输出替换到字符串或者变量
通常的 你需要在一个序列中需要用到其它命令的输出,就可以用``
⑻ 4、liunx系统基础命令及特殊符号知识考题
什么是PATH环境变量,它有什么作用?
LANG PS1 PATH
######PATH含义
存放的是命令的位置/路径
[root@oldboye01-nb ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
第二个里程牌-liunx 下面运行命令过程
####1、输入命令
####2、在PATH里面 路径进行查找
####3、找到了就运行
####4、找不到就提示 command not found
第1题
如何过滤出已知当前目录下oldboy中的所有一级目录(提示:不包含oldboy目录下面目录的子目录及隐藏目录,即只能是第一级目录)?
mkdir /oldboy -p
cd /oldboy
mkdir ext/oldboy test xiaodong xingfujie -p
touch jeacen olaboy wodi.gz yingsui.gz
yum install tree -y
[root@oldboye01-nb oldboy]# #如何查询某个软件是否安装了?
[root@oldboye01-nb oldboy]# rpm -qa ( 查找所有安装软件 )
[root@oldboye01-nb oldboy]# rpm -qa
[root@oldboye01-nb oldboy]# rpm -qa |grep tree ( 查找具体的软件安装包 )
tree-1.5.3-3.el6.x86_64
[root@oldboye01-nb oldboy]# rpm -qa tree
tree-1.5.3-3.el6.x86_64
[root@oldboye01-nb oldboy]# rpm -qa |grep ipt
initscripts-9.03.58-1.el6.centos.x86_64
iptables-ipv6-1.4.7-16.el6.x86_64
plymouth-scripts-0.8.3-29.el6.centos.x86_64
iptables-1.4.7-16.el6.x86_64
[root@oldboye01-nb oldboy]# #查看某个软件包里面的内容
[root@oldboye01-nb oldboy]# rpm -ql tre
package tre is not installed
[root@oldboye01-nb oldboy]# rpm -ql tree ( 查看具体安装包里面的内容 )
/usr/bin/tree
/usr/share/doc/tree-1.5.3
/usr/share/doc/tree-1.5.3/LICENSE
###方法1
[root@oldboye01-nb oldboy]# tree -d /oldboy/
/oldboy/
ext
oldboy
test
xiaodong
xingfujie
5 directories
[root@oldboye01-nb oldboy]#
[root@oldboye01-nb oldboy]# tree -dL 1 /oldboy/
/oldboy/
ext
test
xiaodong
xingfujie
##方法2
[root@oldboye01-nb oldboy]# find -type d
.
./ext
./ext/oldboy
./xiaodong
./test
./xingfujie
[root@oldboye01-nb oldboy]# find -maxdepth 1 -type d ! -name "." ( 找出名字不是点 )
./ext
./xiaodong
./test
./xingfujie
###方法3
[root@oldboye01-nb oldboy]# ls -l
total 28
-rw-r--r--. 1 root root 0 Jun 9 07:06 alex.txt
-rw-r--r--. 1 root root 292 Jun 9 06:34 ett.txt
drwxr-xr-x 3 root root 4096 Jun 22 21:55 ext
-rw-r--r-- 1 root root 0 Jun 22 23:44 jeacen
-rw-r--r-- 1 root root 0 Jun 22 23:44 olaboy
-rw-r--r--. 1 root root 0 Jun 9 07:06 oldboy.txt
drwxr-xr-x. 2 root root 4096 Jun 9 07:26 test
-rw-r--r--. 1 root root 8 Jun 9 07:26 test.sh
-rw-r--r--. 1 root root 8 Jun 9 07:26 t.sh
-rw-r--r-- 1 root root 0 Jun 22 23:44 wodi.gz
drwxr-xr-x 2 root root 4096 Jun 22 21:55 xiaodong
drwxr-xr-x 2 root root 4096 Jun 22 21:55 xingfujie
-rw-r--r-- 1 root root 0 Jun 22 23:44 yingsui.gz
[root@oldboye01-nb oldboy]# ls -l |grep "^d" ( 找出目录为d开头的文件 )
drwxr-xr-x 3 root root 4096 Jun 22 21:55 ext
drwxr-xr-x. 2 root root 4096 Jun 9 07:26 test
drwxr-xr-x 2 root root 4096 Jun 22 21:55 xiaodong
drwxr-xr-x 2 root root 4096 Jun 22 21:55 xingfujie
[root@oldboye01-nb oldboy]#
#方法4
[root@oldboye01-nb oldboy]# ls -l|awk '$2>1' ( 第二列大于1 )
total 28
drwxr-xr-x 3 root root 4096 Jun 22 21:55 ext
drwxr-xr-x. 2 root root 4096 Jun 9 07:26 test
drwxr-xr-x 2 root root 4096 Jun 22 21:55 xiaodong
drwxr-xr-x 2 root root 4096 Jun 22 21:55 xingfujie
[root@oldboye01-nb oldboy]#
#第2题假如当前目录[root@oldboye01-nb oldboy]# pwd #==>这是打印当前目录的,最菜的命令
/oldboy
现在因为需要进入到/tmp目录下进行操作,执行的命令如下:
[ root@oldboy oldboy]# cd /tmp/
[ root@oldboy tmp]#pwd
/tmp/
操作完毕后,希望快速返回上一次进入的目录,即/oldboy目录,如何操作(不使用cd/oldboy)
[root@oldboye01-nb tmp]# #快速回到上一次的所在的位置/目录
[root@oldboye01-nb tmp]# cd -
/oldboy
[root@oldboye01-nb oldboy]# pwd
/oldboy
[root@oldboye01-nb oldboy]#
cd -
cd . =====当前目录 复制/移动 cp/etc/host.
cd.. =====进入到当前目录的上一级目录
cd~ =====进入当前用户的家目录,回老家
(root用户)~ ====/root
(普通用户)~ ====/home/
cd =====回老家 回家
cd - #快速回到上一次的所在位置/目录
[root@oldboye01-nb oldboy]##进入到/etc/sysconfig/network-scripts/目录,并查看你所在的位置
[root@oldboye01-nb oldboy]#进入到上一级目录,并查看你所在位置
[root@oldboye01-nb oldboy]##进入到/root目录下面,并显示你所在位置
[root@oldboye01-nb oldboy]#回到老家
[root@VM-8-6-centos ~]# cd /oldboy/
[root@VM-8-6-centos oldboy]# cd /etc/sysconfig/network-scripts/
[root@VM-8-6-centos network-scripts]# pwd
/etc/sysconfig/network-scripts
[root@VM-8-6-centos network-scripts]# cd ..
[root@VM-8-6-centos sysconfig]# pwd
/etc/sysconfig
[root@VM-8-6-centos sysconfig]# cd /root/
[root@VM-8-6-centos ~]# pwd
/root
[root@VM-8-6-centos ~]# cd -
/etc/sysconfig
#第3题一个目录中有多文件(ls查看时好多屏),想最快速度查看到最近更新的文件,怎么查
ls -lrt
第5题 调试系统服务时,希望能实时查看系统日志/var/log/messages的更新,如何做?
tail -f 显示文件的实时更新
taillf ====tail -f
第4题 打印配置文件nginx.conf 内容的行号及内容,该如何做?
[root@oldboye01-nb oldboy]# echo {1..5}
1 2 3 4 5
[root@oldboye01-nb oldboy]# echo stu {01..10}
stu 01 02 03 04 05 06 07 08 09 10
[root@oldboye01-nb oldboy]# echo stu{01..10}
stu01 stu02 stu03 stu04 stu05 stu06 stu07 stu08 stu09 stu10
[root@oldboye01-nb oldboy]# echo stu{01..10}xargs -n1
stu01xargs stu02xargs stu03xargs stu04xargs stu05xargs stu06xargs stu07xargs stu08xargs stu09xargs stu10xargs -n1
[root@oldboye01-nb oldboy]# echo stu{01..10}|xargs -n1
stu01
stu02
stu03
stu04
stu05
stu06
stu07
stu08
stu09
stu10
[root@oldboye01-nb oldboy]# echo stu{01..10}|xargs -n1 >nginx.conf
[root@oldboye01-nb oldboy]# cat nginx.conf
stu01
stu02
stu03
stu04
stu05
stu06
stu07
stu08
stu09
stu10
[root@oldboye01-nb oldboy]#
###方法1
[root@oldboye01-nb oldboy]# cat -n nginx.conf (-n表示行号)
1 stu01
2 stu02
3 stu03
4 stu04
5 stu05
6 stu06
7 stu07
8 stu08
9 stu09
10 stu10
###方法2 -vi/vim
:set nu #显示行号 number
:set monu #取消小时行号
###方法3 -grep -n参数
[root@oldboye01-nb oldboy]# grep -n "stu" nginx.conf
1:stu01
2:stu02
3:stu03
4:stu04
5:stu05
6:stu06
7:stu07
8:stu08
9:stu09
10:stu10
[root@oldboye01-nb oldboy]# grep -n "." nginx.conf
1:stu01
2:stu02
3:stu03
4:stu04
5:stu05
6:stu06
7:stu07
8:stu08
9:stu09
10:stu10
小结:
1.cat -n;vi/vim显示行号
2、grep -n
3、awk NR $ print
###第5题,装完系统后,希望让网络文件共享服务器NFS(iptables),仅在3级别上开机自启动,如何操作?
chkconfig iptables off
###第6题,liunx系统中查看中文,但是乱码,请问如何解决?
解决:
方法1:推荐修改xshell 字符集
方法2:修改系统字符集
1:命令行 export LANG=en_us.utf-8
2.写入配置文件
cp /etc/sysconfig/i18n /etc/sysconfig/i18n.bat
echo ‘LANG=en_us.UTF-8'>/etc/sysconfig/i18n
3、生效
source /etc/sysconfig/i18n
###第7题; /etc/目录为liunx系统默认的配置文件及服务启动命令的目录
a、请用tar 打包/etc整个目录(打包及压缩)
b、请把a点命令的压缩包,解压到/tmp指定目录下(最好只用tar命令实现)
c、请用tar打包/etc整个目录(打包及压缩,但需要排除/etc/services文件)。
tar 创建查看解压压缩包
[root@oldboye01-nb oldboy]# tar zcvf /tmp/etc.tar.gz /etc/
创建压缩包 压缩包存放的位置 压缩能够目录
zcvf 注释:
z----通过gzip工具进行压缩 ,
c-----表示create创建 压缩包 ,
v---表示verbose显示执行过程
f-----显示file 接上压缩包的名字
[root@oldboye01-nb oldboy]# ls -l /tmp/ (查看文件)
total 9508
-rw-r--r-- 1 root root 9736182 Jun 23 05:48 etc.tar.gz
查看压缩包的内容
[root@oldboye01-nb oldboy]# tar ztf /tmp/etc.tar.gz
ztf注释: t----表示list 显示压缩包的内容
解压
[root@oldboye01-nb oldboy]# cd /tmp/
[root@oldboye01-nb tmp]# tar zxf etc.tar.gz (解压)
创建
tar zcf
查看
tar tf
解压
tar xf
[root@oldboye01-nb tmp]# tar zxf etc.tar.gz
[root@oldboye01-nb tmp]# tar zcf /tmp/sysconfig.tar.gz /etc/sysconfig/
tar: Removing leading /' from member names tar: Removing leading /' from hard link targets
[root@oldboye01-nb tmp]# tar tf /tmp/sysconfig.tar.gz
[root@oldboye01-nb tmp]# ls -l
total 9568
drwxr-xr-x 78 root root 4096 Jun 23 03:39 etc
-rw-r--r-- 1 root root 9736182 Jun 23 05:48 etc.tar.gz
-rw-r--r-- 1 root root 53851 Jun 23 06:00 sysconfig.tar.gz
[root@oldboye01-nb tmp]# rm -fr etc
do not use rm -fr etc
[root@oldboye01-nb tmp]# ll
total 9568
drwxr-xr-x 78 root root 4096 Jun 23 03:39 etc
-rw-r--r-- 1 root root 9736182 Jun 23 05:48 etc.tar.gz
-rw-r--r-- 1 root root 53851 Jun 23 06:00 sysconfig.tar.gz
[root@oldboye01-nb tmp]# rm -fr etc
[root@oldboye01-nb tmp]# ll
total 9564
-rw-r--r-- 1 root root 9736182 Jun 23 05:48 etc.tar.gz
-rw-r--r-- 1 root root 53851 Jun 23 06:00 sysconfig.tar.gz
[root@oldboye01-nb tmp]# tar xf sysconfig.tar.gz
[root@oldboye01-nb tmp]# ll
total 9568
drwxr-xr-x 3 root root 4096 Jun 23 06:02 etc
-rw-r--r-- 1 root root 9736182 Jun 23 05:48 etc.tar.gz
-rw-r--r-- 1 root root 53851 Jun 23 06:00 sysconfig.tar.gz
[root@oldboye01-nb tmp]# ls etc
sysconfig
[root@oldboye01-nb tmp]# ls etc
sysconfig
[root@oldboye01-nb tmp]# ls etc/sysconfig/
acpid i18n kernel quota_nld sshd
atd init keyboard raid-check sysstat
auditd ip6tables moles readahead sysstat.ioconf
authconfig ip6tables-config netconsole readonly-root system-config-firewall
cbq ip6tables.old network rngd system-config-firewall.old
clock iptables networking rsyslog udev
console iptables-config network-scripts sandbox
cpuspeed iptables.old ntpd saslauthd
crond irqbalance ntpdate selinux
grub kmp prelink smartmontools
请把A点命令的压缩包,解压到/tmp指定目录下(最好用tar命令实现)
[root@oldboye01-nb tmp]# tar xf etc.tar.gz -C /opt/ (指定目录)
[root@oldboye01-nb tmp]# ls -l /opt/ (查看解压后的目录情况)
请用tar打包/etc整个目录(打包及压缩,但需要排除/etc/services文件)
[root@oldboye01-nb tmp]# tar zcf /tmp/etc.tar.gz /etc/
tar: Removing leading `/' from member names
tar: Removing leading `/' from hard link targets
[root@oldboye01-nb tmp]#
[root@oldboye01-nb tmp]# tar zcf /tmp/etc-paichu.tar.gz /etc/ --exclude=/etc/services
tar: Removing leading `/' from member names
tar: Removing leading `/' from hard link targets
[root@oldboye01-nb tmp]# tar zcf /tmp/etc-paichu.tar.gz /etc/ --exclude=/etc/services
tar: Removing leading `/' from member names
tar: Removing leading `/' from hard link targets
[root@oldboye01-nb tmp]# tar tf /tmp/etc.tar.gz |grep services
etc/init/readahead-disable-services.conf
etc/services
[root@oldboye01-nb tmp]# tar tf /tmp/etc-paichu.tar.gz|grep services
etc/init/readahead-disable-services.conf
[root@oldboye01-nb tmp]#
cd /
tar zcf /tmp/etc.tar.gz etc/
小结:
1、tar 打包压缩
2、创建压缩包 查看压缩包, 解压
3、解压到指定的文件夹
4、创建压缩包排除
#第8题如何查看etc/services文件的有多少行?
[root@oldboye01-nb ~]# cd /oldboy/
[root@oldboye01-nb oldboy]# wc -l /etc/services
10774 /etc/services、
屌丝去洗浴中心之路
3、
(1) 查看22端口是否开启telnet
(2) sshd远程连接进程是否在运行
ps -ef
[root@oldboye01-nb oldboy]# ps -ef |grep "sshd" (过滤进程sshd)
root 1436 1 0 Jun22 ? 00:00:00 /usr/sbin/sshd
root 2461 1436 0 05:11 ? 00:00:00 sshd: root@pts/0
root 2588 1436 0 06:45 ? 00:00:00 sshd: root@pts/1
root 2656 1436 0 07:30 ? 00:00:00 sshd: root@pts/2
root 2701 2658 0 08:01 pts/2 00:00:00 grep sshd
[root@oldboye01-nb oldboy]# ps -ef |grep "/sshd"
root 1436 1 0 Jun22 ? 00:00:00 /usr/sbin/sshd
root 2705 2658 0 08:03 pts/2 00:00:00 grep /sshd
[root@oldboye01-nb oldboy]# ps -ef |grep "/sshd"|wc -l (显示进程出现几个;次数)
2
第9题:过滤出/etc/services 文件包含3306和1521两数字所在行号的内容
[root@oldboye01-nb oldboy]# grep "3306" /etc/services
mysql 3306/tcp # MySQL
mysql 3306/udp # MySQL
[root@oldboye01-nb oldboy]# egrep "3306|1521" /etc/services
mysql 3306/tcp # MySQL
mysql 3306/udp # MySQL
ncube-lm 1521/tcp # nCube License Manager
ncube-lm 1521/udp # nCube License Manager
[root@oldboye01-nb oldboy]# #egrep ==grep -E支持高级正则(公鸡里的战斗机)
[root@oldboye01-nb oldboy]#
第10题命令行及shell中不加引号、加单引号和加双引号的区别小结
单引号 所见即所得 吃啥吐啥
双引号 里面的特殊符号会被解析
[root@VM-8-6-centos oldboy]# echo 'hello lls $LANG $(hostname) 'pwd''
hello lls $LANG $(hostname) pwd
⑼ liunx 下的shell语句 if [ ! -d /$1/$2/$3/ ]是什么意思
liunx 下的shell语句 if [ ! -d /$1/$2/$3/ ]这是判断某文件夹是否存在,$1, $2, $3都是变量,操作方法如下:
1、判断文件的基本格式。[ 操作符 文件或目录 ]。
⑽ shell脚本中的美元符号什么意思
linux shell脚本中的美元符号$,是作为shell中特殊变量使用的,具体含义:
$0 shell的命令本身(包括完专整路径)
$1到$9 数字表属示shell 的第几个参数
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数
$$ 脚本运行的ID号
$! 后台运行的最后一个进程的ID号
$@ 与$*相同。
$- 显示shell使用的当前选项。
$? 显示最后命令的执行状况。0表示没有错误。