Linux命令笔记[七]

修改 ssh 端口
sudo vi /etc/ssh/sshd_config
修改port 22 为 port 端口号
sudo /etc/init.d/ssh restart
ssh -p 端口号 root@10.6.0.1

git add -u 只添加本地更改的,不添加新文件
git add -A 添加所有不在忽略列表里面的,包括更改与新文件

ubuntu下安装root根证书方法,假设要将证书foo.crt导入到系统中。
1.创建文件夹用来装我们导入的证书
sudo mkdir /usr/share/ca-certificates/extra
2.将证书文件放到该文件夹中
sudo cp foo.crt /usr/share/ca-certificates/extra/foo.crt
3.配置crt文件的相对路径 Add the ‘.crt’ file’s path relative to /usr/share/ca-certificates to /etc/ca-certificates.conf
sudo dpkg-reconfigure ca-certificates
4.更新安装的ca证书,以生效
sudo update-ca-certificates

sublime 将tab缩进成空格配置:
“translate_tabs_to_spaces”: true,

制作ubuntu启动盘的时候,启动出现“bootmgt is missing”的错误,解决办法是将U盘格式化成fat32格式的,而不是nfts格式。

ZIP文件乱码,http://forum.ubuntu.org.cn/viewtopic.php?f=122&t=301951 六楼解决办法。

im-switch,调出来input method switcher,选择fcitx作为系统默认的中文输入法。注销系统后就可以使用fcitx了。

Disable the ALT+Right click Ubuntu 12.04:
went to the compiz configuration settings >> general options >> Keybindings.
Looked for the “Window Menu” and changed to super+alt+button4 and did work!

多线程下载工具 axel: axel -n 50 url,使用50个并发下载。会比wget等快得多。

安装jdk:

wget -c http://download.oracle.com/otn-pub/java/jdk/7u65-b17/jdk-7u65-linux-x64.tar.gz
sudo tar zxvf ./jdk-7u65-linux-x64.tar.gz -C /usr/lib/jvm
cd /usr/lib/jvm
sudo mv jdk1.7.0/ java-7-sun

vim ~/.bashrc
export JAVA_HOME=/usr/lib/jvm/java-7-sun
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

source ~/.bashrc 或 . .bashrc

sudo update-alternatives –install /usr/bin/java java /usr/lib/jvm/java-7-sun/bin/java 300
sudo update-alternatives –install /usr/bin/javac javac /usr/lib/jvm/java-7-sun/bin/javac 300
sudo update-alternatives –install /usr/bin/jar jar /usr/lib/jvm/java-7-sun/bin/jar 300
sudo update-alternatives –install /usr/bin/javah javah /usr/lib/jvm/java-7-sun/bin/javah 300
sudo update-alternatives –install /usr/bin/javap javap /usr/lib/jvm/java-7-sun/bin/javap 300

sudo update-alternatives –config java

useradd -m -s /bin/bash username,-m会自动创建home目录。
passwd username 修改用户username有密码
新用户命令提示符只有一个“$”,这是shell的问题,在新添用户时,需要手动地设置默认shell, useradd -s /bin/bash new user

户不能使用sudo ,解决:
sudo visudo
your_user_name ALL=(ALL) ALL #最后一行添此句

或直接添加到sudo组,sudo usermod -aG sudo ,取消 sudo gpasswd -d sudo,只是取消sudo权限,并不会删除用户。

netstat -nplt 查看到外开放的端口及相关程序。 sudo netstat -apn|grep 9001 加sudo与不加,结果是不一样的。

nl 能够显示行号的命令。在阅读脚本或代码时,这个命令应该非常有用,如:nl wireless.sh | head

ssh user@server bash < /path/to/local/script.sh 在远程机器上运行一段脚本。这条命令最大的好处就是不用把脚本拷到远程机器上。
ssh user@host cat /path/to/remotefile | diff /path/to/localfile – 比较一个远程文件和一个本地文件

curl ifconfig.me 当你的机器在内网的时候,可以通过这个命令查看外网的IP。

通过python的json.tool模块来格式化json,如: curl http://example.com/test.json | python -mjson.tool,有一个问题就是中文会显示成unicode编码。解决办法: 在%python%/lib/json/tool.py中,默认情况下只支持ascii,增加ensure_ascii=False,修改tool.py如下 json.dump(obj, outfile, sort_keys=True, indent=4, ensure_ascii=False) vim -x filename 编辑并加密文件

pip安装PIL库时,不支持jpeg sudo apt-get install libjpeg libjpeg-dev libfreetype6 libfreetype6-dev zlib1g-dev
然后:
# ln -s /usr/lib/`uname -i`-linux-gnu/libfreetype.so /usr/lib/
# ln -s /usr/lib/`uname -i`-linux-gnu/libjpeg.so /usr/lib/
# ln -s /usr/lib/`uname -i`-linux-gnu/libz.so /usr/lib/
如果要装在virtualenv里面的话就先 cd $VIRTUAL_ENV/lib,然后ln -s
全局安装的话 pip install -U PIL,-U表示重新编译
In Ubuntu 14.04 try: sudo ln -s /usr/include/freetype2 /usr/local/include/freetype

解决挂载samba后无可写权限问题:sudo mount -t cifs //192.168.2.80/kyle /home/kyle/kyleshare -o username=kyle,password=test,uid=kyle,gid=users,file_mode=0640,dir_mode=0750,iocharset=utf8

配置git diff用特定的编辑器: git config –global diff.tool vimdiff
或者用有界面的meld git config –global diff.tool meld git config –global difftool.prompt No

将文本顺序倒置输出,tac file.txt,或 tail -r file.txt

动态域名解析免费服务:https://freedns.afraid.org/,可以直接用url请求来绑定ip

