常用Linux命令整理

0.awk

//获取某一个进程的pid,方便杀进程
//grep -v grep排除 grep
ps x | grep "device_manage-0.0.1-SNAPSHOT.jar" | grep -v grep | awk '{print $1}'

//用shell统计ip访问情况,要求分析访问日志,找出访问页面数量在前10位的ip数
//uniq -c 重复出现的次数
//head -n 10 显示文档中的前10行
awk '{print $1}' access.log |sort|uniq -c |head -n 10
//聚合后得到频次, 最后对频次进行排序(r表示逆向排序, n表示按数值排序, k表示按第k列进行排序):
cat a.txt |sort | uniq -c | sort -rnk 1
//哪个端口被哪个程序占用
lsof -i :port_number |grep "(LISTEN)"
//用于查看指定端口号的进程情况
//几个参数含义
//-t (tcp) 仅显示tcp相关选项
//-u (udp)仅显示udp相关选项
//-n 拒绝显示别名,能显示数字的全部转化为数字
//-l 仅列出在Listen(监听)的服务状态
//-p 显示建立相关链接的程序名
netstat -tunlp | grep 端口号

 

//https://blog.csdn.net/qinweijing_3360/article/details/80297398
/*即后面的每个数字都是由前两个相邻的数字相加得来,那么每次计算完成之后,我们仅保留前面的两个状态即可完成所有的推导,代码如下*/
//f(n) = f(n-1)+f(n-2)  (n>=3)
private static int climbStairWays3(int n) {
		int count = 0;
		int first = 1;
		int second = 2;
		
		if(n < 1) {
			return 0;
		}
		if(n == 1) {
			return 1;
		}
		
		if(n == 2) {
			return 2;
		}
		
		for(int i = 3;i <= n;i++) {
			count = first + second;
			first = second;
			second = count;
		}
		return count;

	}

/*程序从i=3开始迭代,一直到i=n结束。每一次迭代,都会计算出多一级台阶的走法数量。迭代过程中只需保留两个临时变量first和second,分别代表上一次和上上次迭代的结果。这个时候的时间复杂度依然是O(N),但是空间复杂度却变为了O(1).*/
//https://blog.csdn.net/qq_33323162/article/details/52371293
在二叉树中找到两个节点的最近公共祖先
题目:
      给定一棵二叉树的头节点head,以及这棵二叉树的两个节点o1和o2,请返回o1和o2的最近公共祖先节点。
解答:
       后序遍历二叉树,假设遍历到的当前结点为cur,因为是后序遍历,所以先处理cur的两颗子树,假设处理cur左子树时返回left,处理右子树时返回right.
      1,如果发现cur等于null,或者o1,o2。则返回cur.
      2,如果left和right都为空,说明cur整棵子树都没有发现过o1 和o2,返回null.
      3.如果left和right都不为空,说明左子树上发现过o1 和 o2,右子树上也发现过o1 和o2,说明o1 向上与o2向上的过程中,首次在cur相遇,返回cur.
      4,如果left和right是有一个为空,另一个不为空,假设不为空的那个记为node,此时又两种肯,要么node是o1或o2中的一个,要么node已经是o1和o2的最近公共祖先节点,此时直接返回node即可。
--------------------- 
public TreeNode lowestAcnestor(TreeNode head,TreeNode o1,TreeNode o2){
    if(head==null){return head;}
    //在左子树中查找目标节点
    TreeNode left=lowestAcnestor(head.left,o1,o2);
    //在右子树中查找目标节点
    TreeNode right=lowestAcnestor(head.right,o1,o2);

     if(left!=null && right!=null){return head;}
     return left!=null?left:right;
}

public class TreeNode  {
           public  int val;
             public TreeNode  left;
            public TreeNode  right;
            public TreeNode (int val) {this. val = val; }
}

 

 

 

1.修改hosts

vim /etc/hosts

 

1.sed命令

