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