Linux日常问题记录

文章目录

        • /dev/null: Permission denied
        • 查询linux公网ip地址
        • -bash: fork: retry: 资源暂时不可用
        • Linux文件系统只读Read-only file system
        • yum安装需要依赖库
        • 为什么访问vsftp, cmd可以访问, ftp客户端工具也可以访问, 用ie却访问不了,这是为什么呢?
        • linux堆栈
        • 查询服务器使用年限
        • yum安装gcc报错
        • xshell字符集乱码问题
        • nginx返回`HTTP request sent, awaiting response... 403 Forbidden` 问题解析
        • crontab -e执行报错
        • java 执行段错误
        • 使用xstart连接linux
        • 查看僵尸进程并杀掉
        • nginx`Too many open files`打开文件数过多
        • `vsftpd 500 OOPS: cannot change directory:/home/umg`
        • fastdfs运行rename 出现 error:5 input/ouput错误
        • 使用iftop命令查询程序所占用的带宽流量
        • 无法格式化`/dev/VG1/LV1 is apparently in use by the system; will not make a filesystem here!`
        • 启动kafka程序提供端口被占用,解决方法,重点如遇到有程序连接对应程序端口,则直接改掉该链接进程
        • 启动kafka程序提供端口被占用,解决方法,重点如遇到有程序连接对应程序端口,则直接改掉该链接进程
        • 使用rsync删除大量小文件
        • oracle启动`out of memory`异常
        • 查看nfs服务器上有哪些客户端挂载
        • nc 之 Netcat 号称 TCP/IP 的瑞士军刀
          • ncat 类似ssh后门
          • 探测端口是否开放
          • 传输测试
          • 文件传输
        • Centos6停止维护
        • ginx 的配置参数:**underscores_in_headers**,这个参数默认值为:off,即默认忽略带下划线的 header。
        • nginx限流访问
        • tomcat的shutdown.sh无法停止进程的解决方法
          • 修改解决方法
        • Mysql int值字段溢出4294967295
          • keepalived 都监听vip问题
          • nginx支持代理tcp和udp协议
          • nginx 日志打印转发upstream_addr日志
          • ngin正向代理yum,为没公网服务器yum安装,以下是centos6
          • nfs导致df命令卡死处理
        • screen后台运行
        • ansbile异常
        • mongodb非交互式查询数据
        • 作为 man 替代品的 tldr
        • 作为 du 替代品的 ncdu
        • zookeeper 设置用户和密码
        • 非交互式非root创建定时任务

/dev/null: Permission denied
  • 普通用户登录显示如下
Last login: Fri Dec  7 15:29:17 2012 from 124.42.29.118
-bash: /dev/null: Permission denied
-bash: /dev/null: Permission denied
-bash: /dev/null: Permission denied
-bash: /dev/null: Permission denied
-bash: /dev/null: Permission denied
  • 操作如下
[root@iZ25sj2buxhZ ~]# ll -htr /dev/null
-rwx-rw-rw 1 root root 1, 3 Jun 26 08:51 /dev/null
[root@iZ25sj2buxhZ ~]#  rm -rf /dev/null && mknod -m 0666 /dev/null c 1 3
[root@iZ25sj2buxhZ ~]# ll -htr /dev/null
crw-rw-rw- 1 root root 1, 3 Jun 26 08:51 /dev/null
查询linux公网ip地址
[apex@iZ25dpcl2laZ ~]$ curl members.3322.org/dyndns/getip  
111.111.111.111
-bash: fork: retry: 资源暂时不可用
pd -eL |wc -l  #查询进程数量
vim /etc/security/limits.d/90-nproc.conf
* soft nproc 1024  #修改普通用户的进程数
Linux文件系统只读Read-only file system
  • 问题描述
1、系统无法进行磁盘的读写操作(touch,cp,chmod)等等
2、服务器无法启动(也是因为无法创建文件)
3、只有涉及到系统磁盘的写操作,都会报错"Read-only file system"
  • 问题原因
1、系统没有正常关机,导致虚拟磁盘出现文件系统错误;
2、机器硬盘故障导致硬盘只读一般情况是由于系统发现磁盘硬件(Riad卡,硬盘)故障或文件系统中文件被损坏后而采取的保护机制导致的。为了保护数据不破坏分区中已有内容,Linux在挂载文件系统是就只用read-only只读方式加载。
  • 问题解决1
1、将系统重要的文件备份到远程主机中
    scp -r  dirname/filename  user@remote_hostIP:/backupdir
    通过scp -r 可以避免对系统有写操作

2、然后重启系统,切换单用户模式。需要在服务器本地才能操作,切记。
    init 1

3、使用fsck手动修复,具体操作如下:
    fsck.ext4 -y  /dev/vda1(根分区对应的磁盘分区,可通过df -h 命令获取)
  • 问题解决2
reboot
yum安装需要依赖库
  • 执行命令
yum whatprovides libstdc++.so.6
  • 如下提示