grep 'arm' -rl |xargs sed -i '7s/arm/boat/g' #替换当前目录所有匹配arm的文件第七行

sed -r 's#.*,([a-zA-Z].*),(.*)#\1#g' person.txt >output.txt #查出内容保存到文件

ifconfig eth0 | sed -nr '2s#^.*ddr:(.*)Bca.*$#\1#gp' #取出linux中eth0的IP地址

ifconfig eth0 | sed -nr '2s#^(.*)dr:(.*)Bc(.*)$#\2#gp' #取出linux中eth0的IP地址

sed -i "s/原字符串/新字符串/g" `grep 原字符串 -rl 所在目录` #批量替换文件内容

 

http://man.linuxde.net/xargs

http://www.mamicode.com/info-detail-1766886.html

linux三剑客

https://blog.csdn.net/liushengxi_root/article/details/72810319

sed -i 's/string1/string2/g' example.txt 将example.txt文件中的 "string1" 替换成 "string2" 
sed '/^$/d' example.txt 从example.txt文件中删除所有空白行 
sed '/ *#/d; /^$/d' example.txt 从example.txt文件中删除所有注释和空白行 
echo 'esempio' | tr '[:lower:]' '[:upper:]' 合并上下单元格内容 
sed -e '1d' result.txt 从文件example.txt 中排除第一行 
sed -n '/stringa1/p' 查看只包含词汇 "string1"的行 
sed -e 's/ *$//' example.txt 删除每一行最后的空白字符 
sed -e 's/stringa1//g' example.txt 从文档中只删除词汇 "string1" 并保留剩余全部 
sed -n '1,5p;5q' example.txt 查看从第一行到第5行内容 
sed -n '5p;5q' example.txt 查看第5行 
sed -e 's/00*/0/g' example.txt 用单个零替换多个零 
sed -e 's/foo/bar/' myfile

将 myfile 文件中每行第一次出现的foo用字符串bar替换,然后将该文件内容输出到标准输出

sed -e 's/foo/bar/g' myfile

g 使得 sed 对文件中所有符合的字符串都被替换

sed -i 's/foo/bar/g' myfile 
选项 i 使得 sed 修改文件

sed -i 's/foo/bar/g' ./m* 
批量操作当前目录下以 m 开头的文件

sed -i 's/foo/bar/g' `grep foo -rl --include="m*" ./`

``括起来的grep命令,表示将grep命令的的结果作为操作文件 
grep 命令中,选项r表示查找所有子目录,l表示仅列出符合条件的文件名,用来传给sed命令做操作,--include="m*" 表示仅查找 m 开头的文件
选项i的用途是直接在文件中进行替换。为防止误操作带来灾难性的后果,sed在替换前可以自动对文件进行备份,前提是需要提供一个后缀名。mac osx下是强制要求备份的,centos下是可选的 
sed -i '.bak' 's/foo/bar/g' ./m* 
如果不需要备份文件,使用空字符串来取消备份,mac osx下可以使用如下命令完成替换操作: 
sed -i '' 's/foo/bar/g' ./m*
企业案例:指定行修改配置文件
    前面我们学过的模型能后将文件中所有满足条件的文本进行操作,但是我们也会碰到指定行精确修改配置文件的需求,因为这样可以避免修改多了地方。

[root@oldboyedu-35 ~]# sed ‘3s#0#9#g‘ person.txt 
101,oldboy,CEO
102,zhangyao,CTO
193,Alex,COO
104,yy,CFO
105,feixue,CIO

  命令说明,前面学习的例子在sed命令“s”前没有指定地址范围,因此默认是对所有行进行操作。

  而这个案列要求值将第3行的0换成9,这里就用到了我们前面学过的地址范围只是,在sed命令“s”前加上3就代表对第三行进行替换

2.netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的;

netstat

查看已经连接的服务端口(ESTABLISHED)

 netstat -a

查看所有的服务端口(LISTEN,ESTABLISHED)

netstat -ap

查看所有的服务端口并显示对应的服务程序名

 

