121 sysctl 可以更改内核参数的命令 ,-w 写入 ,-p 重新加载 -a 显示内核参数
122 vmstat 显示系统状态
123
hostnamectl 显示主机名
124 uptime
125 自动加载硬盘 不用mount /dev/sro 的方法 autofs
126 swapon -s 查看
目前用到哪些swap空间
127/sbin/nologin adduser -s /sbin/nologin floyd 意思是添加该用户没有权限登录,只能进行某些服务
/sbin/false 服务也不能进行。
128 netstat -lntp查看运行 服务的端口号等信息,ps -aux 查看内存中所有的进程
129yy命令复制当前整行的内容到vi缓冲区
yw复制当前光标所在位置到单词尾字符的内容到vi缓存区,相当于复制一个单词
y$复制光标所在位置到行尾内容到缓存区
y^复制光标所在位置到行首内容到缓存区
#yy例如:5yy就是复制5行
#yw例如:2yw就是复制两个单词
如果要复制第m行到第n行之间的内容,可以在末行模式中输入m,ny例如:3,5y复制第三行到第五行内容到缓存区
130 rpm -qa 查看安装的包
131, rpm -qa | grep yum |xargs rpm -e --nodeps
132,$ ./bash.sh以相对路径运行脚本
133,绝对路径是从/开始的,而相对路径是pwd下当前路径
134,${}只显示{}内的参数
135,${!xxx}间接参数扩展,
例 $zjn=h $h=11 ${!zjn}=11
136 #移除开头的字符 %移除最后的字符 ##只剩最后一个字符 %%只剩第一个字符 p104
137字符的搜索和替换 echo ${ xx//a/b}表示将xx中的a 全部换成b 而echo ${xx/a/b}表示将xx中的一个a替换成b。
138{#xxx}表示字符串长度 $?查看上一个命令是否成功执行 0表示成功 $1,$2表示输入的第几个字符, $!表示最近一次执行后台命令的进程号 $_表示前一个命令的最后一个参数。$#显示输入数的个数。
$# 是传给脚本的参数个数
$0 是脚本本身的名字
$1 是传递给该shell脚本的第一个参数
$2 是传递给该shell脚本的第二个参数
$@ 是传给脚本的所有参数的列表
$* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
$$ 是脚本运行的当前进程ID号
$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误
139位置参数用set来赋值,nohup 退出系统后在后台继续进行
140expr命令 let命令可以用来对表达式进行求值
141
[ -a FILE ] 如果 FILE 存在则为真。
[ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真。 [ -c FILE ] 如果 FILE 存在且是一个字特殊文件则为真。 [ -d FILE ] 如果 FILE 存在且是一个目录则为真。 [ -e FILE ] 如果 FILE 存在则为真。
[ -f FILE ] 如果 FILE 存在且是一个普通文件则为真。 [ -g FILE ] 如果 FILE 存在且已经设置了SGID则为真。 [ -h FILE ] 如果 FILE 存在且是一个符号连接则为真。 [ -k FILE ] 如果 FILE 存在且已经设置了粘制位则为真。 [ -p FILE ] 如果 FILE 存在且是一个名字管道(F如果O)则为真。 [ -r FILE ] 如果 FILE 存在且是可读的则为真。 [ -s FILE ] 如果 FILE 存在且大小不为0则为真。
[ -t FD ] 如果文件描述符 FD 打开且指向一个终端则为真。 [ -u FILE ] 如果 FILE 存在且设置了SUID (set user ID)则为真。 [ -w FILE ] 如果 FILE 如果 FILE 存在且是可写的则为真。 [ -x FILE ] 如果 FILE 存在且是可执行的则为真。 [ -O FILE ] 如果 FILE 存在且属有效用户ID则为真。 [ -G FILE ] 如果 FILE 存在且属有效用户组则为真。 [ -L FILE ] 如果 FILE 存在且是一个符号连接则为真。
[ -N FILE ] 如果 FILE 存在 and has been mod如果ied since it was last read则为真。
[ -S FILE ] 如果 FILE 存在且是一个套接字则为真。
[ FILE1 -nt FILE2 ] 如果 FILE1 has been changed more recently than FILE2,
[ -z STRING ] “STRING” 的长度为零则为真。
142 bash -x调试脚本 并打印每行输出的信息 -v在执行前显示脚本
143 read -s 标准输入不会打印在屏幕上
144 if [$XX -eq 100]如果XX=100 if [$XX -gt 100]如果XX大于100 if [$XX -lt 100]如果XX小于100
145
-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"))
146
1.break
有时候我们想在某种条件出现的时候终止循环而不是等到循环条件为false才终止。
这是我们可以使用break来完成。
break用于完全结束一个循环,跳出循环体执行循环后面的语句。
2.continue
continue和break有点类似,区别在于continue只是终止本次循环,接着还执行后面的循环,break则完全终止循环。
可以理解为continue是跳过当次循环中剩下的语句,执行下一次循环
。
147,declare [-aixr] -a 数组 -i整数 -x 环境变量 -r readonly
148 变量的大小写转换 tr '[A-Z]' '[a-z]'<<<$PATH 将PATH变量大写转成小写
149 脚本中 $( )表示显示某个命令的值 $(( )) 表示某个参数的值 例如:$(x-1)为x-1命令 而$$((x-1))为x-1的值
150 read -n 按文件描述符号读取数据。
151 exec < &-关闭文件描述符
152 sed和awk学习
sed -n 只有经过sed处理的行才会显示出来
-i 直接修改内容而不输出
-f指定由sed组成的脚本
d删除 例子 sed '50,$d' 删除第50行到最后一行
a增加 例子 sed '$a<End of>' xxx.txt 删除某行 a只能在某行之后添加
sed'1.2a\zjnxxxx' example.txt
c 更改 例子 sed '1,2c\zjzzzxxx' example.txt 将example里的第一行和第二行改为zjnzzzzzxxx
s替换 例子 sed s/bi/hah/g example.txt 将bi替换成hah /g表示全局替换 /n表示替换每行出现的第几个
/p 打印模式,也就是复制2份
匹配zjn再加 aaaa sed '/zjn/a\aaaa' info.txt
i 表示在某行之前插入,同上可以进行匹配。 在第三行之前插入 sed '3i\zjnlovetyy' info.txt sed '3i\zjnlovetyy' info.txt
c更改文件中指定的行,例sed '1c<Change line> info.txt
sed '/<Change line>/czjn' info.txt
p是打印 sed -n '4p' XXX 打印第4行。
r是将文件中的一行输入另一个文件中
-e将下一个参数解释为sed指令 例sed -n -e '1w example.txt' -e '$w example.txt' techclass.txt
上个例子将techclass.txt写入 example.txt的第一行和最后一行
w将模式空间的内容写入
sed 中必须要用“”来引起来shell的变量。
153,内核的相关知识:
Vmlinuz表示的是内核
initrd 初始的内存的磁盘
154 basename 取得文件名 dirname 取得路径名
155 单引号,双引号等的区别
一、单引号和双引号
首先,单引号和双引号,都是为了解决中间有空格的问题。
因为空格在linux中时作为一个很典型的分隔符,比如string1=this is astring,这样执行就会报错。为了避免这个问题,因此就产生了单引号和双引号。他们的区别在于,单引号将剥夺其中的所有字符的特殊含义,而双引号中的'$'(参数替换)和'`'(命令替换)是例外。所以,两者基本上没有什么区别,除非在内容中遇到了参数替换符$和命令替换符`。
所以下面的结果:
num=3
echo ‘$num’
$num
echo “$num”
3
所以,如果需要在双引号””里面使用这两种符号,需要用反斜杠转义。
二、反引号``
这个东西的用法,我百度了一下,和$()是一样的。在执行一条命令时,会先将其中的 ``,或者是$() 中的语句当作命令执行一遍,再将结果加入到原命令中重新执行,例如:
echo `ls`
会先执行 ls 得到xx.sh等,再替换原命令为:
echo xx.sh
最后执行结果为
xx.sh
那么,平时我们遇到的把一堆命令的执行结果输出到一个变量中,需要用这个命令替换符括起来,也就可以理解了。
这里又涉及到了一个问题,虽然不少系统工程师在使用替换功能时,喜欢使用反引号将命令括起来。但是根据POSIX规范,要求系统工程师采用的是$(命令)的形式。所以,我们最好还是遵循这个规范,少用``,多用$()
三、小括号,中括号,和大括号的区别
那么,下面又涉及到了一个问题,就是小括号,中括号,和大括号的区别。
先说说小括号和大括号的区别。这两者,实际上是“命令群组”的概念,也就是commandgroup。
( ) 把 command group 放在subshell去执行,也叫做 nested sub-shell。
{ } 则是在同一个 shell 內完成,也称为 non-namedcommand group。
所以说,如果在shell里面执行“函数”,需要用到{},实际上也就是一个命令群组么。
不过,根据实测,test=$(ls -a)可以执行,但是test=${ls–a}语法上面是有错误的。估计也和上面所说的原因有关。
另外,从网上摘录的区别如下:
A,()只是对一串命令重新开一个子shell进行执行
B,{}对一串命令在当前shell执行
C,()和{}都是把一串的命令放在括号里面,并且命令之间用;号隔开
D,()最后一个命令可以不用分号
E,{}最后一个命令要用分号
expr 读入变量的值
awk 学习 Begin End
awk 'BEGIN { i=0 } { i++ } END{ print i}' filename
awk "BEGIN { i=0 } { i++ } END{ print i }" filename
awk的参数
NR:表示记录数量,在执行过程中对应于当前行号。
NF:表示字段数量,在执行过程中对应于当前行的字段数。
$0:这个变量包含执行过程中当前行的文本内容。
$1:这个变量包含第一个字段的文本内容。
$2:这个变量包含第二个字段的文本内容。
要打印出从M行到N行这个范围内的所有文本,使用下面的语法:
$ awk 'NR==M, NR==N' filename
158 printf 函数
%a 浮点数、十六进制数字和p-记数法(C99)
%A 浮点数、十六进制数字和p-记法(C99)
%c 一个字符(char)
%C 一个ISO宽字符
%d 有符号十进制整数(int)(
%ld、%Ld:长整型数据(long),%hd:输出短整形。
)
%e 浮点数、e-记数法
%E 浮点数、E-记数法
%f 单精度浮点数(默认float)、十进制记数法(
%.nf 这里n表示精确到小数位后n位.十进制计数
)
%g 根据数值不同自动选择%f或%e.
%G 根据数值不同自动选择%f或%e.
%i 有符号十进制数(与%d相同)
%o 无符号八进制整数
%p 指针
%s 对应字符串char*(
%s == %hs == %hS 输出 窄字符
)
%S 对应宽字符串WCAHR*(
%ws == %S 输出宽字符串
)
%u 无符号十进制整数(unsigned int)
%x 使用十六进制数字0f的无符号十六进制整数
%X 使用十六进制数字0f的无符号十六进制整数
%% 打印一个百分号
159 用tee来实现。举个例子:要在终端中打印 stdout,同时将它重定向到一个文件中,那么可以这样使用tee
160 "$*" 被扩展成 "$1c$2c$3",其中c是IFS的第一个字符。"$@" 要比"$*"用得多。由于 "$*"将所有的参数当做单个字符串,因此它很少被使用
161
访问时间(-atime):用户最近一次访问文件的时间。
修改时间(-mtime):文件内容最后一次被修改的时间。
变化时间(-ctime):文件元数据(例如权限或所有权)最后一次改变的时间。
162
xargs命令把从stdin接收到的数据重新格式化,再将其作为参数提供给其他命令
xargs -n 将前面传来的参数按照一定格式进行排列
-d选项为输入指定一个定制的定界符
163
$ echo "HELLO WHO IS THIS" | tr 'A-Z' 'a-z' 将字符的大写转换成小写。
164 tr -d
$ echo "Hello 123 world 456" | tr -d '0-9'
Hello world
# 将stdin中的数字删除并打印出来
tr -c 找出补集 例$ echo hello 1 char 2 next 4 | tr -d -c '0-9 \n'
1 2 4
tr -s 去除
例echo "GNU is not UNIX. Recursive right ?" | tr -s ' '
GNU is not UNIX. Recursive right ?
165
md5sum filename > file_sum.md5
166 r-- = 4
-w- = 2
--x = 1
167 数组学习,对于关联数组 echo ${!array[@]} 显示其索引
168 diff 查看两个文件的区别
169head 命令读取文件的头部 tail 读取文件的尾部 tail -f 可以实时读取新的文本
例如tail -f /var/log/messages读取新增的日志。
170 wc 统计行数
171tree -h 可以显示行数
172
173,
$ grep "test_function()" . -R -n
./miscutils/test.c:16:test_function();
174
cut -f 2,3 filename
显示第2列第3列
175
空格在sed中怎样匹配?
sed 's/^[][ ]*//g' filename 移除开头的空格。
176
命令:curl
在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具。
语法:# curl [option] [url]
常见参数:
-A/--user-agent <string> 设置用户代理发送给服务器
-b/--cookie <name=string/file> cookie字符串或文件读取位置
-c/--cookie-jar <file> 操作结束后把cookie写入到这个文件中
-C/--continue-at <offset> 断点续转
-D/--dump-header <file> 把header信息写入到该文件中
-e/--referer 来源网址
-f/--fail 连接失败时不显示http错误
-o/--output 把输出写到该文件中
-O/--remote-name 把输出写到该文件中,保留远程文件的文件名
-r/--range <range> 检索来自HTTP/1.1或FTP服务器字节范围
-s/--silent 静音模式。不输出任何东西
-T/--upload-file <file> 上传文件
-u/--user <user[:password]> 设置服务器的用户和密码
-w/--write-out [format] 什么输出完成后
-x/--proxy <host[:port]> 在给定的端口上使用HTTP代理
-#/--progress-bar 进度条显示当前的传送状态
177,
host和nslookup 列出网站的DNS解析
178
ping -c Num 可以列出后面列出的条数。
179
wait 待指令都完成后退出
180
端口转发学习
转发方式1,本地转发:(在client端)
ssh -L <local port>:<remote host>:<remote port> <SSH hostname>
例:ssh -L 8000:localhost:80 zjn@192.168.44.213
在192.168.44.200上将213的端口转发至此 用213的zjn账号登陆
转发方式2,
远程端口转发:(在server端)
例:ssh -R 8000:localhost:80
zjn@192.168.44.200
在213上输入此命令 (用途在