Linux命令笔记[六]

shell对变量加减法:i=100 j=$[i-100]

svn更新的时候忽略指定目录:
svn update –set-depth exclude conf/

sshfs。
顾名思义,就是通过ssh隧道的方式,把别的主机上的目录,以fuse的方式,挂在到本机上。

curl -F “action=upload” -F “filename=@file.tar.gz”http://localhost/action.php
如果使用了-F参数,curl就会以 multipart/form-data 的方式发送POST请求。-F参数以name=value的方式来指定参数内容,如果值是一个文件,则需要以name=@file的方式来指定。

ab压力测试post参数:
ab -p post.txt -T “application/x-www-form-urlencoded” -n 10000 -c 1000 -C “PHPSESSID=c70d349634c566b1f5f5a12ef18860b9” https://kyle.ai/test.php
其中post.txt内容为post参数:pid=102&mx_id=1082,-T为指定content-type,注意post.txt内容最后不能有换行符,用echo -n或 tr -d ‘\n’来去掉

PHP DB 类库ezSQL

执行restart,apache会杀掉所有子进程,但是父进程不关闭,apache只是重新载入配置文件和打开日志文件,然后重新生成一系列子进程。
stop+start的效果是,杀掉包括主进程内的apache进程再重启。
这种区别使得有些环境配置在restart之后不会生效,比如对域名的解析。因此建议环境配置修改后使用stop+start重启apache。

curl伪造IP和来源:
curl -H “X-FORWARDED-FOR:8.8.8.8” -H “CLIENT-IP:8.8.8.8” http://127.0.0.1/fakeip.php

SHELL随机数
输出10以内的随机数
echo $(($RANDOM%10))
输出的结果在0~9之间,还可写成echo $((RANDOM%10))
awk ‘BEGIN{srand();print a=int(10*rand())}’是另一种方法,结果与上面一样
echo $RANDOM是输出随机数,但是没有范围