netstat -apn

查看网络连接

3.cd命令

cd /          # 切换到root目录下   
cd ../../..         # 切换到上层目录,可连写  

4.ls命令

ll #格式化显示
ll -a #全部显示
ls -a #全部显示

5.grep命令

 

ll -a | grep docker

6.find命令

find是一个基于查找的功能非常强大的命令,相对而言,它的使用也相对较为复杂,参数也比较多,所以在这里将给把它们分类列出,它的基本语法如下:

find / -name catalina.out #查找文件
find [PATH] [option] [action]  
  
# 与时间有关的参数:  
-mtime n : n为数字,意思为在n天之前的“一天内”被更改过的文件;  
-mtime +n : 列出在n天之前(不含n天本身)被更改过的文件名;  
-mtime -n : 列出在n天之内(含n天本身)被更改过的文件名;  
-newer file : 列出比file还要新的文件名  
# 例如:  
find /root -mtime 0 # 在当前目录下查找今天之内有改动的文件  
  
# 与用户或用户组名有关的参数:  
-user name : 列出文件所有者为name的文件  
-group name : 列出文件所属用户组为name的文件  
-uid n : 列出文件所有者为用户ID为n的文件  
-gid n : 列出文件所属用户组为用户组ID为n的文件  
# 例如:  
find /home/ljianhui -user ljianhui # 在目录/home/ljianhui中找出所有者为ljianhui的文件  
  
# 与文件权限及名称有关的参数:  
-name filename :找出文件名为filename的文件  
-size [+-]SIZE :找出比SIZE还要大(+)或小(-)的文件  
-tpye TYPE :查找文件的类型为TYPE的文件,TYPE的值主要有:一般文件(f)、设备文件(b、c)、  
             目录(d)、连接文件(l)、socket(s)、FIFO管道文件(p);  
-perm mode :查找文件权限刚好等于mode的文件,mode用数字表示,如0755;  
-perm -mode :查找文件权限必须要全部包括mode权限的文件,mode用数字表示  
-perm +mode :查找文件权限包含任一mode的权限的文件,mode用数字表示  
# 例如:  
find / -name passwd # 查找文件名为passwd的文件  
find . -perm 0755 # 查找当前目录中文件权限的0755的文件  
find . -size +12k # 查找当前目录中大于12KB的文件,注意c表示byte  

7.cp命令

cp -a file1 file2 #连同文件的所有特性把文件file1复制成文件file2  
cp file1 file2 file3 dir #把文件file1、file2、file3复制到目录dir中 

8.mv命令

mv file1 file2 file3 dir # 把文件file1、file2、file3移动到目录dir中  
mv file1 file2 # 把文件file1重命名为file2 

9.rm命令

-f :就是force的意思,忽略不存在的文件,不会出现警告消息  
-i :互动模式,在删除前会询问用户是否操作  
-r :递归删除,最常用于目录删除,它是一个非常危险的参数 

rm -i file # 删除文件file,在删除之前会询问是否进行该操作  
rm -fr dir # 强制删除目录dir中的所有文件  

10.ps命令

ps aux # 查看系统所有的进程数据  
ps ax # 查看不与terminal有关的所有进程  
ps -lA # 查看系统所有的进程数据  
ps axjf # 查看连同一部分进程树状态

11.kill命令

该命令用于向某个工作(%jobnumber)或者是某个PID(数字)传送一个信号,它通常与ps和jobs命令一起使用;

1:SIGHUP,启动被终止的进程  
2:SIGINT,相当于输入ctrl+c,中断一个程序的进行  
9:SIGKILL,强制中断一个进程的进行  
15:SIGTERM,以正常的结束进程方式来终止进程  
17:SIGSTOP,相当于输入ctrl+z,暂停一个进程的进行 

kill -signal PID  

12.file命令

该命令用于判断接在file命令后的文件的基本数据;

file filename  
#例如:  
file file_01

13.tar命令

