选择结构语句case
case SWITCH in
value1)
statement
...
;;
value2)
statement
...
;;
*)
statement
...
;;
esac
w和who等几个命令
w:显示谁登陆了,并且正在做什么
who:显示谁登陆了 -H 打印行标题栏
sleep:延迟一定时间
whoami:打印当前登陆用户
last:显示/var/log/wtmp文件,显示用户登录历史及系统重启历史
-n #: 显示最近#次的相关信息
lastb,/var/log/btmp文件,显示用户错误的登录尝试
-n #:
lastlog: 显示每一个用户最近一次的成功登录信息;
-u USERNAME: 显示特定用户最近的登录信息
basename
$0: 执行脚本时的脚本路径及名称
hostname: 显示主机名 hostname modys 更改主机名为modys
random:生成随机数 0-32768
随机数生成器:熵池(计算机本身是可预测的系统,因此,用计算机算法不可能产生真正的随机数。但是机器的环境中充满了各种各样的噪声,如硬件设备发生中断的时间,用户点击鼠标的时间间隔等是完全随机的,事先无法预测。Linux内核实现的随机数产生器正是利用系统中的这些随机噪声来产生高质量随机数序列。
内核维护了一个熵池用来收集来自设备驱动程序和其它来源的环境噪音。理论上,熵池中的数据是完全随机的,可以实现产生真随机数序列。为跟踪熵池中数据的随机性,内核在将数据加入池的时候将估算数据的随机性,这个过程称作熵估算。熵估算值描述池中包含的随机数位数,其值越大表示池中数据的随机性越好。)--来自百度百科
/dev/random:熵池中取完会中断,需要填充
/dev/urandom:熵池中取完不会中断,用软件模拟生成随机数,不会中断、阻塞用户进程
facl文件系统访问控制列表
FACL:Filesystem Access Control List
利用文件扩展保存额外的访问控制权限
getfacl 获取权限
setfalc -m u:UID:perm FILE/DIR -m g:GID:perm FILE/DIR设定权限用户或组
setfacl -x u:UID FILE/DIR -x g:GID FILE/DIR 取消权限
减肥ing
上学期间那叫一个身材均匀,那叫一个帅,嗯,自夸一下。
自从上班之后,天天坐办公室,几年下来,这胖的几十斤也太厉害了,必须减肥,已经2天。
节食+运动,一个月下来看看能够减掉多少!!!
Linux特殊权限详解
SUID: 运行某程序时,相应进程的属主是程序文件自身的属主,而不是启动者;
chmod u+s FILE
chmod u-s FILE
如果FILE本身原来就有执行权限,则SUID显示为s;否则显示S;
SGID: 运行某程序时,相应进程的属组是程序文件自身的属组,而不是启动者所属的基本组;
chmod g+s FILE
chmod g-s FILE
Sticky: 在一个公共目录,每个都可以创建文件,删除自己的文件,但不能删除别人的文件;
chmod o+t DIR
chmod o-t DIR
umask:3755 代表sgdi和sticky 755
umask: suid=4 sgid=2 sticky=1
特殊权限用法:5个人共同开发一个项目project,建立一个目录,把5个用户加入附加组develop,这样个人建立的文件还是自己的属主和数组,不能相互修改;可以设置project超级权限组sgid,这样建立的文件都属于develop,弊端是可以任意删除别人的文件;然后可以设置sticky+t,可以任意访问修改文件,但不能删除别人的文件
find命令详解笔记
find、locate:查找文件命令
locate:非实时,模糊匹配,速度快,查找是根据全系统文件数据库进行的;如果刚装系统用locate查找文件,需使用updatedb, 手动生成文件数据库才可使用
find:实时、精确、支持众多查找标准、遍历指定目录中的所有文件完成查找,速度慢
find 查找路径 查找标准 查找到以后的处理运作 (find后必须先跟路径,否则报错)
查找路径:默认为当前目录
查找标准:默认为指定路径下的所有文件
处理运作:默认为显示
匹配标准:
-name 'FILENAME':对文件名作精确匹配
文件名通配:
*:任意长度的任意字符
?
[]
-iname 'FILENAME': 文件名匹配时不区分大小写
-regex PATTERN:基于正则表达式进行文件名匹配
-user USERNAME: 根据属主查找
-group GROUPNAME: 根据属组查找
-uid UID: 根据UID查找
-gid GID: 根据GID查找
-nouser:查找没有属主的文件
-nogroup: 查找没有属组的文件
-type :f 普通文件 d c b l p s
-size [+|-] #k #M #G
find . -siez +1k -type f #查找当前目录下大于1k的文件
组合条件:
-a 且
-o 或
-not 非 等同 !
find . ! \( -user modys -a -type d \) #查找当前目录下**不是**属主为modys并且为目录的文件
-mtime 修改时间 天 [+|-]#
-ctime 改变时间 天
-atime 访问时间 天
find /home/modys -mtime +5 -name "*.txt" #查找modys目录下5天之前修改的txt文件
-mmin 修改时间 分钟 [+|-]#
-cmin 改变时间 分钟
-amin 访问时间 分钟
find . /home/modys -amin +60 #查找modys目录下60分钟之前访问的所有文件
-perm MODE:精确匹配
/MODE: 任意一位匹配即满足条件
-MODE: 文件权限能完全包含此MODE时才符合条件
find . -perm -002 -type f #查找当前目录下其他用户有可执行权限的普通文件
查找后可执行的动作:
-print: 显示
-ls:类似ls -l的形式显示每一个文件的详细
-ok COMMAND {} \; 每一次操作都需要用户确认
-exec COMMAND {} \;
find . -perm -002 -type f -exec mv {} {}.py \; #查找出来后并且重命名为.py
find . -name '*.sh' -a -perm -111 ok chmod o-x {} \; #找出当前目录下所有.sh结尾并且都有执行权限的文件,然后去掉其他用户的执行权限
find . -name '*.sh' -a -perm -111 | xargs chmod o-x #命令效果同上
Linux bash脚本编程(四)
组合测试条件
-a: 与关系
-o: 或关系
!: 非关系
if [ $# -gt 1 -a $# -le 3 ] 等同于 if [ $# -gt 1 ] && [ $# -le 3 ]
a=a+$b 等于 a+=$b
a=a-$b 等于 a-=$b
...
let a+=1 等于 a++ (必须是1才能是++)
let a-=1 等于 a-- (必须是1才能是--)
declare命令用于声明shell变量
+/- "-"可用来指定变量的属性,"+"则是取消变量所设的属性。
-f 仅显示函数。
r 将变量设置为只读。
x 指定的变量会成为环境变量,可供shell以外的程序来使用。
i [设置值]可以是数值,字符串或运算式。
找出1-100以内奇数、偶数的和
#!/bin/bash
#
declare -i evenum=0
declare -i oddnum=0
for I in {1..100};do
if [ $[$I%2] -eq 0 ];then
let evenum+=$I
else
let oddnum+=$I
fi
done
echo "even sum is:$evenum"
echo "odd sum is:$oddnum"
vim查找替换分屏详解
VIM模式省略,基本命令带过...
插入:i、a、o;I、A、O
保存、退出:q、wq、!q、w、!q、wq=x
移动:h、j、k、l #h一次移动几行
w: 移至下一个单词的词首 #w 一次移动几个单词
e: 跳至当前或下一个单词的词尾
b: 跳至当前或前一个单词的词首
0: 绝对行首
^: 行首的第一个非空白字符
$: 绝对行尾
G:跳转至第#行;
G:最后一行
p:粘贴下
P:粘贴上
y:复制
u:撤销 最多30次 #u 撤销N次
r:替换单个
R:替换多个
.:重复前一次编辑
末行模式下,直接给出行号即可
Ctrl+f: 向下翻一屏
Ctrl+b: 向上翻一屏
Ctrl+d: 向下翻半屏
Ctrl+u: 向上翻半屏
x: 删除光标所在处的单个字符
x: 删除光标所在处及向后的共#个字符
d命令跟跳转命令组合使用
dw, #de, #db
dd: 删除当前光标所在行
dd: 删除包括当前光标所在行在内的#行
末行模式下:
StartADD,EndADDd
.: 表示当前行
$: 最后一行
+#: 向下的#行
:.,+5d #删除当前后和后5行
:.,$d 删除当前行到最后一行
:2,5d 删除2到5行
Ctrl+r:撤消最近一次撤消操作
可视化模式:
v: 按字符选取
V:按矩形选取
查找
/PATTERN ?PATTERN n,N翻页
在末行模式下使用s命令
s/PATTERN/string/g g全部 i不区分大小写
ADDR1,ADDR2s#PATTERN#string#gi 开始和结束中间内容查找替换
使用vim编辑多个文件
vim FILE1 FILE2 FILE3
:next 切换至下一个文件
:prev 切换至前一个文件
:last 切换至最后一个文件
:first 切换至第一个文件
退出
:qa 全部退出
分屏显示一个文件
Ctrl+w, s: 水平拆分窗口
Ctrl+w, v: 垂直拆分窗口
在窗口间切换光标:
Ctrl+w, ARROW
:qa 关闭所有窗口
分窗口编辑多个文件
vim -o : 水平分割显示
vim -O : 垂直分割显示
将当前文件中部分内容另存为另外一个文件
末行模式下使用w命令
:w
:ADDR1,ADDR2w /path/to/somewhere # 1,10w /root/abc.txt 把当前文件1-10行写入abc.txt 如果有内容就覆盖
将另外一个文件的内容填充在当前文件中
:r /path/to/somefile # :r /etc/issue 把issue内容填充到当前文件光标下方
跟shell交互
:! COMMAND
vim 将文件所有行合并到一行
在 Normal Mode下执行:
ggvGJ
[
gg 用于跳到行首
v 转换成 visual 模式
G 跳到最后一行
J 合并行
]
sed命令详解
sed命令学习
sed:用于过滤和转换文本的流编辑器(Stream Editor);行编辑器
sed: 模式空间
默认不编辑原文件,仅对模式空间中的数据做处理;处理结束后,将模式空间打印至屏幕;
选项:
sed [options] 'AddressCommand' file ...
-n: 静默模式,不再默认显示模式空间中的内容
-i: 直接修改原文件(慎用)
-e SCRIPT -e SCRIPT:可以同时执行多个脚本
-f /PATH/TO/SED_SCRIPT
sed -f /path/to/scripts file
-r: 如果使用扩展正则表达式需要加-r
Address:
1、StartLine,EndLine
比如1,100
$:最后一行
2、/RegExp/
/^root/
3、/pattern1/,/pattern2/
第一次被pattern1匹配到的行开始,至第一次被pattern2匹配到的行结束,这中间的所有行
4、LineNumber
指定的行
5、StartLine, +N
从startLine开始,向后的N行;
命令Command
d: 删除符合条件的行;
sed '1,12d' /etc/inittab #删除1-12行内容,显示剩余行
sed '5,$d' /etc/inittab #删除5到最后一行,显示1-4行内容
p: 显示符合条件的行;
sed -n '1,12p' /etc/inittab #要加-n,否则1-12行的内容会显示两次,其他内容一次
a \string: 在指定的行后面追加新行,内容为string
\n:可以用于换行
sed '3,4a \This is new word!' /etc/grub.conf #在第3和4行后面添加内容This is new word!
sed '7a \#This is new word!\nThis is second line!' /etc/grub.conf #在第7行后面添加This is new word!并且换行添加his is second line!
i \string: 在指定的行前面添加新行,内容为string #用法同上
r FILE: 将指定的文件的内容添加至符合条件的行处
sed '4r /etc/issue' /etc/fstab #将/etc/issue内容添加到/etc/fstab的第4行后面(也就是第5行开始)并显示出来
sed '$r /etc/issue' /etc/fstab #将/etc/issue内容添加到/etc/fstab的最后一行显示出来
w FILE: 将地址指定的范围内的行另存至指定的文件中;
sed '/OS/w /root/a.txt' /etc/issue #把issue文件中包含OS的行,写到a.txt
sed '2,$w /root/a.txt' /etc/issue #把issue文件中第2行到最后一行内容,写到a.txt
s/pattern/string/修饰符: 查找并替换,默认只替换每行中第一次被模式匹配到的字符串
修饰符
g: 全局替换
i: 忽略字符大小写
&: 引用模式匹配整个串
s/content1/content2/g = s#content1#content2#g = s&content1&content2&g
sed 's/i..t/&TTT/g' /etc/inittab #查找inittab文件里全部i..t的内容,并且替换为后面加TTT
sed 's#\(i..t\)#\1TTT#g' /etc/inittab #同上
sed 's#\(/.*t/\)#\1TTTTT#g' /etc/inittab 查找inittab文件里全部/.*/的内容,并且替换为后面加TTT
#sed命令是行编辑器
删除/etc/grub.conf文件中行首的空白符;
sed 's#^[[:space:]]*##g' /etc/grub.conf
替换/etc/inittab文件中"id:3:initdefault:"一行中的数字为5;
sed 's@\(id:\)[0-9]\(:initdefault:\)@\15\2@g' /etc/inittab
启辰减震漏油
启辰减震漏油
本人的小破车是15年5月买的,大概过了一年的时间,右前减震轻微漏油,当时去4S店维修,想让换个新的,谁知道4S店说根本不漏油。。。
中间保养车的时候也看过,没想到还是说不漏油,到17年底大概去看了4次,后来说是轻微漏油,而且还打过厂家投诉都不管用,4S店说是渗油,而不是漏油,更换新的减震不达标,我了个艹,减震已经报废了,过减速带或者坑洼的地方直接到底,这还不达标!!!
在今年五一的时候我重新去4S店(3年质保期快过),最后找人说了才给更换,当时没货,厂家订货,然后14号去更换的。
顺便记录一下,在更换减震那天,当地下的一段时间大雨,差不多暴雨了,时间很短,没想到已经淹了很多地方,桥洞底下都是积水,车辆过去绝对淹死,我路过的地方有两处快淹积水达到20CM,有一处排水道井口在往外喷水,井盖都已经顶到一边去,这算是什么情况,能不能算是偷工减料,还是豆腐渣工程!