然后会提示哪个安装包有这个库文件,如下:
`[root@SnsWeb ~]``# yum whatprovides libstdc++.so.6`
`Loaded plugins: fastestmirror, refresh-packagekit, security`
`Loading mirror speeds from cached hostfile`
`libstdc++-4.4.7-11.el6.i686 : GNU Standard C++ Library`
`Repo        : base`
`Matched from:`
`Other       : libstdc++.so.6`
  • 然后执行
yum -y install libstdc++-4.4.7-11.el6.i686
为什么访问vsftp, cmd可以访问, ftp客户端工具也可以访问, 用ie却访问不了,这是为什么呢?
  • 修改如下
可能是VSFTP有两种访问模式,一种为被动模式,一种主动模式,你看看你的IE是不是设置了被动模式。打开IE,“工具”——“Internet选项”——“高级”,“使用ftp被动模式”前面的勾去掉,
linux堆栈
  • 说明
堆栈是就是一段连续分配的内存空间。在一个程序中,会声明各种变量。静态全局变量是位于数据段并且在程序开始运行的时候被加载。而程序的动态的局部变量则分配在堆栈里面。
  • 查询默认堆栈大小,以及设置永久设置
[root@ylbhost02 ~]# ulimit -s  #默认大小为8192 
8192

[root@ylbhost02 ~]#  vim .bash_profile 
ulimit -s 20240 #在文件添加此行数据,然后重新登录或者重新加载环境变量
  • 查询运行程序的线程
54328    12999     1 13632  0  364 22:16 ?        00:00:00 ./dcs
54328    12999     1  7902  7  364 23:18 ?        00:01:21 ./dcs
54328    12999     1 25079  7  364 23:30 ?        00:00:29 ./dcs
[root@ylbhost02 ~]# ps -efL |grep dcs |wc -l   #查询有 366个线程
366
  • 查询dcs的堆栈信息
[root@ylbhost02 ~]# pstack  12999 |more
Thread 364 (Thread 0xb6628b90 (LWP 13003)):
#0  0xb77bb424 in __kernel_vsyscall ()
#1  0x4cf1acde in do_sigwait () from /lib/libpthread.so.0
#2  0x4cf1ad7f in sigwait () from /lib/libpthread.so.0
#3  0x47d2ccfb in ?? () from /home/channelsoft/Platform/lib/libIceUtil.so.32
#4  0x4cf12852 in start_thread () from /lib/libpthread.so.0
#5  0x4ce3c84e in clone () from /lib/libc.so.6
Thread 363 (Thread 0xb6127b90 (LWP 13004)):
#0  0xb77bb424 in __kernel_vsyscall ()
#1  0x4cf16f32 in pthread_cond_timedwait@@GLIBC_2.3.2 () from /lib/libpthread.so.0
#2  0x479a9245 in IceInternal::ConnectionMonitor::run() () from /home/channelsoft/Platform/lib/libIce.so.32
#3  0x47d44433 in ?? () from /home/channelsoft/Platform/lib/libIceUtil.so.32
#4  0x4cf12852 in start_thread () from /lib/libpthread.so.0
#5  0x4ce3c84e in clone () from /lib/libc.so.6
Thread 362 (Thread 0xb5c26b90 (LWP 13006)):
#0  0xb77bb424 in __kernel_vsyscall ()
#1  0x4ce35301 in select () from /lib/libc.so.6
#2  0x08146a3d in Sleep(int, int) ()
#3  0x080ab30a in CCommonData::CCheckStatusThread::run() ()
#4  0x47d44433 in ?? () from /home/channelsoft/Platform/lib/libIceUtil.so.32
#5  0x4cf12852 in start_thread () from /lib/libpthread.so.0
#6  0x4ce3c84e in clone () from /lib/libc.so.6
Thread 361 (Thread 0xb11e7b90 (LWP 13007)):
#0  0xb77bb424 in __kernel_vsyscall ()
#1  0x4ce35301 in select () from /lib/libc.so.6
#2  0x08146a3d in Sleep(int, int) ()
#3  0x0811eac6 in CSrvMainThread::run() ()
#4  0x47d44433 in ?? () from /home/channelsoft/Platform/lib/libIceUtil.so.32
#5  0x4cf12852 in start_thread () from /lib/libpthread.so.0
#6  0x4ce3c84e in clone () from /lib/libc.so.6
Thread 360 (Thread 0xb05ffb90 (LWP 13009)):
查询服务器使用年限
yum -y install dmidecode && dmidecode  |grep -i date
    Release Date: 04/01/2014
