linux中已经启用的命令和替代命令
前言
最近做项目,发现了很多虚拟机和容器的Linux核心中很多命令已经不存在了,最后发现实际上是Linux系统默认已经替代了,并在过程中的一些心得体会记录,关键还是sftp这个用的不少,出现了一些关键的诉求,比如限速等。
ifconfig/ip
这个命令在笔者程序员的历程都伴随着,经常查询IP地址用这个,偶尔也会查询网关和子网掩码,实际上这个命令默认已经没有自带了,当然我们也可以手动安装,以Ubuntu server为例
sudo apt install net-tools
执行ifconfig即可,Windows实际上类似,ipconfig现在还可以用
实际上现在可以直接ip a
更加精简,但是可读性要差一点,最大的好处是直接使用,主流的系统内置了
net-tools 包已被弃用,相关的能力基本上被ip命令的参数替代。比如:arp、route、iptunnel 、nameif
比如arp 变成ip n
route变成ip r
iptunnel变成ip tunnel,这个倒是没什么变化
nameif变成ip link
实际上基本上无脑ip a即可,一般而言我们就看个IP。可能在网络打通时,需要看看route。
netstat/ss
netstat是最常用的网络监控命令,比如查端口建立了多少连接,端口被占用,建立连接的IP等。
但是新版本的Linux系统,已经没有这个命令了,类似net-tools,已经被移除。取代的命令为ss,简明扼要。
ss本身可以列出所有的网络IP端口相关的信息
其实还是netstat比较方便,估计是以前用惯了,其中关键的在于筛选
其实用法大同小异,关键还是在于筛选,这个参数倒是简单很多了。
scp/sftp
scp一般用于在不同的Linux之间安全传递文件,实际上Ubuntu server现在还内置了这个指令,但是一般使用sftp管理文件,而且文件的传递不仅仅是Linux之间传递了,还需要控制文件,比如写入文件是否结束,列出sftp server的文件目录等,甚至删除文件,有时候还有限速要求,基本是限速现在都没怎么处理,如果独占带宽还可以,如果共享,那不是完全被占用,毕竟一个文件如果过大,也要很久才能传输完成,就需要给其他逻辑让出带宽,大文件传输占用的带宽是海量的,所以一般而言是尽可能的压缩文件大小。
当然也可以使用rsync,但是Ubuntu server没内置,mac倒是内置了这个命令。
scp的指令
其中-l 可以限速,在比较贵的专线中可能会用得着。scp复制文件本身而言是OK的,但是如果要操作文件,还是sftp命令或者开源包处理,也支持限制带宽,单位Kbit/s
-l limit
Limits the used bandwidth, specified in Kbit/s.
下面使用Ubuntu server搭建一个sftp server,使用sftp来存取文件和限速
sftp使用SSH传输文件,所以配置SSH即可,ssh server对于服务器而言大部分情况默认就是需要安装的,如果没有安装,但是可以访问这台主机,那么执行(Debian系列,红帽关联npm)
sudo apt install openssh-server
因为笔者已经安装,所以跳过这步,直接创建sftp用户,实际上就是ssh用户,3件套,创建用户组,用户,对用户关联用户组
下一步创建存取文件的目录,要给上一步的用户授权,这里需要根据用户做隔离,实际上就是权限管控。
sudo mkdir -p /home/sftp_users/tom
sudo chown root:root /home/sftp_users
sudo chmod 755 /home/sftp_users
sudo chown tom:sftp-users /home/sftp_users/tom
sudo chmod 770 /home/sftp_users/tom
前面的创建文件目录和授予用户没问题,最后的用户授权(r w x)这个根据实际情况吧
下一步,就需要配置ssh,让可以传输文件,并把刚刚的用户和目录配置进去
在修改文件sudo vim /etc/ssh/sshd_config,发现实际上可以通过单独的文件配置,避免修改源文件
用户配置
默认允许所有用户或者用户组登录,可以限制用户,多用户配置如下。
AllowUsers 多个用户(以空格间隔)
AllowGroups 多个用户组(以空格间隔)
单用户配置如下。
Match User 用户
Match Group 用户组
# 禁止TCP转发
AllowTcpForwarding no
# 禁止X11转发
X11Forwarding no
etg:
#comment out the below line and add a line like below
#Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp# add Below lines at the end of file
Match Group sftp-users
Match User tom
ChrootDirectory /home/sftp_users
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
然后重启ssh服务
sudo systemctl restart ssh
笔者上传一个文件试试,先登录,然后使用put get存取文件,ls可以看列表
试试限速
有效果1024/8=128KB差不多限速成功,速率的浮动的,偶尔较低,偶尔较高
总结
实际上上面是最常用的Linux基础指令,只不过有些指令变了名称,和展示效果,关键的作用并没有什么变化,比如以前的egrep就变成了grep -E:打印出文件中与特定字符串或模式匹配的行;同理的fgrep变成了grep -F:在一个或多个文件中搜索固定的字符串。更简洁了,更方便了,只是对已经熟练使用旧命令的不习惯,还是需要使用新命令,毕竟以后旧命令可能就下线了。
关于sftp,实际上是笔者工作中使用到了,大部分情况都可以使用开源的sftp做到,但是限速很特殊,要求按照租户执行限速要求,毕竟带宽需要钱,传输文件慢一点也是可以传完,但是影响其他逻辑是不能接受的。