分类 Shell 下的文章

Mac通过ssh密钥对登录远程Linux服务器

ssh登录Linux服务器通常有两种方法,第一种是通过账号密码登录,第二种是密钥对登录。

Windows环境下,我使用第一种方法比较多,因为有类似Xshell这样的工具,可以帮你记住账号密码,使用起来十分方便。而且,Xshell针对家庭和学校用户,有免费版本,不存在授权问题,可以说是十分贴心的。另外,配合他们家的Xftp使用,文件的上传下载也很方便。所以,如果你用的Windows系统,那么我会强烈推荐你使用Xshell和Xftp。

Mac用户就没有这么幸运了,因为Xshell和Xftp没有Mac版本。当然,你还可以用一些其他替代产品,比如SecureCRT,只不过是需要授权付费的,你可以选择用破解版。另外,FinalShell是免费软件,而且据说是由国人开发,支持Windows、Mac、Linux,评价也还不错。

那为什么现在我还要讲第二种登录ssh的方法呢?因为我个人不喜欢SecureCRT,FinalShell官网又看起来很简陋,我用着觉得不踏实。所以我现在的做法是,远程管理Linux用Mac自带的终端加上ssh密钥对,文件上传下载用Filezilla。

- 阅读剩余部分 -

Centos7.5 从Python2.7.5升级到Python2.7.16

Centos7 默认安装的python版本是2.7.5,由于某些平台提示建议更新版本,防止跨脚本攻击,所以现对其进行升级,更新至2.7.16版本(截至目前2019-8-12的最新版本)。

查看当前python版本

[root@csensix ~]# python -V

运行结果:Python 2.7.5

下载并安装最新版本 Python 2.7.16

下载

.tar.xz.tgz 压缩版本二选一,这里我下载的是体积较小的 .tar.xz 版本。

# tar.xz 版本
[root@csensix ~]# wget https://www.python.org/ftp/python/2.7.16/Python-2.7.16.tar.xz

# tgz 版本
[root@csensix ~]# wget https://www.python.org/ftp/python/2.7.16/Python-2.7.16.tgz

解压

[root@csensix ~]# tar -xf Python-2.7.16.tar.xz

# 或者分两步
[root@csensix ~]# xz -d Python-2.7.16.tar.xz
[root@csensix ~]# tar xvf Python-2.7.16.tar

编译安装

[root@csensix ~]# cd Python-2.7.16
[root@csensix ~]# ./configure --prefix=/usr/local
[root@csensix ~]# make
[root@csensix ~]# make altinstall

为避免覆盖系统自带python,故没有选择常规的make install,而是使用了 make altinstall

修改默认python版本

安装完之后执行 python -V,此时显示的还是老的 2.7.5 版本,因为 /usr/bin/python 指向的还是原来的版本,所以需要做相应的更改。

首先,备份老版本

[root@csensix ~]# mv /usr/bin/python /usr/bin/python2.7.5

链接新版本

[root@csensix ~]# ln -s /usr/local/bin/python2.7 /usr/bin/python

至此,新版本安装基本完成。现在,python -V 显示的结果是 Python 2.7.16,如果希望访问老版本,那么执行 python2.7.5 即可,如下:

[root@csensix ~]# python2.7.5
Python 2.7.5 (default, Apr 11 2018, 07:36:10) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2
Type "help", "copyright", "credits" or "license" for more information.

- 阅读剩余部分 -

Linux删除文件后df -h显示目录大小无变化

情形:删除文件后df -h 文件目录大小未改变,du 查看目录大小却改变了

这是因为,df 会计算各自 meta 数据,当该目录的文件被删除了,却仍有进程hold住这个文件句柄,此时这个文件的block并未被释放,df仍会统计到该文件的block,du却不会。

遇到这种情况,就需要查hold进程,kill 掉进程就好了。

lsof | grep delete

#  找到 对应文件的hold进程 id
kill -9 $id

Shell 脚本实现自动修改 Linux 用户密码

Linux 系统下通过 passwd 命令修改密码会进入交互模式,此时系统会等待用户输入。如果我们不希望进入交互模式,通过脚本或者文件自动完成输入,或者通过接收到的参数完成输入操作,如此就能省去人工输入。结合EOF就能完美解决这个问题,下面通过自动化修改 pure-FTPd 用户密码的脚本 passwd.sh 实例来说明。

#!/bin/bash

# $1 $2 分别代表执行此脚本时的第一和第二个参数
/usr/local/pureftpd/bin/pure-pw passwd $1 <<EOF
$2
$2
EOF
/usr/local/pureftpd/bin/pure-pw mkdb

按如下格式执行脚本:
/bin/bash passwd.sh ftpuser1 ftppassword

如果需要隐藏命令提示文字(标准输出),可添加 >/dev/null 2>&1,具体如下:

#!/bin/bash

# $1 $2 分别代表执行此脚本时的第一和第二个参数
/usr/local/pureftpd/bin/pure-pw passwd $1 <<EOF >/dev/null 2>&1
$2
$2
EOF
/usr/local/pureftpd/bin/pure-pw mkdb