我一直所理解的学习模式是:尝试 --> 实用熟练 --> 探究原理 --> 总结均衡,选择性忽略。
新公司的开发环境是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