SSH问题

一、使用ssh连接服务器时报错:

ssh_exchange_identification: read: Connection reset by peer

可以通过ssh -p <port> root@<host> -v查看连接时详情

解决方法:

vi /etc/hosts.allow
------------------------------------------------------------
sshd:192.168.0.2,66.166.6.66,<your_wan_ip>
#或者:
sshd: ALL

重启ssh就ok了service sshd restart

二、使用ssh连接服务器时报错:

[root@VPC-2 ~]# ssh -p 60086 webuser@192.168.5.1
Connection closed by 192.168.5.1

登录192.168.5.1,查看日志:/var/log/secure,信息如下:

Jan 31 15:17:29 VPC5-1 sshd[4104]: fatal: Access denied for user webuser by PAM account configuration [preauth]

解决方法:
因为我在/etc/passwd中重命名了一个用户,但忘记重命名/etc/shadow其中的条目。结果是每次登录尝试都记录了以下内容并立即关闭了用户的SSH连接。

[root@vpc5-1 ~]# vim  /etc/shadow
webuser:!!:17085:0:99999:7:::

提醒:如果你重命名用户/etc/passwd,也要重命名/etc/shadow。
如果您也遇到此错误,请检查尝试登录的用户是否具有shadow-entry。它不需要密码,但需要输入相应的条目/etc/shadow。


SHELL语法问题

1、问题背景:

if [ "$frut" == '2' ]; then
mode='--run'
else
mode=''
fi

如上代码, 执行shell报错:-bash: [: ==: 期待一元表达式

解决方法:
看见 $frut 变量了吗,必须加上引号,因为这里用的是 [ ] 条件修饰符; 所以反过来如果用了 [[]] 条件修饰符就没问题了


权限问题

1、当普通用户需要临时使用root权限的时候需要执行sudo命令,但是在执行sudo命令的时候需要使用root的权限去执行/usr/bin/sudo二进制文件。
如果报错出现如下信息:sudo: effective uid is not 0, is sudo installed setuid root

证明/usr/bin/sudo文件没有设置s权限(用户在执行文件的时候,临时拥有文件所有者的权限。)

解决方法:

chmod u+s /usr/bin/sudo

加上权限之后再查看文件 ll /usr/bin/sudo会看到:

---s--x--x 1 root root 123832 Jan  2 18:57 /usr/bin/sudo

这样就可以使用了


磁盘问题

**一、Linux卸载磁盘时出现类似“umount: /xxx: device is busy.”等字样

umount: /mnt: target is busy.

解决方法:

#通过lsof命令处理
[root@server ~]# lsof /mnt/
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
bash    16302 root  cwd    DIR   8,17       50   64 /mnt

找到PID对应的进程或者服务,然后杀死或者停止相应服务就ok了


YUM问题

yum命令不可用: command not found

解决方法见链接:https://blog.51cto.com/qiangsh/1934613


编译问题

configure: error: cannot guess build type; you must specify one

# ./configure
checking build system type... config/config.guess: unable to guess system type

#此处省略多行... ... ...

UNAME_MACHINE = aarch64
UNAME_RELEASE = 5.10.96-90.460.amzn2.aarch64
UNAME_SYSTEM  = Linux
UNAME_VERSION = #1 SMP Fri Feb 4 17:12:06 UTC 2022
configure: error: cannot guess build type; you must specify one

解决方法:

  • --build=编译该软件所使用的平台,aarch64-linux/arm-linux/linux等。
  • --host=该软件将运行的平台
  • --target=该软件所处理的目标平台
    ./configure --build=arm-linux

Shell cat EOF 变量自动解析问题

两个解决办法:

  • 加转义字符,适用于变量少的情况

    [root@localhost ~]# cat <<EOF> /etc/profile.d/node.sh
    > export NODE_HOME=/usr/local/node
    > export PATH=\$NODE_HOME/bin:\$PATH
    > EOF
    [root@elk ~]# cat /etc/profile.d/node.sh 
    export NODE_HOME=/usr/local/node
    export PATH=$NODE_HOME/bin:$PATH
  • EOF 加反斜杠,或用单引号、双引号包围 。适用变量多的情况
    [root@localhost ~]# cat <<'EOF'> /etc/profile.d/node.sh
    > export NODE_HOME=/usr/local/node
    > export PATH=$NODE_HOME/bin:$PATH
    > EOF
    [root@elk ~]# cat /etc/profile.d/node.sh 
    export NODE_HOME=/usr/local/node
    export PATH=$NODE_HOME/bin:$PATH

查看每个进程的Openfiles数量

  • 查看某一个进程的文件打开数量lsof -p PID

  • 查看某一个用户的文件打开数量lsof -u UID

但是发现好像没有一个参数可以知道所有进程的文件打开数量,所以写了个脚本来统计一下所有进程的文件打开数量

#!/bin/bash

# psof.sh
# Author: 
#    #  #######  #     #  #######  
#   #   #        ##    #     #     
#  #    #        # #   #     #     
###     #####    #  #  #     #     
#  #    #        #   # #     #     
#   #   #        #    ##     #     
#    #  #######  #     #     #     
# DATE: 2016-10-09
# DESCRIPTION: 计算每个进程的Openfiles

tmpfile=/dev/shm/psof.txt
echo "" > $tmpfile
for pid in $(ps -eo pid | grep -v PID)
        do echo $pid":"$(lsof -p $pid|wc -l) >> $tmpfile ; 
done
echo "PID : Openfiles"
sort -nrk 2 -t: $tmpfile