yum安装gcc报错
Code:
Resolving Dependencies
--> Running transaction check
---> Package gcc.x86_64 0:4.8.5-4.el7 will be installed
--> Processing Dependency: glibc-devel >= 2.2.90-12 for package: gcc-4.8.5-4.el7.x86_64
--> Running transaction check
---> Package glibc-devel.x86_64 0:2.17-105.el7 will be installed
--> Processing Dependency: glibc-headers = 2.17-105.el7 for package: glibc-devel-2.17-105.el7.x86_64
--> Processing Dependency: glibc = 2.17-105.el7 for package: glibc-devel-2.17-105.el7.x86_64
--> Processing Dependency: glibc-headers for package: glibc-devel-2.17-105.el7.x86_64
--> Running transaction check
---> Package glibc.i686 0:2.17-105.el7 will be installed
--> Processing Dependency: glibc-common = 2.17-105.el7 for package: glibc-2.17-105.el7.i686
--> Processing Dependency: libfreebl3.so(NSSRAWHASH_3.12.3) for package: glibc-2.17-105.el7.i686
--> Processing Dependency: libfreebl3.so for package: glibc-2.17-105.el7.i686
---> Package glibc-headers.x86_64 0:2.17-105.el7 will be installed
--> Running transaction check
---> Package glibc.i686 0:2.17-105.el7 will be installed
--> Processing Dependency: glibc-common = 2.17-105.el7 for package: glibc-2.17-105.el7.i686
---> Package nss-softokn-freebl.i686 0:3.16.2.3-13.el7_1 will be installed
--> Finished Dependency Resolution
**Error: Package: glibc-2.17-105.el7.i686 (centos)
           Requires: glibc-common = 2.17-105.el7
           Installed: glibc-common-2.17-106.el7_2.4.x86_64 (@install/$releasever)
               glibc-common = 2.17-106.el7_2.4
           Available: glibc-common-2.17-105.el7.x86_64 (centos)
               glibc-common = 2.17-105.el**7
  • 解决方法
此命令是降级
 yum downgrade glibc glibc-common glibc-devel glibc-headers -y
xshell字符集乱码问题
export  LANG="zh_CN.GBK" #当前 xshell当中
nginx返回HTTP request sent, awaiting response... 403 Forbidden 问题解析
1、首先看访问目录是否有权限,没有则赋权 chmod   -R 777
2、 修改nginx配置nginx配置文件
user nobody   #默认使用次用户等了
改成:user root 
重启nginx 问题解决
crontab -e执行报错
  • 查看cron运行日志
tail -f /var/log/cron
May 8  10:14:01 localhost crond[9399]: (root) FAILED to authorize user with PAM (Module  is unknown) May 8  10:14:01 localhost crond[9400]: (root) FAILED to authorize user with PAM (Module  is unknown)
  • 解决方法如下
1、禁用SELinux,可以使用getenforce命令查看是否禁用。
2、修改/etc/cron.allow,添加
  root
  myuser
3、修改/etc/pam.d/crond,把把所有required改成sufficient,这个可能对非root用户管用。

#  
# The PAM configuration file for the cron daemon  
#  
#  # No PAM authentication called, auth modules not needed 
account required pam_access.so 
account include password-auth 
session required pam_loginuid.so 
session include password-auth 
auth include password-auth

4、重启crond服务

/etc/init.d/crond restart
java 执行段错误
  • 执行java或者jps命令段错误
[storm@mongodb2 ~]$ java
段错误 (core dumped)
  • 查看core信息
 gdb  core.6161 #能看到是java命令产生的core
GNU gdb (GDB) Red Hat Enterprise Linux (7.2-90.el6)
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later 
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
...
Missing separate debuginfo for the main executable file
Try: yum --enablerepo='*-debug*' install /usr/lib/debug/.build-id/05/18f8b465780a64d721c738347ff9453c3ed085
[New Thread 6161]
Core was generated by `java'.
Program terminated with signal 11, Segmentation fault.
#0  0x00211daf in ?? ()
"/home/storm/core.6161" is a core file.
Please specify an executable to debug.
  • 使用gdb java corexx查看
[storm@mongodb2 ~]$ gdb  java core.6161
GNU gdb (GDB) Red Hat Enterprise Linux (7.2-90.el6)
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later 
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
...
Reading symbols from /home/storm/jdk1.7.0_10/bin/java...Missing separate debuginfo for /home/storm/jdk1.7.0_10/bin/java
Try: yum --enablerepo='*-debug*' install /usr/lib/debug/.build-id/05/18f8b465780a64d721c738347ff9453c3ed085.debug
(no debugging symbols found)...done.
[New Thread 6161]
Missing separate debuginfo for /home/storm/jdk1.7.0_10/bin/../jre/lib/i386/jli/libjli.so
Try: yum --enablerepo='*-debug*' install /usr/lib/debug/.build-id/54/2d86f3d1744f8af10e3af31103782869291f05
Missing separate debuginfo for 
Try: yum --enablerepo='*-debug*' install /usr/lib/debug/.build-id/6e/b6c2901505f3651043a0472dd293577d60c905
Reading symbols from /lib/libpthread.so.0...(no debugging symbols found)...done.
[Thread debugging using libthread_db enabled]
Loaded symbols for /lib/libpthread.so.0
Reading symbols from /home/storm/jdk1.7.0_10/bin/../jre/lib/i386/jli/libjli.so...(no debugging symbols found)...done.
Loaded symbols for /home/storm/jdk1.7.0_10/bin/../jre/lib/i386/jli/libjli.so
Reading symbols from /lib/libdl.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib/libdl.so.2
Reading symbols from /lib/libc.so.6...(no debugging symbols found)...done.
Loaded symbols for /lib/libc.so.6
Reading symbols from /lib/ld-linux.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib/ld-linux.so.2
Core was generated by `java'.
Program terminated with signal 11, Segmentation fault.
#0  0x00211daf in __libc_start_main () from /lib/libc.so.6
Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.192.el6.i686   #告诉我们需要安装 debuginfo-install glibc-2.12-1.192.el6.i686 这个32位的包
(gdb) quit
使用xstart连接linux
  • 先安装xterm和 xorg-x11-xauth