ubuntu修改dns地址。vim /etc/network/interfaces,添加dns-nameservers 8.8.8.8,再 vim /etc/resolv.conf,修改 nameserver 8.8.8.8。

mysql 复制一个数据库为另一个数据库:mysqldump -h [server] -u [user] -p[password] db1 | mysql -h [server] -u [user] -p[password] db2

ipv6服务 miredo启动失败,ifconfig中没有teredo,查看日志 tail /var/log/syslog ,发现:No reply from Teredo server。
google后发现修改 /etc/miredo.conf 中的ServerAddress,但是也没用。最后发现是dns服务器不支持ipv6,把dns换成 8.8.8.8就好了。

redis删除所有指定key:redis-cli keys search.*|awk ‘{print $1}’|xargs -i redis-cli del {}

bash编程中,echo一大段文本到文件中: cat > file.tmp <<‘endmsg’ script goes here… endmsg

git 忽略 submodule项目的更改,在.gitmodules文件中添加 ignore = all (https://www.kernel.org/pub/software/scm/git/docs/gitmodules.html)
例如: [submodule “bundle/fugitive”] path = bundle/fugitive url = git://github.com/tpope/vim-fugitive.git ignore = all

ngrep 监测http请求:sudo ngrep -q -d eth0 -W byline host api.xxxxoooo.com and port 80

搭gitlab的时候,ssh keys认证不了,原因为 .ssh 目录 及 .ssh/authorized_keys 文件的权限设置不正确,分别为 775 和 644就行了。 >>>/home/git/gitlab$ sudo -u git -H bundle exec rake gitlab:shell:setup RAILS_ENV=production

sudo 不用输密码:
sudo visudo
把/etc/sudoers(自动打开)裡面最後一行
%admin ALL=(ALL)ALL
改為
%admin ALL=(ALL) NOPASSWD: NOPASSWD: ALL

sudo urlsnarf -i wlan0 抓取访问的url请求

用awk取显示出来的第二行:
grep -o “PHPSESSID=.\{26\}” cookies.txt | awk ‘NR==2 {print}’

id -u username 获取系统用户username的用户id
>>>id -u nobody
65534

grep -B 3 -A 2 “test” test.txt -B显示前3行,-A显示后2行

计算文件各种hash值,生成ed2k,magnet,torrent等,命令: rhash

mysql所有用户登陆都报错:ERROR 1045 (28000): Access denied for user,解决:

killall mysqld
/usr/sbin/mysqld –skip-grant-tables
update mysql.user set password=password(“123456”) where user = ‘root’;

通过ip查找其mac地址,先ping下ip,再arp -a ip

notify-send命令可以在桌面上打印一个通知,弹出一个框之类的。

计算文件score第四列所有数字的总和:
awk ‘{s+=$4} END {print s}’ score

将以下文本
csharp,
php,
javascript,
pascal,
objectc
中,pascal前一行javascript最后的逗号改成分号,用sed来实现: sed ‘/,$/{N; s/javascript,\npascal/javascript;\npascal/g}’ sed.txt
sed has three commands to manage multi-line operations: N, D and P

查看BT文件详细信息:transmission-show 1.torrent 或 btshowmetainfo 命令
python下面,apt-get install python-libtorrent

通过wget命令递归下载apache目录列出的所有指定后缀文件,wget -e robots=off -r -nd -np -A mp4 http://ia600409.us.archive.org/27/items/MIT18.01JF07
具体参数可以到 http://explainshell.com/ 查询。

ssh长时间连接后,被断开连接,死在那里,ctrl+c都没用,只能强关窗口,有一招,用 ~. 可以优雅地断开连接。

强制占用大量cpu 的命令: dd if=/dev/zero of=/dev/null

清除iptables规则:
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

将图片缩放,然后裁减成正方形:
convert 2.jpg -resize 100×100^ -gravity Center -crop 80×80+0+0 +repage square_2.jpg

ubuntu下挂载windows下的盘: sudo mount -t ntfs -o nls=utf8,umask=0222 /dev/hdb1 /media/c

今天遇到重启nginx的时候,一直挂死在 Restarting nginx,没有任何输出,后来发现是有配 proxy_pass http://imgproxy.meilapp.com; 解析这个域名一直解析不到的原因,可以设置一个hosts来快速解决。

用dd命令克隆硬盘: dd if=/dev/sda of=/dev/sdb bs=100M
监控进度,打开新的终端:sudo kill -USR1 $(pgrep ^dd),完后,在原来的终端下面就会输出进度信息。
每隔5秒监控一下:watch -n5 ‘sudo kill -USR1 $(pgrep ^dd)’
dd之后,用rsync同步文件夹:rsync -arh /root/rpmpkgs /tmp/backups/

用nc来传大文件,比ssh要快,比如将server1 传到 server2 上面去,先在 server2打开一个端口:
server2$ nc -l -p 12345 | tar xvzf –
再在server1 上面将要传的文件通过nc发送到目标机器的指向端口上,再通过tar解压:
server1$ tar cvzf – myfile.myd | nc -q 1 server2 12345

测试硬盘读写性能: sudo hdparm -Tt /dev/sda

只打印偶数行:sed -n 2~2p filename, 奇数行:sed -n 1~2p filename
将文本中的换行合并,用逗号连接 : cat q2 | head -n 100 | tr “\n” “,”

vi插入当前行号 :%s/^/\=printf(‘%-4d’, line(‘.’))

pip更新包老是更新不到新版本上去,解决办法是找到env环境的build目录,把相应包的目录干掉,并用 pip install –upgrade –ignore-installed 。

解决 ssh 连接超时中断的问题,~/.ssh/config:
Host *
ServerAliveInterval 300
ServerAliveCountMax 2