-c :新建打包文件  
-t :查看打包文件的内容含有哪些文件名  
-x :解打包或解压缩的功能,可以搭配-C(大写)指定解压的目录,注意-c,-t,-x不能同时出现在同一条命令中  
-j :通过bzip2的支持进行压缩/解压缩  
-z :通过gzip的支持进行压缩/解压缩  
-v :在压缩/解压缩过程中,将正在处理的文件名显示出来  
-f filename :filename为要处理的文件  
-C dir :指定压缩/解压缩的目录dir  

压缩:tar -jcv -f filename.tar 要被处理的文件或目录名称  
查询:tar -jtv -f filename.tar  
解压:tar -jxv -f filename.tar 欲解压缩的目录  
解压tar.gz  tar -zxvf apache-tomcat-8.5.27.tar.gz

总结
1、*.tar 用 tar –xvf 解压
2、*.gz 用 gzip -d或者gunzip 解压
3、*.tar.gz和*.tgz 用 tar –xzf 解压
4、*.bz2 用 bzip2 -d或者用bunzip2 解压
5、*.tar.bz2用tar –xjf 解压
6、*.Z 用 uncompress 解压
7、*.tar.Z 用tar –xZf 解压
8、*.rar 用 unrar e解压
9、*.zip 用 unzip 解压

14.cat命令

cat text | less # 查看text文件中的内容  
# 注:这条命令也可以使用less text或者more text来代替

15.chmod命令

命令用于改变文件的权限;

chmod 0755 file # 把file的文件权限改变为-rxwr-xr-x  
chmod g+w file # 向file的文件权限中加入用户组可写权限 

16.chown命令

该命令用于改变文件的所有者,与chgrp命令的使用方法相同,只是修改的文件属性不同;

 

chgrp命令

该命令用于改变文件所属用户组,它的使用非常简单

chgrp [-R] dirname/filename  
-R :进行递归的持续对所有文件和子目录更改  
# 例如:  
chgrp users -R ./dir # 递归地把dir目录下中的所有文件和子目录下所有文件的用户组修改为users  

17.tail命令

 tail -f file_01
 tail -n 500 file_01

18.su root

切换账号

19.du命令

显示目录或者文件所占空间

du -h #以M,K显示
du -sk * | sort -rn 以容量大小为依据依次显示文件和目录的大小

20.df命令

df -h 显示已经挂载的分区列表

21.查找端口是否占用;

ps -ef | grep 7081

找到PID杀掉

kill -9 pid

22.查看内存

top命令

free命令

vmstat命令

vmstat 1 5 #1秒,输出5次
free -m #MB显示

23.scp命令

(1)这个是统计当前子目录的文件大小

sudo du -h --max-depth=1

(2)利用scp命令来进行文件复制。

    scp是有Security的文件copy,基于ssh登录。操作起来比较方便,比如要把当前一个文件copy到远程另外一台主机上

从 本地 复制到 远程 

 命令格式: 

  

scp local_file remote_username@remote_ip:remote_folder 
或者 
scp local_file remote_username@remote_ip:remote_file 
或者 
scp local_file remote_ip:remote_folder 
或者 
scp local_file remote_ip:remote_file 

 

 第1,2个指定了用户名,命令执行后需要再输入密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名; 

 第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名; 

从 远程 复制到 本地,只要将 从 本地 复制到 远程 的命令 的 后2个参数 调换顺序 即可; 

(3)从远程复制到本地

从远程复制到本地,只要将从本地复制到远程的命令的后2个参数调换顺序即可,如下实例

应用实例:

scp -r /home/test/file_01 root@192.168.30.64:/home/test/

(4)备份数据库

mysqldump -uroot -p --all-databases >/home/wei/sqlfile.sql;

导入

格式:mysql -h链接ip -P(大写)端口 -u用户名 -p密码 数据库名 < d:XX.sql(路劲) 

mysql -uusername -ppassword db1 <tb1tb2.sql

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值