Pulpcode

捕获,搅碎,拼接,吞咽

0%

unix shell 命令行总结

我一直所理解的学习模式是:尝试 --> 实用熟练 --> 探究原理 --> 总结均衡,选择性忽略。

新公司的开发环境是mac,再一次从win开发回到了linux开发模式,好多命令基本都忘记了,是时候重新总结了。

这篇博客会不断更新,主要总结常用场景下的命令。

删除命令

将当前文件夹下的名字以mode结尾的文件夹全部删除(注意此命令结尾的写法)

find . -type d -name "*mode"  -exec rm -rf {} \;

查找进程

查开80号端口被哪个进程占用

netstat -anp | grep 80

查找一个叫tornado的进程

ps aux | grep tornado

关闭这个找到的进程

kill 进程号

日志操作

把filename里最尾部的内容显示在屏幕上,并且不断刷新,使你看到最新的文件内容。

tail -f filename

要指定从末尾20行开始读取notes文件:

tail -n 20 filename

输出m行到n行之间的文本

sed -ne 'm,n p' test.py

解压缩

.tar.gz 和 .tgz

解压:tar zxvf FileName.tar.gz
压缩:tar zcvf FileName.tar.gz DirName

查看系统

查看系统空间占用:

df -h

列出当前目录下所有文件夹所占空间

du -sh *

远程拷贝文件

拷贝本机至远程主机(目录)

本机目录:/home/administrator/test

远程目录:192.168.1.100/root

scp -r /home/administrator/test/ root@192.168.1.100:/root/

拷贝本机至远程主机(文件)

本机文件:/home/administrator/Desktop/old/driver/test/test.txt

远程目录:root@192.168.1.100:/root/

scp /home/administrator/Desktop/old/driver/test/test.txt

root@192.168.1.100:/root/

远程文件/文件夹下载

远程目录:root@192.168.62.10:/root/

本机目录:/home/administrator/Desktop/new/

scp -r root@192.168.62.10:/root/ /home/administrator/Desktop/new/

环境变量与配置

source命令

1
source FileName

source命令将在当前bash环境下读取并执行FileName中的命令,该命令通常用命令“.”来替代。

提到source命令是因为,我们常常会在脚本中包含修改环境变量的代码,比如要添加一个PYTHONPATH,或是其它的。而如果你以普通的脚本运行方式来运行此脚本,会发现然而没什么卵用。
环境变量并没有被修改,因为source在当前bash环境下执行命令,而scripts是启动一个子shell来执行命令。这样如果把设置环境变量(或alias等等)的命令写进scripts中,就只会影响子shell,无法改变当前的bash,所以通过文件(命令列)设置环境变量时,要用source 命令

profile和bashrc

etc/xxxx 是对所有用户都会生效的东西

~/.xxxx 是对单个用户才生效的东西

profile是在用户登录时,该文件会被执行一次。而bashrc会在每次bash被打开时,执行一次。

export PATH=”$PATH:$JAVA_HOME/bin”

还有一点要特别注意的,你的shell是bash还是zsh,不同的shell,载入的配置文件并不相同,比如bashrc对于zsh来说,是每什么卵用的。

查找

在/etc下查找“*.log”的文件

find /etc -name “*.log”

在某个路径下查找所有包含”hello”字符串的文件。

find /etc -name "*" | xargs grep "hello"

emacs

emacs 的查找字符串就是c-s

首先要注意的是,emacs的查找是不区分大小写的。

emacs 有两种方式来替换字符串,一种是询问式的,一种是非询问式的。

replace-string就是非询问式的:

M-x replace-string, replace-regexp。

询问式的M-%,会一个个的输入y或者n,根据自己的选择进行替换。

而且emacs还可以用set mark,圈住一部分字符串之后,再进行替换。

emacs列操作:

c-x r k 剪贴一个矩形块

c-x r t 在所有行前面插入

当然如果是为了注释,我不会使用上一种方法,C-c,C-b能够做的更好。

sed

将每一行的foo替换为bar

sed ‘s/foo/bar/g’ pp.txt

s 代表替换,g表示一行上的替换所有的匹配。

sed 在每一行的末尾添加一个分号;

sed ‘s/$/;/g’ pp.txt

sed 在每一行的开头加一个注释

sed ‘s/^/#/g’ pp.txt

不过我一般不使用此操作来注释,emacs的C-c C-b,可以根据语言来选择注释。

正则表达式中得圆括号代表:拿出来以后再使用:

sed ‘s/(.*)</i>/[\1]/g’ f

将每一行的:xxx替换为[xxx]

几点说明:

grep "sys" test.py 在test.py中查找字符串”sys”

grep "sys" * 在当前目录的文件中查找字符串”sys”

grep的参数部分接受文件命,grep的输入管道接受一个字符串缓冲区。

xargs是一条Unix和类Unix操作系统的常用命令。它的作用是将参数列表转换成小块分段传递给其他命令,用来对付那些不能通过管道传递的内容(参数)。

xargs 可以读入 stdin 的资料,并且以空白字元或断行字元作为分辨,将 stdin 的资料分隔成为 arguments

通配符(通配符不是正则表达式):

test* *表示后面不论接几个字符都接受(没有字符也接受)

test? ?表示后面当且仅当接一个字符时才接受

test[1~5] test1, test2, test3, test4, test5