yum install -y xterm  xorg-x11-xauth
  • 在使用xstart进行连接
运行命令:/usr/bin/xterm -ls -display $DISPLAY

Linux日常问题记录_第1张图片

查看僵尸进程并杀掉
  • 代码
  ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]' #查看僵尸进程
  ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]' | awk '{print $2}' | xargs kill -9
  
nginxToo many open files打开文件数过多
  • 发现提示Too many open files。因为站点静态文件居多,而且http请求结束后,打开的文件描述符会被自动关闭,所以程序中应当不存在没有关闭文件描述符的情况。在nginx配置文件http块中添加
worker_rlimit_nofile 15360
  • 修改nginx的user用户为root,在重新加载nginx。
user  root;

vsftpd 500 OOPS: cannot change directory:/home/umg
  • CentOS系统安装了SELinux,因为默认下是没有开启FTP的支持,所以访问时都被阻止了
[root@JS-CCOD-HOST6 /]#  setsebool ftp_home_dir 1
[root@JS-CCOD-HOST6 /]#  getsebool -a|grep ftp
allow_ftpd_anon_write --> off
allow_ftpd_full_access --> off
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
ftp_home_dir --> on
ftpd_connect_db --> off
ftpd_use_fusefs --> off
ftpd_use_passive_mode --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
tftp_use_cifs --> off
tftp_use_nfs --> off
fastdfs运行rename 出现 error:5 input/ouput错误
  • 此问题应该是磁盘有异常,最后是通过 fsck /dev/sdc1 -y修复磁盘才解决,先取消挂断,然后执行此命令。
使用iftop命令查询程序所占用的带宽流量
iftop -BnP  
无法格式化/dev/VG1/LV1 is apparently in use by the system; will not make a filesystem here!
启动kafka程序提供端口被占用,解决方法,重点如遇到有程序连接对应程序端口,则直接改掉该链接进程
  • 现象是启动kafka服务,日志说端口被占用,然后使用telnet -antlp 没有程序监听该端口

Linux日常问题记录_第2张图片

  • 使用telnet程序才看有nginx代理监听的程序在链接该端口9092端口,

Linux日常问题记录_第3张图片

  • 最后把nginx进程杀掉然后再启动,kafka程序,启动正常
启动kafka程序提供端口被占用,解决方法,重点如遇到有程序连接对应程序端口,则直接改掉该链接进程
  • 现象是启动kafka服务,日志说端口被占用,然后使用telnet -antlp 没有程序监听该端口

Linux日常问题记录_第4张图片

  • 使用telnet程序才看有nginx代理监听的程序在链接该端口9092端口,

image.png

  • 最后把nginx进程杀掉然后再启动,kafka程序,启动正常
使用rsync删除大量小文件
  • 现网经常有挂载nfs,而去取消挂掉时,又取消挂载不了,使用rsync进行删除,empty目录是空的,app目录是要删除的目录
rsync --delete-before --force -r empty/ app/
oracle启动out of memory异常
  • 具体错误代码
SQL> startup;
ORA-27102: out of memory
Linux-x86_64 Error: 28: No space left on device
  • 解决方法,原因如下
    • 这个问题在linux到64位中比较常见,当SGA的值大于共享内存就会报这个错
1、修改/etc/sysctl.conf文件,然后sysctl -p 刷新加载
fs.file-max = 6815744
kernel.shmall = 16252928
kernel.shmmax = 66571993088
kernel.shmmni = 4096
# semaphores: semmsl, semmns, semopm, semmni
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default=262144
net.core.rmem_max=4194304
net.core.wmem_default=262144

2、清理内存的缓存
echo 3 > /proc/sys/vm/drop_caches 

3、然后正常启动oracle
查看nfs服务器上有哪些客户端挂载
  • 挂载了本机的nfs,避免停止访问后,导致对端客户端无法使用df -h命令
  • 使用showmount -a nfsserverip可以查询对应的客户端挂载
[root@Recordings_Array_Backup ~]#  showmount -a  10.100.0.236
All mount points on 10.100.0.236:
10.100.0.39:/Data
nc 之 Netcat 号称 TCP/IP 的瑞士军刀
ncat 类似ssh后门
  • netcat 有一个 -e 参数,可以在连接建立的时候执行一个程序,并把它的标准输入输出重定向到网络连接上来,于是我们可以在 A 主机上 -e 一下 bash: 就可以进行xshell交互了

  • 安装ncat

 yum -y install nmap-ncat
  • 案例验证
