Linux入门知识
基础:
- Linux是什么
- Linux用户、文件、目录管理
- VIM编辑器
- Linux文件系统管理
进阶: - Linux网络管理
- Linux进程管理
- Linux系统监控
查看操作系统:
- cat /proc/version
查看系统时间: - date
查看IO、系统内存 - cat /proc/cpuinfo 查看cpu详细信息
- free -m 查看内存使用情况
- top 监控视图
- lostat 输出CPU和磁盘I/O相关的统计信息
查看网络端口状态 - netstat -anp | grep 18008 查看18008端口状态
进入某个目录 - cd /opt/oss 进入根目录下opt目录下的oss目录
查找某个具体的文件 - find . -name "test*" 当前目录下,查询名为test开头的文件
- find / -name "test*" 在根目录下,查询名为test开头的文件
修改文件权限和修改文件名 - chown ossuser:ossgroup test.jar 修改单个
- chown -R ossuser:ossgroup test/ 递归修改test目录下面的文件
- mv 重命名和移动
- cp 拷贝
从一个环境上copy包到当前环境的具体目录 - scp test.jar root@10.10.10.10:/tmp/test 把当前目录的test.jar复制到10.10.10.10环境上的/tmp/test目录下
搜索进程、杀死某个进程: - ps -ef | grep test 查看包含test的进程,其中ps可以继续查看更多用法
- kill -9 pid 强制杀死进程
VIM:主要是熟悉一些常用的操作。
额外的命令:
- 前言:
- 扫描本地ip地址:
ifconfig eth0 | grep "inet addr:" | awk '{print $2}' | sed 's/addr://g'
- 扫描端口号被哪个进程占用:
netstat -anp | awk '{print $4, $7}' | grep 31006 | sed -n '1p' | awk '{print $2}' | awk -F'/''{print $1}' | xargs ps -lfp | sed -n '2p' | awk '{print $17}'
- 获取某个进程的堆栈:
ps -elf | grep -v grep | grep necomm_agent | awk '{print $4}' | xargs gstack > yp.txt
- 批量重命名网元license备份的文件名:
for i in `ls`; do mv -f $i `echo $i | sed 's/^[a-zA-Z0-9].*_[a-zA-Z0-9].*_\([0-9]\{8\}\)\(_\)|([0-9]\{6\}\)\(\.txt\)$/Lic_Esn_\1\2\3/'`;done
- 统计某个文件夹下的文件占用的字节数:
ls -l | awk 'BEGIN {size=0;} {size = size + $5;} END{print "[end]size is ", size/1024,1024, "M"}'
-
何时需要xargs?
- 有些命令本身不支持管道,这时候要加xargs,本身支持管道命令有限如 cut grep sort uniq wc tee join split等。比如例子:
echo "/opt" | ls -l
其中,ls 本身不支持管道,所以对于前面管道输出的内容会忽略,不会输出/opt目录下的内容;而echo "/opt" | xargs ls -l
加上xargs,执行的结果就是输出/opt下目录的内容 - 命令虽然支持管道,但是加不加xargs意义不同。比如:在某个目录下查找某个abc字符串:
find ./ | grep "abc"
这个命令不会在目录下文件查找,而是把find出来的内容查找,相当于在一群文件名中查找是否包含abc文件名。而find ./ xargs grep "abc"
这个命令则是把find出来的东西当作参数传递给管道后的内容,相当于find出来的文件内容中查找是否包含字符串abc。
- 有些命令本身不支持管道,这时候要加xargs,本身支持管道命令有限如 cut grep sort uniq wc tee join split等。比如例子:
-
正则表达式:
POSIX正则表达式分为基本正则表达式(BRE)和扩展表达式(ERE)。目前很多UNIX工具程序沿用某一种正则表达式形式来强化本身的功能。常用的包括:1)grep和egrep;2)sed;3)awk;4)more/less;5)vi
比如:
-
grep 'a\{3\}' test.txt
查找包含3个a的行, -
grep '^aa' test.txt
查找以aa开头的行, -
grep '^$' test.txt
查找空行
-
后向引用:用
\(
与\)
包裹子表达式,然后用\digit
来引用, 比如: -
grep `\(why\).*\1` test.txt
匹配why..why -
grep `\(ab\)\(cd\)[def]*\2\1` test.txt
匹配abcddcdab -
grep:主打“查找”,常用的选项:
- -v 过滤指定字符串内容的行
- -i 不区分大小写
- -n 顺便打印出行号
- -c 计算出符合行的次数
- -E 默认grep只支持基本的正则表达式,加上-E支持扩展的正则表达式,grep -E和egrep意义一样,扩展的正则有'+', '?', '|', '()'
常用的命令:
-
ps -elf | grep -v grep | grep "necomm_agent"
如果不加grep -v grep则输出2条内容。 -
grep -i 'abc' test.txt
忽略大小写,找出test.txt包含abc的行 -
grep -v '^&' test.txt > testnew.txt
过滤test.txt的空行 -
sed:主打“编辑”,工作原理:从文件或管道中读取一行,放在模式空间(sed内部的一个临时缓存)中,进行处理,处理完输出一行;再读取一行,再处理一行。
- 增(a追加文本到指定行后,i插入文本到指定行前)
- 单行增加:
sed '2a abc' test.txt
sed '2i abc' test.txt
- 增加多行
sed '2a abc\ cde' test.txt
执行指定的地址范围:
-
sed可以对单行或多行进行处理,如果在sed命令前面不指定地址范围,那么默认会匹配所有行。
/abc/,/fff/{sed-commands}
对匹配abc的行到匹配fff的行操作-
删
删除指定的行
sed '/aaa/d' test.txt
-
改
用新行取代旧行
sed '2c abc' test.txt
文本替换:
sed 's/abc/bcdd/g' test.txt
g表示全局替换,如果不加g,则替换每行第一个匹配的字符串
sed 's/^/abc /' test.txt
在test.txt每行前插入abc
sed -i '/aaa/s/abc/bcd/g' test.txt
加上-i代表修改了文件test.txt
替换部分有几个特殊的元字符,分别是:
&: 被pattern匹配的内容
\num: 被pattern匹配的第num个分组(正则表达式的概念,\(...\)括起来的部分成为分组)
sed '/d/s/ab/&jj/' test.txt
将匹配d内容的行中的ab替换为abjj
echo this is digit 7 in a number | sed 's/digit \([0-9]\)/\1/'
-
查:
- p输出指定内容,默认会输出2次匹配的结果,用n取消默认输出
按行查询
sed -n '2p' test.txt
按字符串查询
sed -n '/abc/p' test.txt
混合查询
sed -n '2,/abc/p' test.txt
- 多命令编辑:
sed -e '1,5d' -e 's/test/check/' test.txt
-
-
awk:主打“分割处理“:文件逐行输入,空格默认分割,切片后再分析
不是很懂这些进阶的命令,仍需要更多理解和学习。