shell数组
A=(a b c def)
echo ${A[@]} 或者 echo ${A[*]} //取全部元素
echo ${A[0]} //取第一个元素
echo ${#A[@]} 或者 echo ${#A[*]} //取得数组元素的个数
A[3]=wenzizone.cn //将第三个元素重新赋值
判断v是否在数组ary中:
if [[ “${ary[@]}” =~ $v ]]

封装了一个shell提取json字段的方法:
pyjson()
{
echo $1|python -c ‘import json,sys;reload(sys);sys.setdefaultencoding(“utf-8”);obj=json.loads(sys.stdin.read().decode(“utf-8”));print “‘”$2″‘” in obj and obj[“‘”$2″‘”] or “”‘
}
用法:
txt=`cat res`
echo `pyjson “$txt” username` #pyjson+json字符串+要解析的字段 json字符串要用引号,防止里面有空格

vim快捷键 gd – 到达光标所在处函数或者变量的定义处

shell中提取html标记值,用html-xml-utils包中的hxselect命令。如:cat test |hxselect ‘#site-info a:nth-child(1)’ -c 2>/dev/null,匹配id为site-info下面的第一个a标记
有时候遇到这个错误:Input is not well-formed. (Maybe try normalize?)
如果遇到不标准的html,需要转换成xhtml来处理,用tidy命令:
cat test | tidy –output-xhtml yes –input-encoding utf8 –char-encoding utf8 –quiet yes 2>/dev/null | hxselect ‘#picid’
简单点:cat test | tidy 2>/dev/null | hxselect ‘#picid’
或者用hxnormalize命令:cat test | hxnormalize -x | hxselect ‘#picid’

grep非贪婪,在.*后面加\?,如,grep -o ‘value=”.*\?”‘,匹配到value=”3574″

FireFox中一个类似于httpWatch的网络监视插件叫HttpFox

vim多行编辑,先ctrl-v选中要编辑的行,然后按大写i,输入要插入的东西,最后ESC,选中的行将同时改变

vim命令的记录与回放
qa 开始将后续的命令记入寄存器a,输入完所有指令后,q 停止记录。然后要执行我们录下的命令,执行@a命令,如3@a,执行三次录入的命令集

查看文件状态,详细信息等: stat filename

知道BT下载的hash值,转换成磁力链接下载。
magnet:?xt=urn:btih:INFOHASH (replace INFOHASH with your info hash).

基本上下载工具的下载地址都是用base64编码的,用base64 -d命令解开就可以看到原始下载地址了。

计算字符串长度: echo ‘123456789abcdfghig’ | wc -L

ubuntu下录gif动画方法,sudo apt-get install imagemagick mplayer gtk-recordmydesktop,先用recordmydesktop录制一个视频,然后mplayer -ao null <video file name> -vo jpeg:outdir=output,转成表态图片,最后转成gif:convert output/* output.gif

统计最近用过的linux命令,流程:
从 history 命令中得到最近1000条命令。
删除每行的行号。
记录每一行中的命令。行首的第一个英文单词,以及管道后面的第一个英文单词,视为命令名称。
将得到的命令列表排序。
统计每个命令的出现次数,先以次数降序排列,再以命令名称升序排列。
history | sed “s#^\s\+[0-9]\+\s\+##g” | grep -oP “(?<=^|\|)\w+”|sort |uniq -c| sort -k1,1nr -k2

Chrome强制http定向到https方法,如google的搜索结果链接转成https的,在地址栏中输入: chrome://net-internals/,在HSTS选项卡下的Domain中输入你想要实现这个强制跳转的域名,最后勾选上Include subdomains,点击Add按钮

导入/导出/删除 chrome for linux 的个人证书和根证书
sudo apt-get install libnss3-tools
浏览所有证书 certutil -d sql:$HOME/.pki/nssdb -L
查看证书详情 certutil -d sql:$HOME/.pki/nssdb -L -n <证书别名>
导入个人证书 pk12util -d sql:$HOME/.pki/nssdb -i <证书文件>
导出个人证书 pk12util -d sql:$HOME/.pki/nssdb -n <证书别名> -o <导出文件>
删除证书 certutil -d sql:$HOME/.pki/nssdb -D -n <证书别名>
导入根证书 certutil -d sql:$HOME/.pki/nssdb -A -t “C,,” -n <证书别名> -i <证书文件>

使用sudo命令时出现警告:
sudo: 无法解析主机:chenming-Aspire-5830TG
解决办法,在/etc/hosts中添加127.0.1.1 chenming-Aspire-5830TG

vim复制内容到寄存器a命令 “ay
从寄存器a粘贴命令 “ap

uniq -c
uniq的作用是过滤重复的记录,只保留一行。c参数的作用,是在每行的开头添加该记录的出现次数

查看apache加载的所有模块: apachectl -t -D DUMP_MODULES

在终端下查看unicode编码
echo -e ‘{“status”:10,”msg”:”\u5df2\u7ecf\u7ed3\u675f\u4e86″}’

通过计算md5值来查找重复文件:
find . -type f -exec md5sum ‘{}’ ‘;’ | sort | uniq –all-repeated=separate -w 20
也可以通过文件大小来查找重复文件:
find . -type f -printf “%p – %s” | sort -nr -k3 | uniq -D -f1

测试电脑声音: speaker-test -c 5 -l 1 -t wav 会播放一段测试声音

清空文件内容而不删除文件本身: $ > filename

grep pattern -r –include=\*.{cpp,h} rootdir 过滤指定文件类型,如:grep ‘mx_salt’ -r –include=\*.php model

vim可以把代码按照当前的语法高亮转换成html文档。
方法如下:
如果需要把整个文档转成html,在命令模式下执行:
:TOhtml
如果只是需要转某几行代码(如30到42行),则执行:
:30,42TOhtml
这样生成的html复制到PPT上,不会换行,解决:
:%s/\(<span.*\)\n/\1<br>/g
上面的命令是找到html文件中以<span开始\n结尾的行,把这些行中的\n替换为<br>

用shell删除一个文件的前10行:
ex /root/file.txt << EOF
1,10d
wq
EOF

读取文件的 指定行/第N行 字符串 :sed -n 7p 1.txt

复制到指定目录,如果目录不存在,则创建: test -d “$d” || mkdir -p “$d” && cp file “$d”

#复制文件时,如果目标文件路径已经存在文件了
# If a file foo exists in the target, then…
cp -r –backup source target # rename foo → foo~
cp -r –backup=t source target # rename foo → foo.~1~ (or foo.~2~, etc)

检查开机自启动的服务:chkconfig,取消自启动:update-rc.d -f gearman-job-server remove,添加自启动:update-rc.d -f mysql defaults

ubuntu 12.04 eclipse代码提示弹出框,选中的颜色问题,Go into the Preferences (Window -> Preferences)
Choose General -> Appearance from the left menu
Uncheck the checkbox Use mixed fonts and colours for labels

vim中 :script_names查看已经加载的文件
vim的Bundle ‘godlygeek/csapprox’
是用来支持那些只能用在gui模式下面的colorscheme,配置的时候,必须把csapprox放在vim-easymotion前面。否则启动的时候加载不了
– Bundle ‘Lokaltog/vim-easymotion’
Bundle ‘godlygeek/csapprox’
+ Bundle ‘Lokaltog/vim-easymotion’

svn不支持http:
Unrecognized URL scheme for ‘http://xxxx.googlecode.com/svn/trunk’
version of svn in /usr/local that does not support http. If you use /usr/bin/svn it should work.

查看文件编码:file -i <filename>,vim中 set fileencoding

监测mongo脚本:https://github.com/mzupan/nagios-plugin-mongodb 如查看master:python check_mongodb.py -H 10.8.8.2 -A replica_primary -r shard1

linux查看进程对应的线程信息
ps -Lf pid
查看32768端口是哪个程序在占用, lsof -i:32768

按行切割文本文件, split -l 2 100.txt new_prefix,每个文件两行

cal命令可以用来显示公历(阳历)日历
cal 显示当前月份日历
cal 9 2012 显示指定月份的日历
cal -j 显示自1月1日的天数
cal -m 星期一显示在第一列

svn添加忽略文件夹或文件,svn propset svn:ignore dirname .
如果想要忽略多个对象,可以用换行来分开对象,可以用编辑器来编辑列表:
svn propedit svn:ignore .
如果要忽略的文件夹已经在svn版本里面了,则要先在svn中删除
svn rm –keep-local dirname

查看文件的mime类型,file -ib 20121124094332257.gif

convert 449×505.png -resize ‘200×300>’ resize.jpg 按大小200×300压缩图片大小,并按比例,长\宽最大不超过200\300,文档
http://www.imagemagick.org/script/command-line-processing.php#geometry

运行phpunit报错:
require_once(): Failed opening required ‘PHP/CodeCoverage/Filter.php’
解决:
sudo apt-get remove phpunit
sudo pear channel-discover pear.phpunit.de
sudo pear channel-discover pear.symfony-project.com
sudo pear channel-discover components.ez.no
sudo pear update-channels
sudo pear upgrade-all
sudo pear install –alldeps phpunit/PHPUnit
sudo pear install –force –alldeps phpunit/PHPUnit

将mkv转成mp4:avconv -i input.mkv -codec copy output.mp4

ubuntu下apt-get装软件的时候遇到下面错误:
E:Encountered a section with no Package: header, E:Problem with MergeList /var/lib/apt/lists/cn.archive.ubuntu.com_ubuntu_dists_natty_main_binary-i386_Packages
终端中输入以下两条命令:
sudo rm -rf /var/lib/apt/lists/*
sudo apt-get update

将程序添加到启动器里面去,新建一个以.desktop为后缀的配置文件,内容如:
[Desktop Entry]
Name=eclipse
Comment=eclipse
GenericName=eclipse
Exec=/home/chenming/eclipse/eclipse
Icon=/home/chenming/eclipse/icon.xpm
StartupNotify=true
Terminal=false
Type=Application
Categories=GNOME;GTK;Utility;
然后执行命令:
cd /usr/share/applications
sudo ln -s ~/eclipse/eclipse.desktop

写一行程序,可以用任何语言,当时间是2013年1月1日零时零分零秒时,打印:”Hello,New Year.”
expr `date -d “2013-1-1 00:00:00” +%s` – `date -d “now” +%s` | xargs -i sleep {} && echo ‘Hello,New Year.’