[root@iz2zef9ue9eyhxgv73eeekz tmp]#  ncat  -l -p 9999 -e /bin/bash

[slee@ALY_YU15 ~]$ ifconfig
eth0      Link encap:Ethernet  HWaddr 00:16:3E:12:D9:30
          inet addr:192.168.128.53  Bcast:192.168.255.255  Mask:255.255.128.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:10484259162 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10962046194 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1075296441852 (1001.4 GiB)  TX bytes:3155803901275 (2.8 TiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:302295134251 errors:0 dropped:0 overruns:0 frame:0
          TX packets:302295134251 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:37947952182894 (34.5 TiB)  TX bytes:37947952182894 (34.5 TiB)

[slee@ALY_YU15 ~]$  nc 172.18.10.188 9999
ifconfig
br-45f46bc43ed0: flags=4163  mtu 1500
        inet 172.19.0.1  netmask 255.255.0.0  broadcast 172.19.255.255
        ether 02:42:54:4a:24:a7  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

br-bcf7b0c33525: flags=4163  mtu
探测端口是否开放
nc -v -v -w1 -z 192.168.127.4 8080-9000

解析说明:两次 `-v` 是让它报告更详细的内容,`-w1` 是设置扫描超时时间为 1 秒。

return:
[root@ALY_YU15 ~]# nc -v -v -v -w1 -z 192.168.127.4 8080-9000
nc: connect to 192.168.127.4 port 8080 (tcp) failed: Connection refused
nc: connect to 192.168.127.4 port 8081 (tcp) failed: Connection refused
Connection to 192.168.127.4 8082 port [tcp/us-cli] succeeded!
nc: connect to 192.168.127.4 port 8083 (tcp) failed: Connection refused
nc: connect to 192.168.127.4 port 8084 (tcp) failed: Connection refused
nc: connect to 192.168.127.4 port 8085 (tcp) failed: Connection refused
Connection to 192.168.127.4 8086 port [tcp/d-s-n] succeeded!
nc: connect to 192.168.127.4 port 8087 (tcp) failed: Connection refused
nc: connect to 192.168.127.4 port 8088 (tcp) failed: Connection refused
nc: connect to 192.168.127.4 port 8089 (tcp) failed: Connection refused
Connection to 192.168.127.4 8090 port [tcp/*] succeeded!
Connection to 192.168.127.4 8091 port [tcp/jamlink] succeeded!
nc: connect to 192.168.127.4 port 8092 (tcp) failed: Connection refused
nc: connect to 192.168.127.4 port 8093 (tcp) failed: Connection refused
传输测试
  • 你在配置 iptable 或者安全组策略,禁止了所有端口,但是仅仅开放了 8080 端口,你想测试一下该设置成功与否怎么测试?安装个 nginx 改下端口,外面再用 chrome 访问下或者 telnet/curl 测试下??还是 python -m 启动简单 http 服务 ?其实不用那么麻烦,在需要测试的 A 主机上:
nc -l -p 8080
  • 这样就监听了 8080 端口,然后在 B 主机上连接过去:
nc 192.168.1.2 8080
  • 两边就可以会话了,随便输入点什么按回车,另外一边应该会显示出来,注意,openbsd 版本 netcat 用了 -l 以后可以省略 -p 参数,写做:nc -l 8080 ,但在 GNU netcat 下面无法运行,所以既然推荐写法是加上 -p 参数,两个版本都通用。

  • 老版本的 nc 只要 CTRL+D 发送 EOF 就会断开,新版本一律要 CTRL+C 结束,不管是服务端还是客户端只要任意一边断开了,另一端也就结束了,但是 openbsd 版本的 nc 可以加一个 -k 参数让服务端持续工作。

  • 那么你就可以先用 nc 监听 8080 端口,再远端检查可用,然后又再次随便监听个 8081 端口,远端检测不可用,说明你的安全策略配置成功了,完全不用安装任何累赘的服务。

文件传输
  • 你在一台 B 主机上想往 A 主机上发送一个文件怎么办?不能用 scp / szrz 的话?继续 python 写个 http 上传?装个 ftpd 服务?不用那么麻烦,在 A 主机上监听端口:
nc -l -p 8080 > image.jpg
  • 然后在 B 主机上:
nc 192.168.1.2 8080 < image.jpg

  • netcat 嘛,就是用于通过网络把东西 cat 过去,注意,老版本 GNU / OpenBSD 的 netcat 再文件结束(标准输入碰到 EOF),发送文件一端就会关闭连接,而新版本不会,你需要再开个窗口到 A 主机上看看接收下来的文件尺寸和源文件比较一下判断传输是否结束。 当传输完成后,你再任意一端 CTRL+C 结束它。对于新版 OpenBSD 的 netcat 有一个 -N 参数,可以指明 stdin 碰到 EOF 就关闭连接(和老版本一致),我们写作:
/bin/nc.openbsd -N 192.168.1.2 8080 < image.jpg

  • 你机器上的 nc 命令有可能指向 /bin/nc.traditional 或者 /bin/nc.openbsd 任意一个,这里显示指明调用 openbsd 版本的 netcat。

  • 这样在 openbsd 新版本的 netcat 中使用 -N参数,就不需要再开个终端去手工检查传输是否完成,传输结束了就会自动退出。其实 GNU 版本的 netcat 也有可以加个 -q0 参数,达到和 openbsd 版本 -N 的效果:

/bin/nc.traditional -q0 192.168.1.2 8080 < image.jpg
  • 只不过是 Linux 下面最新的 GNU netcat,对应 Windows 版本 没有该参数,所以从 Windows 传文件过去时,少不了再开个终端看一下进度,如果是 Linux 端发送就没问题了。通过管道协作,搭配 tar 命令,还可以方便的传一整个目录过去,有兴趣可以自己研究。 使用 netcat 这个系统默认安装的工具进行文件传输,可以算作你保底的手段,当 scp/ftp 都没法使用的情况下,你的一个杀手锏。
Centos6停止维护
  • 备用YUM
  • 如果系统无wget命令,无法下载文件时,可以使用上的面地址中的内容,直接编辑原来的Yum源文件互替换即可。
#替换为官方Vault源
wget -O /etc/yum.repos.d/CentOS-Base.repo https://static.lty.fun/%E5%85%B6%E4%BB%96%E8%B5%84%E6%BA%90/SourcesList/Centos-6-Vault-Official.repo

#替换为阿里云Vault镜像
wget -O /etc/yum.repos.d/CentOS-Base.repo https://static.lty.fun/%E5%85%B6%E4%BB%96%E8%B5%84%E6%BA%90/SourcesList/Centos-6-Vault-Aliyun.repo
ginx 的配置参数:underscores_in_headers,这个参数默认值为:off,即默认忽略带下划线的 header。
  • 在 http 或者 server 配置中把 underscores_in_headers 配置参数开关打开:
nginx限流访问
  • nginx具体配置
limit_req_zone $binary_remote_addr zone=one:10m rate=100r/s;” 对所有访问IP的请求超过每秒100个请求时将触发限制,超过的着等待。

1.10m表示计数器内存占用空间;
2.100r/s表示上限为每秒100次请求;
  • 最后修改nginx配置
修改的部分如下:
         1、在http中增加了:“limit_req_zone $binary_remote_addr zone=one:10m rate=100r/s;” 对所有访问IP限制每秒10个请求的出发条件;
         2、location 中 增加了    location /ws4update {…… limit_req zone=one burst=1 nodelay;  ……}   部分,nginx日志中跳转登陆部分。 执行的动作,对应http中zone的名称;

  • 限制每个连接最高达到多少流量带宽
                location /g10 {
             proxy_redirect off;
             proxy_set_header Host $host;
             proxy_set_header X-Real-IP $remote_addr;
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
             proxy_pass http://server_g10;
             limit_rate_after 500k;  #单个连接下载达到500K,之后下面那个参数就降速到400Kb,每秒的下载速度。
             limit_rate 400k;
        }
tomcat的shutdown.sh无法停止进程的解决方法
  • 正常使用tomcat自动脚本shutdown.sh 无法完整停止程序
修改解决方法
  • 解决办法修改bin目录下的catalina.sh文件
PRGDIR=`dirname "$PRG"`  #在此行下面添加目录下判断
if [ -z "$CATALINA_PID" ]; then
  CATALINA_PID=$PRGDIR/CATALINA_PID
  usleep
fi

  • 修改 shutdown.sh文件
#exec "$PRGDIR"/"$EXECUTABLE" stop "$@" 原来基础上加多-force  exec  "$PRGDIR"/"$EXECUTABLE" stop -force "$@"
  • 验证tomcat已经停止
[test@kubernetes-node2 bin]$ ./shutdown.sh
13847
Using CATALINA_BASE:   /home/test/apache-tomcat-7.0.105
Using CATALINA_HOME:   /home/test/apache-tomcat-7.0.105
Using CATALINA_TMPDIR: /home/test/apache-tomcat-7.0.105/temp
Using JRE_HOME:        /home/test/jdk1.8.0_161
Using CLASSPATH:       /home/test/apache-tomcat-7.0.105/bin/bootstrap.jar:/home/test/apache-tomcat-7.0.105/bin/tomcat-juli.jar
Using CATALINA_PID:    /home/test/apache-tomcat-7.0.105/bin/CATALINA_PID
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=512m; support was removed in 8.0
Java HotSpot(TM) 64-Bit Server VM warning: Cannot open file /home/dms/apache-tomcat-7.0.105/bin/logs/gc.log due to No such file or directory
Tomcat stopped.

[test@kubernetes-node2 bin]$ jps
21327 Jps


Mysql int值字段溢出4294967295
  • 解决方法: 字段类型设置为 bigint即可
keepalived 都监听vip问题
  • 查看配置文件 HostA
global_defs {
  router_id ceb-yu1 #在集群中唯一
}
vrrp_instance VI_1 {
  state MASTER
  interface eth0
  #unicast peer 格式必须完全匹配!否则会起不来,必须写成三行。
  unicast_peer {
     192.168.27.34  #该单播地址必须配置对应集群中的ip,非VIP地址
  }
  virtual_router_id 45
  priority 67 advert_int 1
  authentication {
    auth_type PASS
    auth_pass 2222
  }
  virtual_ipaddress {
      192.168.27.226 dev eth0
  }
}

  • 查看配置文件 HostB
global_defs {
  router_id ceb-yu2  #在集群中唯一
}
vrrp_instance VI_1 {
  state BACKUP
  interface eth0
  #unicast peer 格式必须完全匹配!否则会起不来,必须写成三行。
  unicast_peer {
      192.168.27.121 #该单播地址必须配置对应集群中的ip,非VIP地址
  }
  virtual_router_id 45
  priority 66
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass 2222
  }
  virtual_ipaddress {
      192.168.27.226 dev eth0
  }
}

  • 异常情况,IP 192.168.27.34 > 192.168.27.34,也就是配置unicast_peer单播为对端ip

Linux日常问题记录_第5张图片

  • 正常情况
    • tcpdump -nn -i any net 192.168.27.0/24|grep vrid

image.png

nginx支持代理tcp和udp协议
  • 首先需要编译--with-stream该模块支持tcp和udp协议的代理
./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-stream
  • 修改配置文件,在http块的外面不然就会有该错误信息nginx: [emerg] "stream" directive is not allowed here in
    stream
    {
        server {
            listen  3478  udp reuseport;
            proxy_pass  123.56.27.245:3478;
        }
        server {
            listen  443;
            proxy_pass  123.56.27.245:443;
        }
    }
nginx 日志打印转发upstream_addr日志
  • nginx配置文件修改,然后再重启nginx,可以清晰查看转发的那台服务器上
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for" xxxxx"$http_entid"-"$http_agentid"-"$upstream_addr"';
ngin正向代理yum,为没公网服务器yum安装,以下是centos6
  • 为了解决没公网服务器安装程序,使用nginx正向代理转发进行yum安装
server{
        listen 80;
        server_name    mirrors.aliyun.com;
        location ~ ^/*{
                 proxy_redirect off;
                 proxy_set_header Host $host;
                 proxy_set_header X-Forwarded-Host $host;
                 proxy_set_header X-Forwarded-Server $host;
                 proxy_set_header X-Real-IP $remote_addr;
                 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                 proxy_buffering off;
                 chunked_transfer_encoding       off;
                 proxy_pass     http://mirrors.aliyun.com;
                 client_max_body_size 512m;
        }
    }
  • 没公网ip地址服务器,操作如下,添加CentOS-Base.repo对应内容
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client.  You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the 
# remarked out baseurl= line instead.
#
#
 
[base]
name=CentOS-6.10 - Base - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos-vault/6.10/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-6
 
#released updates 
[updates]
name=CentOS-6.10 - Updates - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos-vault/6.10/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-6
 
#additional packages that may be useful
[extras]
name=CentOS-6.10 - Extras - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos-vault/6.10/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-6
 
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-6.10 - Plus - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos-vault/6.10/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-6
 
#contrib - packages by Centos Users
[contrib]
name=CentOS-6.10 - Contrib - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos-vault/6.10/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-6

  • 然后再添加hosts解析
[root@ccod_sg vhosts]# vim /etc/hosts
192.168.0.132 mirrors.aliyun.com   
nfs导致df命令卡死处理
  • nfs导致df命令卡死处理
[root@JS-CCOD-UCDS ~]# vim /etc/mtab  #把对应的nfs挂载删除调即可。
screen后台运行
后台运行
1.screen -S yourname: 新建一个会话 eg: screen -S sipp1
2.screen -ls:列出当前所有会话
3.screen -r yourname:回到这个会话
4.Ctrl+A +D: 退出screen
ansbile异常
"msg": "Aborting, target uses selinux but python bindings (libselinux-python) aren't installed!"}问题
这个错误信息表明目标系统需要安装Python的SELinux绑定库(libselinux-python)才能成功进行操作。
为了解决此错误,请使用以下命令安装所需的Python包:
在CentOS系统中安装SELinux python bindings
sudo yum install libselinux-python
在Debian或Ubuntu系统中安装SELinux python bindings:
sudo apt-get install python-selinux
这将安装SELinux的必要Python绑定,使操作可以成功进行而不会发生错误。
mongodb非交互式查询数据
  • 适用于查询少量数据或者创建索引
`--eval` 是 MongoDB Shell 启动时的一个参数,可以使用该参数执行一段 JavaScript 代码。

以下是一个使用 `--eval` 参数查询数据的示例:

假设有一个名为 `students` 的集合,其中包含了一些学生的信息。我们可以使用以下命令查询名称为 `Tom` 的学生信息:

mongo --eval 'db.students.find({name: "Tom"})' dbname

其中,`dbname` 是数据库名称。
以上命令会启动 MongoDB Shell,然后执行 JavaScript 代码 `db.students.find({name: "Tom"})`,返回所有名称为 `Tom` 的学生信息。
需要注意的是,使用 `--eval` 参数执行代码时需要注意安全性问题,应避免执行恶意代码。建议在生产环境中使用其他方式执行代码和查询数据。
作为 man 替代品的 tldr
  • tldr 命令行工具显示简化的命令用法信息,主要包括示例。它是作为社区项目 tldr pages 的客户端。

  • 这个工具不能代替 man。man 页面仍然是许多工具规范而完整的信息源。然而,在某些情况下,man 提供的信息太多了。有时候,你不需要一个命令的所有信息;你只是试着记住基本的选项。例如,curl 命令的 man 页面几乎有 3000 行。相反,curl 的 tldr 页面只有 40 行,如下所示:

  • yum进行安装

[root@flink1 ~]# yum -y install tldr
[root@flink1 ~]# tldr  awk
  awk
  A versatile programming language for working on files.
  More information: https://github.com/onetrueawk/awk.

  - Print the fifth column (a.k.a. field) in a space-separated file:
    awk '{print $5}' path/to/file

  - Print the second column of the lines containing "foo" in a space-separated file:
    awk '/foo/ {print $2}' path/to/file

  - Print the last column of each line in a file, using a comma (instead of space) as a field separator:
    awk -F ',' '{print $NF}' path/to/file

  - Sum the values in the first column of a file and print the total:
    awk '{s+=$1} END {print s}' path/to/file

  - Print every third line starting from the first line:
    awk 'NR%3==1' path/to/file

  - Print different values based on conditions:
    awk '{if ($1 == "foo") print "Exact match foo"; else if ($1 ~ "bar") print "Partial match bar"; else print "Baz"}' path/to/file

  - Print all lines where the 10th column value equals the specified value:
    awk '($10 == value)'

  - Print all the lines which the 10th column value is between a min and a max:
    awk '($10 >= min_value && $10 <= max_value)'
作为 du 替代品的 ncdu
  • 按照使用
[root@flink1 ~]# yum -y install ncdu
[root@flink1 home]# ncdu  /home/flink/
--- /home/flink -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    7.7 GiB [###########################] /hadoop-3.3.2
    5.4 GiB [##################         ] /zookeeper-3.4.14
    2.6 GiB [########                   ] /BAK
    1.8 GiB [######                     ] /flink-1.12.4
    1.1 GiB [###                        ] /kafka_2.11-2.3.1
  362.4 MiB [#                          ] /jdk1.8.0_131
   44.0 KiB [                           ]  .bash_history
   24.0 KiB [                           ]  hs_err_pid19988.log
   24.0 KiB [                           ]  hs_err_pid30490.log
   24.0 KiB [                           ]  hs_err_pid27390.log
   24.0 KiB [                           ]  hs_err_pid25531.log
   24.0 KiB [                           ]  hs_err_pid4484.log
   24.0 KiB [                           ]  hs_err_pid898.log
   24.0 KiB [                           ]  hs_err_pid32385.log
   16.0 KiB [                           ] /.ssh
   12.0 KiB [                           ]  .viminfo
    4.0 KiB [                           ]  .bash_profile_bak
    4.0 KiB [                           ]  .bash_profile
    4.0 KiB [                           ]  .bashrc
    4.0 KiB [                           ] /.oracle_jre_usage
    4.0 KiB [                           ]  .bash_logout
 Total disk usage:  18.9 GiB  Apparent size:  37.8 GiB  Items: 84519

zookeeper 设置用户和密码
  • zookeeper 设置用户和密码
[storm@ccod_mongodb_2 bin]$ ./zkCli.sh 
[zk: localhost:2181(CONNECTED) 0] addauth digest admin:123456  #admin为用户名, 123456为密码。
[zk: localhost:2181(CONNECTED) 1] setAcl / auth:admin:123456:cdrwa  
[zk: localhost:2181(CONNECTED) 2] getAcl /
'digest,'admin:0uek/hZ/V9fgiM35b0Z2226acMQ=
: cdrwa

[storm@ccod_mongodb_2 bin]$ ./zkCli.sh  #登录连接成功后每次连接需要输入   addauth digest admin:123456
[zk: localhost:2181(CONNECTED) 0] ls /
Insufficient permission : /
[zk: localhost:2181(CONNECTED) 1]  addauth digest admin:123456
[zk: localhost:2181(CONNECTED) 2] ls /
[test, zookeeper]
非交互式非root创建定时任务
  • 实现
    • 比如我们要追加一个晚上1点的定时任务 ,命令如下:
      (crontab -l;echo "0 1 * * * sh /tmp/abc.sh > /dev/null 2>&1") | crontab -
    • 查看计划任务
      crontab -l
    • 删除计划任务
      crontab -l | grep -v "abc.sh" | crontab

你可能感兴趣的:(Linux运维之路,linux,linux,运维,服务器)