[实践OK]Linux下tar命令implausibly old time stamp错误的解决方法
Unix/LinuxC技术 jackxiang 2020-3-10 22:06
背景:打包yum的仓库文件到外网机器解压时发现的,这个问题可以忽略,一般来讲,不影响正常使用。
今天头一次见到tar zxf files.tar.gz 会出现包内文件报错, implausibly old time stamp的问题,
由于压缩包是自己打包的, 单独访问的时候文件都是正常的. 后面搜索测试了一下问题解决了. 在此记录一下:. B$ r/ i7 W) z, U9 o k( ^3 n
先把原文件(打包前的文件) 执行一下命令:: B3 A6 k# w* e- {* h
touch *
同步一下文件时间. 再重新打包, 然后再测试解包, ok 问题解决了.7 v0 Y9 p9 Q5 }' l& s5 @2 t6 s
0 ~/ D( S1 z0 T: Z
扩展:
文件时间大于你的系统时间,也就是说文件是早于当前时间创建/修改的,这个问题可以忽略,一般来讲,不影响正常使用。" {# L/ H8 ~1 _" g- B5 i
你也可以在展开文件后,用命令 “touch * ” 同步文件时间。( {+ H5 b V+ d% @5 ?
参考:http://forum.ubuntu.org.cn/viewtopic.php?p=2059005
今天头一次见到tar zxf files.tar.gz 会出现包内文件报错, implausibly old time stamp的问题,
由于压缩包是自己打包的, 单独访问的时候文件都是正常的. 后面搜索测试了一下问题解决了. 在此记录一下:. B$ r/ i7 W) z, U9 o k( ^3 n
先把原文件(打包前的文件) 执行一下命令:: B3 A6 k# w* e- {* h
touch *
同步一下文件时间. 再重新打包, 然后再测试解包, ok 问题解决了.7 v0 Y9 p9 Q5 }' l& s5 @2 t6 s
0 ~/ D( S1 z0 T: Z
扩展:
文件时间大于你的系统时间,也就是说文件是早于当前时间创建/修改的,这个问题可以忽略,一般来讲,不影响正常使用。" {# L/ H8 ~1 _" g- B5 i
你也可以在展开文件后,用命令 “touch * ” 同步文件时间。( {+ H5 b V+ d% @5 ?
参考:http://forum.ubuntu.org.cn/viewtopic.php?p=2059005
[实践OK]pkg install lsof -y无法安装和pkg install -y lsof是有区别的,FreeBSD中安装pkg,pkg_add已经改用pkg了,怎样查询一个文件属于哪个ports包,类似CentOS里面的rpm -qf file反查在哪你上rpm包里面一样的命令是pkg which /usr/local/lib/libicuio.so.58
Unix/LinuxC技术 jackxiang 2020-2-27 00:33
FreeBSD下面检查某程序是不是包的形式安装的命令行:
pkg info -l curl|grep curl.h
/usr/local/include/curl/curl.h
/usr/local/include/curl/header.h
pkg info -l curl|grep so
/usr/local/include/curl/websockets.h
/usr/local/lib/libcurl.so
/usr/local/lib/libcurl.so.4
/usr/local/lib/libcurl.so.4.8.0
pkg info #查看BSD系统中安装了哪些pkg包
pkg info lrzsz-0.12.20_4 #查看具体某个包信息
pkg info -l lrzsz-0.12.20_4 #查看此包有哪些文件
lrzsz-0.12.20_4:
/usr/local/bin/lrb
/usr/local/bin/lrx
/usr/local/bin/lrz
/usr/local/bin/lsb
/usr/local/bin/lsx
/usr/local/bin/lsz
/usr/local/man/man1/lrz.1.gz
/usr/local/man/man1/lsz.1.gz
/usr/local/share/licenses/lrzsz-0.12.20_4/GPLv2
/usr/local/share/licenses/lrzsz-0.12.20_4/LICENSE
/usr/local/share/licenses/lrzsz-0.12.20_4/catalog.mk
/usr/local/share/locale/de/LC_MESSAGES/lrzsz.mo
据下面的这个文件, /usr/local/share/locale/de/LC_MESSAGES/lrzsz.mo ,反查到到来自:rzsz-0.12.20_4,如下:
pkg which /usr/local/share/locale/de/LC_MESSAGES/lrzsz.mo
/usr/local/share/locale/de/LC_MESSAGES/lrzsz.mo was installed by package lrzsz-0.12.20_4
使用 pkg 包管理器来查找包含 libssl.so.9 的软件包:
pkg search libssl.so.9
删掉一些安装的软件包命令,-f强制:
sudo pkg delete -f <package_name>
好了,解决问题开始下:
pkg which /usr/lib/libssl.so.9
/usr/lib/libssl.so.9 was not found in the database
sudo pkg install openssl
sudo ldconfig -m /usr/local/lib
root@freebsd-unmp-10-10-0-237:~ # pkg_add -r wget
pkg_add: Command not found.
root@freebsd-unmp-10-10-0-237:~ # pkg install wget
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y
Bootstrapping pkg from pkg+http://pkg.FreeBSD.org/FreeBSD:13:amd64/quarterly, please wait...
Verifying signature with trusted certificate pkg.freebsd.org.2013102301... done
Installing pkg-1.16.3...
Extracting pkg-1.16.3: 100%
Updating FreeBSD repository catalogue...
Fetching meta.conf: 100% 163 B 0.2kB/s 00:01
Fetching packagesite.txz: 100% 6 MiB 407.3kB/s 00:16
Processing entries: 100%
FreeBSD repository update completed. 30360 packages processed.
All repositories are up to date.
Updating database digests format: 100%
The following 5 package(s) will be affected (of 0 checked):
New packages to be INSTALLED:
gettext-runtime: 0.21
indexinfo: 0.3.1
libidn2: 2.3.0_1
libunistring: 0.9.10_1
wget: 1.21
Number of packages to be installed: 5
The process will require 7 MiB more space.
1 MiB to be downloaded.
Proceed with this action? [y/N]:
摘自:http://www.ittang.com/2008/0309/4832.html
kg install pkg and let it bootstrap / upgrade itself. Then use pkg install foo, etc. pkg_add does not exist anymore, as you've found out.
man pkg
which Query the database for package(s) that installed a specific file.
pkg which /usr/local/lib/libicuio.so.58
/usr/local/lib/libicuio.so.58 was installed by package icu-58.2_2,1
#pkg which /usr/local/bin/openssl
/usr/local/bin/openssl was installed by package openssl-1.0.2l,1
来自:https://www.howtoing.com/pkg-command-examples-to-manage-packages-in-freebsd
附:从Ports存储库本地下载软件包
为了从Ports存储库本地下载软件包,而不在系统上安装软件包,请使用fetch开关运行pkg命令 。
下载的软件包二进制文件是压缩的.txz文件,可以在/ var / cache / pkg / system路径中找到。
# pkg fetch package_name
pkg info -l curl|grep curl.h
/usr/local/include/curl/curl.h
/usr/local/include/curl/header.h
pkg info -l curl|grep so
/usr/local/include/curl/websockets.h
/usr/local/lib/libcurl.so
/usr/local/lib/libcurl.so.4
/usr/local/lib/libcurl.so.4.8.0
pkg info #查看BSD系统中安装了哪些pkg包
pkg info lrzsz-0.12.20_4 #查看具体某个包信息
pkg info -l lrzsz-0.12.20_4 #查看此包有哪些文件
lrzsz-0.12.20_4:
/usr/local/bin/lrb
/usr/local/bin/lrx
/usr/local/bin/lrz
/usr/local/bin/lsb
/usr/local/bin/lsx
/usr/local/bin/lsz
/usr/local/man/man1/lrz.1.gz
/usr/local/man/man1/lsz.1.gz
/usr/local/share/licenses/lrzsz-0.12.20_4/GPLv2
/usr/local/share/licenses/lrzsz-0.12.20_4/LICENSE
/usr/local/share/licenses/lrzsz-0.12.20_4/catalog.mk
/usr/local/share/locale/de/LC_MESSAGES/lrzsz.mo
据下面的这个文件, /usr/local/share/locale/de/LC_MESSAGES/lrzsz.mo ,反查到到来自:rzsz-0.12.20_4,如下:
pkg which /usr/local/share/locale/de/LC_MESSAGES/lrzsz.mo
/usr/local/share/locale/de/LC_MESSAGES/lrzsz.mo was installed by package lrzsz-0.12.20_4
使用 pkg 包管理器来查找包含 libssl.so.9 的软件包:
pkg search libssl.so.9
删掉一些安装的软件包命令,-f强制:
sudo pkg delete -f <package_name>
好了,解决问题开始下:
pkg which /usr/lib/libssl.so.9
/usr/lib/libssl.so.9 was not found in the database
sudo pkg install openssl
sudo ldconfig -m /usr/local/lib
root@freebsd-unmp-10-10-0-237:~ # pkg_add -r wget
pkg_add: Command not found.
root@freebsd-unmp-10-10-0-237:~ # pkg install wget
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y
Bootstrapping pkg from pkg+http://pkg.FreeBSD.org/FreeBSD:13:amd64/quarterly, please wait...
Verifying signature with trusted certificate pkg.freebsd.org.2013102301... done
Installing pkg-1.16.3...
Extracting pkg-1.16.3: 100%
Updating FreeBSD repository catalogue...
Fetching meta.conf: 100% 163 B 0.2kB/s 00:01
Fetching packagesite.txz: 100% 6 MiB 407.3kB/s 00:16
Processing entries: 100%
FreeBSD repository update completed. 30360 packages processed.
All repositories are up to date.
Updating database digests format: 100%
The following 5 package(s) will be affected (of 0 checked):
New packages to be INSTALLED:
gettext-runtime: 0.21
indexinfo: 0.3.1
libidn2: 2.3.0_1
libunistring: 0.9.10_1
wget: 1.21
Number of packages to be installed: 5
The process will require 7 MiB more space.
1 MiB to be downloaded.
Proceed with this action? [y/N]:
摘自:http://www.ittang.com/2008/0309/4832.html
kg install pkg and let it bootstrap / upgrade itself. Then use pkg install foo, etc. pkg_add does not exist anymore, as you've found out.
man pkg
which Query the database for package(s) that installed a specific file.
pkg which /usr/local/lib/libicuio.so.58
/usr/local/lib/libicuio.so.58 was installed by package icu-58.2_2,1
#pkg which /usr/local/bin/openssl
/usr/local/bin/openssl was installed by package openssl-1.0.2l,1
来自:https://www.howtoing.com/pkg-command-examples-to-manage-packages-in-freebsd
附:从Ports存储库本地下载软件包
为了从Ports存储库本地下载软件包,而不在系统上安装软件包,请使用fetch开关运行pkg命令 。
下载的软件包二进制文件是压缩的.txz文件,可以在/ var / cache / pkg / system路径中找到。
# pkg fetch package_name
[实践OK]FreeBSD下类似Linux的ldconfig -P的动态链接库的使用方法。freebsd添加lib搜索路径的方法,FreeBSD修改可执行文件路径和库文件路径。
Unix/LinuxC技术 jackxiang 2020-2-26 21:40
freebsd添加lib搜索路径的方法:
(1) 添加到LD_LIBRARY_PATH,这个多数人都知道了,坏处是传递的时候容易被砍掉,如apache
(2) ld.so.conf,设置了完全没用,不要试这个。。。
(3) ldconfig -m PATH,一次加载一次有效
(4) 修改/usr/local/libdata/ldconfig/,例如mysql,可以建一个文件/usr/local/libdata/ldconfig/mysql
内容是(假设装到了/usr/local/mysql):
/usr/local/mysql/lib/mysql
然后/etc/rc.d/ldconfig restart就行了
FreeBSD修改可执行文件路径和库文件路径
1、库文件路径修改:
FreeBSD和linux不是一样的。
在/etc/下加入ld-elf.so.conf里面写上你的目录,比如/usr/local/samba/lib,没有的话创建一个。
然后
sudo /etc/rc.d/ldconfig restart
or
/etc/rc.d/ldconfig forcerestart
好了,查看库文件路径
# ldconfig -r
# ldconfig -r | less
或者/etc/rc.conf里加ldconfig_path="",这是系统起来的时候再设置的。
2、可执行文件路径修改:
在用户目录下面,比如/root或者/home/ztz0223下面,打开.cshrc文件,修改set path部分:
# $FreeBSD: release/9.1.0/share/skel/dot.cshrc 242850 2012-11-10 06:05:04Z eadler $
#
# .cshrc - csh resource script, read at beginning of execution by each shell
#
# see also csh(1), environ(7).
# more examples available at /usr/share/examples/csh/
#
alias h history 25
alias j jobs -l
alias la ls -aF
alias lf ls -FA
alias ll ls -lAF
# A righteous umask
umask 22
set path =
(/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin $HOME/bin)
修改上面set path比如:
set path =
(/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin
/usr/local/samba/bin $HOME/bin)
来自:https://www.xuebuyuan.com/1082615.html
https://www.cyberciti.biz/faq/freebsd-ldconfig-v-lost-dynamic-linker-configuration/
(1) 添加到LD_LIBRARY_PATH,这个多数人都知道了,坏处是传递的时候容易被砍掉,如apache
(2) ld.so.conf,设置了完全没用,不要试这个。。。
(3) ldconfig -m PATH,一次加载一次有效
(4) 修改/usr/local/libdata/ldconfig/,例如mysql,可以建一个文件/usr/local/libdata/ldconfig/mysql
内容是(假设装到了/usr/local/mysql):
/usr/local/mysql/lib/mysql
然后/etc/rc.d/ldconfig restart就行了
FreeBSD修改可执行文件路径和库文件路径
1、库文件路径修改:
FreeBSD和linux不是一样的。
在/etc/下加入ld-elf.so.conf里面写上你的目录,比如/usr/local/samba/lib,没有的话创建一个。
然后
sudo /etc/rc.d/ldconfig restart
or
/etc/rc.d/ldconfig forcerestart
好了,查看库文件路径
# ldconfig -r
# ldconfig -r | less
或者/etc/rc.conf里加ldconfig_path="",这是系统起来的时候再设置的。
2、可执行文件路径修改:
在用户目录下面,比如/root或者/home/ztz0223下面,打开.cshrc文件,修改set path部分:
# $FreeBSD: release/9.1.0/share/skel/dot.cshrc 242850 2012-11-10 06:05:04Z eadler $
#
# .cshrc - csh resource script, read at beginning of execution by each shell
#
# see also csh(1), environ(7).
# more examples available at /usr/share/examples/csh/
#
alias h history 25
alias j jobs -l
alias la ls -aF
alias lf ls -FA
alias ll ls -lAF
# A righteous umask
umask 22
set path =
(/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin $HOME/bin)
修改上面set path比如:
set path =
(/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin
/usr/local/samba/bin $HOME/bin)
来自:https://www.xuebuyuan.com/1082615.html
https://www.cyberciti.biz/faq/freebsd-ldconfig-v-lost-dynamic-linker-configuration/
[实践OK]Beyond Compare在Mac OS系统下永久试用,比较word用文本比较。
Unix/LinuxC技术 jackxiang 2020-2-26 18:27
Microsoft Word .doc和Adobe .pdf文件的文本内容也可以进行比较但不能编辑。
https://www.bilibili.com/read/mobile?id=14506059
一、原理
Beyond Compare每次启动后会先检查注册信息,试用期到期后就不能继续使用。解决方法是在启动前,先删除注册信息,然后再启动,这样就可以永久免费试用了。
二、下载
首先下载Beyond Compare最新版本,链接如下:https://www.scootersoftware.com/download.php
三、安装
下载完成后,直接安装。
四、创建BCompare文件
1.进入Mac应用程序目录下,找到刚刚安装好的Beyond Compare,路径如下/Applications/Beyond Compare 2.app/Contents/MacOS。
2.修改启动程序文件BCompare为BCompare.real。
3.在当前目录下新建一个文件BCompare,文件内容如下:
/Applications/Beyond Compare 2.app/Contents/MacOS/BCompare
#!/bin/bash
rm "/Users/$(whoami)/Library/Application Support/Beyond Compare/registry.dat"
"`dirname "$0"`"/BCompare.real $@
4.保存BCompare文件。
5.修改文件的权限:
chmod a+x /Applications/Beyond Compare 2.app/Contents/MacOS/BCompare
以上步骤完成后,再次打开Beyond Compare就可以正常使用了,enjoy it。
转自:https://blog.csdn.net/wu__di/article/details/82390196
https://www.bilibili.com/read/mobile?id=14506059
一、原理
Beyond Compare每次启动后会先检查注册信息,试用期到期后就不能继续使用。解决方法是在启动前,先删除注册信息,然后再启动,这样就可以永久免费试用了。
二、下载
首先下载Beyond Compare最新版本,链接如下:https://www.scootersoftware.com/download.php
三、安装
下载完成后,直接安装。
四、创建BCompare文件
1.进入Mac应用程序目录下,找到刚刚安装好的Beyond Compare,路径如下/Applications/Beyond Compare 2.app/Contents/MacOS。
2.修改启动程序文件BCompare为BCompare.real。
3.在当前目录下新建一个文件BCompare,文件内容如下:
/Applications/Beyond Compare 2.app/Contents/MacOS/BCompare
#!/bin/bash
rm "/Users/$(whoami)/Library/Application Support/Beyond Compare/registry.dat"
"`dirname "$0"`"/BCompare.real $@
4.保存BCompare文件。
5.修改文件的权限:
chmod a+x /Applications/Beyond Compare 2.app/Contents/MacOS/BCompare
以上步骤完成后,再次打开Beyond Compare就可以正常使用了,enjoy it。
转自:https://blog.csdn.net/wu__di/article/details/82390196
[实践OK]mac查看当前调用tcp的进程并关闭指定进程
Unix/LinuxC技术 jackxiang 2020-2-10 13:55
mac查看当前调用tcp的进程并关闭指定进程:
一)查看本机macbook打开的端口:
lsof -iTCP -sTCP:LISTEN
MotionPro 2766 jackXiang 16u IPv4 0xc8299b5de6c3cc43 0t0 TCP localhost:60012 (LISTEN)
Adobe\x20 2858 jackXiang 13u IPv4 0xc8299b5dea54da73 0t0 TCP localhost:15292 (LISTEN)
com.docke 2890 jackXiang 8u IPv4 0xc8299b5dea125b5b 0t0 TCP localhost:56199 (LISTEN)
phpstorm 2918 jackXiang 186u IPv4 0xc8299b5dea91527b 0t0 TCP localhost:6942 (LISTEN)
phpstorm 2918 jackXiang 362u IPv4 0xc8299b5deaa2a8b3 0t0 TCP localhost:63342 (LISTEN)
二)查看连接远程端口:
lsof -iTCP -dTCP:LISTEN
lsof -iTCP -dTCP:LISTEN|grep Google #查看google浏览器连接的端口
safara进程:
/System/Library/Frameworks/WebKit.framework/Versions/A/XPCServices/com.apple.WebKit.WebContent.xpc/Contents/MacOS/com.apple.WebKit.WebContent
502 57037 1 0 11:42上午 ?? 0:06.24 /System/Library/Frameworks/WebKit.framework/Versions/A/XPCServices/com.apple.WebKit.WebContent.xpc/Contents/MacOS/com.apple.WebKit.WebContent
一)查看本机macbook打开的端口:
lsof -iTCP -sTCP:LISTEN
MotionPro 2766 jackXiang 16u IPv4 0xc8299b5de6c3cc43 0t0 TCP localhost:60012 (LISTEN)
Adobe\x20 2858 jackXiang 13u IPv4 0xc8299b5dea54da73 0t0 TCP localhost:15292 (LISTEN)
com.docke 2890 jackXiang 8u IPv4 0xc8299b5dea125b5b 0t0 TCP localhost:56199 (LISTEN)
phpstorm 2918 jackXiang 186u IPv4 0xc8299b5dea91527b 0t0 TCP localhost:6942 (LISTEN)
phpstorm 2918 jackXiang 362u IPv4 0xc8299b5deaa2a8b3 0t0 TCP localhost:63342 (LISTEN)
二)查看连接远程端口:
lsof -iTCP -dTCP:LISTEN
lsof -iTCP -dTCP:LISTEN|grep Google #查看google浏览器连接的端口
safara进程:
/System/Library/Frameworks/WebKit.framework/Versions/A/XPCServices/com.apple.WebKit.WebContent.xpc/Contents/MacOS/com.apple.WebKit.WebContent
502 57037 1 0 11:42上午 ?? 0:06.24 /System/Library/Frameworks/WebKit.framework/Versions/A/XPCServices/com.apple.WebKit.WebContent.xpc/Contents/MacOS/com.apple.WebKit.WebContent
#lsof -p 2072 #PID
php-fpm 2072 root DEL REG 0,5 22380 /dev/zero
php-fpm 2072 root 0u CHR 1,3 0t0 7732 /dev/null
php-fpm 2072 root 1u CHR 1,3 0t0 7732 /dev/null
查看:
ps -o 'pid,ppid,pgid,sid,comm' -C nohup
PID PPID PGID SID COMMAND
7478 32279 7478 32251 nohup
cat nohup.c
make nohup
cc nohup.c -o nohup
#ps -C nohup s
UID PID PENDING BLOCKED IGNORED CAUGHT STAT TTY TIME COMMAND
0 2072 0000000000000000 0000000000000000 00000000000000001 0000000180014a06 Ss ? 0:07 php-fpm: master process (
屏蔽了SIGHUP,终端关闭的时候,会忽略终端发送的SIGHUP信号,继续运行服务。
#kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
IGNORED 0000000000001000
来自:https://mp.weixin.qq.com/s/hMXwg9yUSN8rC12HeVp2RA
php-fpm 2072 root DEL REG 0,5 22380 /dev/zero
php-fpm 2072 root 0u CHR 1,3 0t0 7732 /dev/null
php-fpm 2072 root 1u CHR 1,3 0t0 7732 /dev/null
查看:
ps -o 'pid,ppid,pgid,sid,comm' -C nohup
PID PPID PGID SID COMMAND
7478 32279 7478 32251 nohup
cat nohup.c
make nohup
cc nohup.c -o nohup
#ps -C nohup s
UID PID PENDING BLOCKED IGNORED CAUGHT STAT TTY TIME COMMAND
0 2072 0000000000000000 0000000000000000 00000000000000001 0000000180014a06 Ss ? 0:07 php-fpm: master process (
屏蔽了SIGHUP,终端关闭的时候,会忽略终端发送的SIGHUP信号,继续运行服务。
#kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
IGNORED 0000000000001000
来自:https://mp.weixin.qq.com/s/hMXwg9yUSN8rC12HeVp2RA
[实践OK]Sorry, terminal is not big enough的解决方法,Alt +Enter最大化终端窗口就Ok了[SecureCRT软件]。
Unix/LinuxC技术 jackxiang 2020-1-13 15:13
解决方法有三种:
1、当CPU数超出终端大小不多时,可以通过ALT + Enter 最大化当前窗口(SecureCRT客户端时);
2、mpstat -P ALL
3、sar -P ALL
方法1一般不会有效果。这里主要说要方法2和方法3。
接下来我要说的是用top命令,按数字1键,查看CPU各个核心使用情况,提示:Sorry, terminal is not big enough。
在此之前的服务器2颗6核CPU,开启超线程24。当我们遇到这个情况的时候,用Alt +Enter最大化终端窗口就Ok了[SecureCRT软件]。
现在的服务器2颗8核,超线程32核,此时,再用Alt +Enter最大化终端窗口[SecureCRT软件],Sorry, terminal is not big enough
没办法了吗?网上说用putty,上次我匆匆试了一下,没有搞定,就另想它法了,linux系统的开源人,为我提供了许多好用的命令,
mpstat命令,结合一些参数,如下:
mpstat命令详解:
http://www.bdkyr.com/view.php?id=73
mpstat -P ALL
#执行结果如图
有人问了,可以看,但是不实时呀。别急,还有呢,再加点参数:
mpstat -P ALL 2 1000
这样就可以搞定了,不信你找一台2路8核的服务器,试试,很有效果的,shell搞的话,可以自己弄个更强大,更人性化的实时查看工具。
来自:http://www.361way.com/terminal-big-enough/4514.html
1、当CPU数超出终端大小不多时,可以通过ALT + Enter 最大化当前窗口(SecureCRT客户端时);
2、mpstat -P ALL
3、sar -P ALL
方法1一般不会有效果。这里主要说要方法2和方法3。
接下来我要说的是用top命令,按数字1键,查看CPU各个核心使用情况,提示:Sorry, terminal is not big enough。
在此之前的服务器2颗6核CPU,开启超线程24。当我们遇到这个情况的时候,用Alt +Enter最大化终端窗口就Ok了[SecureCRT软件]。
现在的服务器2颗8核,超线程32核,此时,再用Alt +Enter最大化终端窗口[SecureCRT软件],Sorry, terminal is not big enough
没办法了吗?网上说用putty,上次我匆匆试了一下,没有搞定,就另想它法了,linux系统的开源人,为我提供了许多好用的命令,
mpstat命令,结合一些参数,如下:
mpstat命令详解:
http://www.bdkyr.com/view.php?id=73
mpstat -P ALL
#执行结果如图
有人问了,可以看,但是不实时呀。别急,还有呢,再加点参数:
mpstat -P ALL 2 1000
这样就可以搞定了,不信你找一台2路8核的服务器,试试,很有效果的,shell搞的话,可以自己弄个更强大,更人性化的实时查看工具。
来自:http://www.361way.com/terminal-big-enough/4514.html
[实践OK]Macbook 升级到catalina 后的一些/data目录不见了等问题
Unix/LinuxC技术 jackxiang 2020-1-8 15:06
使用安装包安装的phpstrom无法正常启动,原因是原默认wwwroot是 /data/www,现在系统禁用了对根目录的使用所以只能将dbpath指向到自定义目录,如
将原来的目录迁移到/var/data,在/data下面做软链接即可,原来的升级备份位置在哪儿?
系统升级完成后桌面会出现一个目录 迁移的项目 将这个目录下的/data/db 下的文件拷贝到新的dbpath就可以了。
原文链接:https://blog.csdn.net/StillCity/article/details/102562281
二)如何做软链接?ln -sf /var/data /data
在这次mac升级系统后,我发现我的/data目录消失了,于是我执行了命令:
mkdir /data
结果发现居然提示我Read-Only filesystem,即使加上了sudo也没用
在我查阅相关资料后找到了解决办法(关闭SIP,然后输入sudo mount -uw /,创建文件夹添加权限,最后启用SIP),具体步骤如下:
1、重启mac,按住Command+R,等到系统进入安全模式。
2、选择一个账户,然后点击屏幕上方的工具栏找到命令行工具。
3、执行,命令 csrutil disable
4、重启电脑后,不要进入安全模式,执行命令sudo mount -uw /
5、执行命令sudo mkdir /data
6、执行命令sudo chmod 777 /data
7、重启电脑,进入安全模式,执行命令csrutil enable (开启SIP)
原文链接:https://blog.csdn.net/weiyoushi4001/article/details/102928575
大体运行命令:
将原来的目录迁移到/var/data,在/data下面做软链接即可,原来的升级备份位置在哪儿?
系统升级完成后桌面会出现一个目录 迁移的项目 将这个目录下的/data/db 下的文件拷贝到新的dbpath就可以了。
原文链接:https://blog.csdn.net/StillCity/article/details/102562281
二)如何做软链接?ln -sf /var/data /data
在这次mac升级系统后,我发现我的/data目录消失了,于是我执行了命令:
mkdir /data
结果发现居然提示我Read-Only filesystem,即使加上了sudo也没用
在我查阅相关资料后找到了解决办法(关闭SIP,然后输入sudo mount -uw /,创建文件夹添加权限,最后启用SIP),具体步骤如下:
1、重启mac,按住Command+R,等到系统进入安全模式。
2、选择一个账户,然后点击屏幕上方的工具栏找到命令行工具。
3、执行,命令 csrutil disable
4、重启电脑后,不要进入安全模式,执行命令sudo mount -uw /
5、执行命令sudo mkdir /data
6、执行命令sudo chmod 777 /data
7、重启电脑,进入安全模式,执行命令csrutil enable (开启SIP)
原文链接:https://blog.csdn.net/weiyoushi4001/article/details/102928575
大体运行命令:
[实践OK] 鹅厂后台开发工程师的工作日常,据说这是大鹅厂的系统开发人员常用操作命令,挑选几条学习学习。
Unix/LinuxC技术 jackxiang 2019-12-30 18:58
背景:我一看这文章就知道是架构平台部的兄弟的操作性更大一些,谁投的稿不清楚,但这个操作能感受到浓浓的鹅厂气息,这些年过去了,系统底层依然没有大变化,估计这些操作还能再用上十年,特梳理总结,以便“后来人”,也包括自己备忘。女程序员少,会写VIM、GDB、Linux命令、正则表达式、Makefile的女程序员妹子简直就是至宝啊,尽管ls –lhS ,中间横写得不对,但这不是重点,正是留言的好机会,请年轻程序员男好生把握,哥也年轻过,别后悔莫及,机会就让给你们了,哈哈。
1)磁盘满了查看/一级目录的报警:
du -h --max-depth=1
2)将当前目录下各文件以从大到小的顺序进行展示:
ls -lhS
3)查看日志最近200行:
history | tail -n 200
4)top cpu内存排序:
top 命令的基本视图中,按数字 1 监控每个逻辑 CPU 的使用情况;按 P 实现按 CPU 降序排列,按 M 按内存降序排列。
5)编写的二进制代码推到后台监听端口9999:
nohup xxx 9999
6)查看程序开启的端口:
netstat -anp | grep -w 9999
7)tcpdump抓自己开发的服务器server并调试,学后面的正则匹配:
tcpdump -s 0 -A 'tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)'
8)对日志某些列判断性打印:
awk '-F,' '{if ($666==110) print $999}' xxx.log.20191212
9)动态链接没有加载文件:
lsof xxx.so #进程加载的一个外部 so 动态库对应功能并没有生效
GDB 调试时发现,该 so 并没有导出函数 fffff 。
nm -D xxx.so | grep fffff
10)停掉了测试进程 xxx:
ps aux | grep -w xxx| grep -v grep | awk '{print $2}' | xargs kill -9
11)并没有导出函数 fffff ,证实了该 so 确实没有导出该函数。
nm -D xxx.so | grep fffff
来源自vimer、女程序员说:https://mp.weixin.qq.com/s/WsWFcw-xoRTFOcz1TQqDBw
1)磁盘满了查看/一级目录的报警:
du -h --max-depth=1
2)将当前目录下各文件以从大到小的顺序进行展示:
ls -lhS
3)查看日志最近200行:
history | tail -n 200
4)top cpu内存排序:
top 命令的基本视图中,按数字 1 监控每个逻辑 CPU 的使用情况;按 P 实现按 CPU 降序排列,按 M 按内存降序排列。
5)编写的二进制代码推到后台监听端口9999:
nohup xxx 9999
6)查看程序开启的端口:
netstat -anp | grep -w 9999
7)tcpdump抓自己开发的服务器server并调试,学后面的正则匹配:
tcpdump -s 0 -A 'tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)'
8)对日志某些列判断性打印:
awk '-F,' '{if ($666==110) print $999}' xxx.log.20191212
9)动态链接没有加载文件:
lsof xxx.so #进程加载的一个外部 so 动态库对应功能并没有生效
GDB 调试时发现,该 so 并没有导出函数 fffff 。
nm -D xxx.so | grep fffff
10)停掉了测试进程 xxx:
ps aux | grep -w xxx| grep -v grep | awk '{print $2}' | xargs kill -9
11)并没有导出函数 fffff ,证实了该 so 确实没有导出该函数。
nm -D xxx.so | grep fffff
来源自vimer、女程序员说:https://mp.weixin.qq.com/s/WsWFcw-xoRTFOcz1TQqDBw
[实践OK]linux下利用inode(i节点号)删除中文或者其它乱码文件。
Unix/LinuxC技术 jackxiang 2019-12-30 15:27
#ls -i
24229218 go 805308641 -w,
这样删不掉:
#rm -i 805308641
rm: cannot remove ‘805308641’: No such file or directory
这样删才行:
find ./* -inum 805308641 -delete
来自:https://blog.csdn.net/wb736/article/details/79756956
Macbook:
find ./* -inum 1442584 |xargs rm -f #样例,使用find和xargs结合删除ddd文件(无法使用-i参数进行删除确认)
mac本下实践Ok如下:
echo `find ./* -inum 22266353 `
./-p
rm -f `find ./* -inum 22266353 ` #成功删除
find ./* -inum 22266353 -exec rm -i {} \;
rm: ./-p: is a directory
find ./* -inum 13287477 -exec rm -r -i {} \; #成功删除
remove ./~? y
24229218 go 805308641 -w,
这样删不掉:
#rm -i 805308641
rm: cannot remove ‘805308641’: No such file or directory
这样删才行:
find ./* -inum 805308641 -delete
来自:https://blog.csdn.net/wb736/article/details/79756956
Macbook:
find ./* -inum 1442584 |xargs rm -f #样例,使用find和xargs结合删除ddd文件(无法使用-i参数进行删除确认)
mac本下实践Ok如下:
echo `find ./* -inum 22266353 `
./-p
rm -f `find ./* -inum 22266353 ` #成功删除
find ./* -inum 22266353 -exec rm -i {} \;
rm: ./-p: is a directory
find ./* -inum 13287477 -exec rm -r -i {} \; #成功删除
remove ./~? y
[系统缺陷]centos7 关机时出现PolicyKit daemon disconnected from the bus错误
Unix/LinuxC技术 jackxiang 2019-12-26 11:09
现象:init 0 关闭系统 出现错误提示,阿里专有云的运维兄弟反馈说是没有完全关闭:
再登录下:runlevel ,说是操作系统bug。
来自:https://developer.aliyun.com/ask/107789?spm=a2c6h.13159736
再登录下:runlevel ,说是操作系统bug。
来自:https://developer.aliyun.com/ask/107789?spm=a2c6h.13159736
[实践OK]macOS升级到Catalina之后使用SecureCRT报错问题
Unix/LinuxC技术 jackxiang 2019-12-14 21:36
macOS 升级到 Catalina之后,使用SecureCRT报如下错误
The permissions on the "/cores" directory need to be changed to
include write permission for "other".
Please execute (or ask an admin to execute) the following from a
terminal window:
sudo chmod go+w /cores
If you would prefer not to change the permissions on the /cores
folder, you can turn off the Global option "Create core file when
application crashes".
应该是macOS的权限控制严格了,导致CRT没有权限访问/cores文件夹,这里关掉CRT崩溃时创建core转储文件即可(实践发现:这个项是没有 checked的,还是老老实实的执行sudo chmod o+w /cores命令后重启后secureCRT就好了。)
Option --> Global Options 取消 Create core file when application crashes 前面的复选框选择即可
来自:https://blog.90.vc/archives/93.html
The permissions on the "/cores" directory need to be changed to
include write permission for "other".
Please execute (or ask an admin to execute) the following from a
terminal window:
sudo chmod go+w /cores
If you would prefer not to change the permissions on the /cores
folder, you can turn off the Global option "Create core file when
application crashes".
应该是macOS的权限控制严格了,导致CRT没有权限访问/cores文件夹,这里关掉CRT崩溃时创建core转储文件即可(实践发现:这个项是没有 checked的,还是老老实实的执行sudo chmod o+w /cores命令后重启后secureCRT就好了。)
Option --> Global Options 取消 Create core file when application crashes 前面的复选框选择即可
来自:https://blog.90.vc/archives/93.html
[实践OK]CentOS下C语言学习之经过函数复制字符串到指针在Clang中的函数失败的原因。
Unix/LinuxC技术 jackxiang 2019-11-29 14:44
想对指针类型里装的地址改动,在函数参数里需要两个**表明它是一个指向指针的指针(也就是传的是指针q的地址) ,ptr_copy(char ** d,char *s){ *d = s;} ,赋值里注意一下是*d =s(*d就是传指针地址的址,不再是值,也就是不会被在函数完成销毁后,外面值不会变,因为传的是指针q的地址。),也就是d里存指针地址*d表示,*d=s,s就是一个地址刚好能赋值。
更多说明帮助理解传参部分:
c语言菜鸟指针传递 问题 void func(char **p) {} int main(void) { char *q=null; func(&q); } p被赋值了神马 为什么俩星号?
p被赋值的是char* p的地址!你把char* 理解为一个变量就好理解了,就好比char a;char是变量类型,a是变量。既然是变量它就有地址,所以p也有地址,char **p,可以看成是 char* (*p)所以char** 被传的值是存放地址的变量的地址!
void func(char **p) {} //函数参数是指向指针的指针
int main(void)
{
char *q=null; //q定义为指针类型
func(&q); //&q,是取q的地址,q是一个指针类型,所以&q就是指针q的地址,即向指针的指针
}
来自:https://zhidao.baidu.com/question/686311732439253092.html
问:运行的以下clang代码,我希望输出ptr3=123与var相同ptr2的结果,但是结果是ptr3=(null)。如何修改我想要的结果代码?
gcc a.c -o a
./a
ptr2=123
ptr3=1PTI
让我们来看看您的“复制”功能:
void ptr_copy(char* d, char* s)
{
d = s;
}
在函数中,变量d是局部变量。一旦函数返回并d超出范围并终止其生命,对它的分配将丢失。
这使您ptr3在main函数中留下未初始化的变量,使用它会导致未定义的行为 -
如果要复制指针,则需要通过将指针传递给指针本身来模拟按引用传递:
void ptr_copy(char** d, char* s)
{
*d = s;
}
并称其为
ptr_copy(&ptr3, ptr)
需要的是一个不同的ptr_copy功能,如下所示:
void ptr_copy(char** dst, char* src) {
(*dst) = src;
}
ptr_copy(&ptr3, ptr);
这个想法是您将内容填充ptr到ptr3存储的位置(因此&ptr3,不是ptr3)。
当您将指针传递给函数时,该指针的值将被传递(即给定指针指向的地址)。因此,d内部ptr_copy的指针不同于(与该指针具有相同的值,但它位于内存的另一部分中)不同的指针。这就是为什么分配,更改地址指向的原因,但是对却没有任何作用。
确实考虑一个功能
void value_copy(int d, int s) {
d = s;
}
int i1 = 3;
int i3 = 2;
value_copy(i3, i1);
您不希望i3在调用后等于3 value_copy(),对吗?
正确调用如下:
#make a.c
cc a.c -o a
#./a
ptr2=123
ptr3=123
来自:https://stackoverflow.com/questions/59084119/copy-string-to-pointer-failed-in-function-in-clang
经GDB调试一下,发现其经过char ** d传参数进入函数后,实现了对传入的指针传址的d进行了修改,返回时也是作了修改,所以能正确指向123,GDB在打印时print ptr就是地址和值,如下:
(gdb) l
8 int main(){
9 char *ptr = "123";
10 char* ptr2;
11 char* ptr3;
12
13 ptr2 = ptr;
14 printf("ptr=%p\n", ptr);
15 printf("ptr2=%p\n", ptr2);
16 ptr_copy(&ptr3, ptr);
17 printf("ptr3=%p\n", ptr3);
(gdb) p ptr
$1 = 0x400670 "123"
(gdb) n
14 printf("ptr=%p\n", ptr);
(gdb) s
ptr=0x400670
15 printf("ptr2=%p\n", ptr2);
(gdb) p ptr
$3 = 0x400670 "123"
(gdb) s
ptr2=0x400670
16 ptr_copy(&ptr3, ptr);
(gdb) s
ptr_copy (d=0x7fffffffe498, s=0x400670 "123") at a.c:5
5 *d = s;
(gdb) p d
$4 = (char **) 0x7fffffffe498
(gdb) s
6 }
(gdb) s
main () at a.c:17
17 printf("ptr3=%p\n", ptr3);
(gdb) p ptr3
$6 = 0x400670 "123"
经过函数的运作,这个ptr,ptr2,ptr3都指向了0x400670,也就是123。
更多说明帮助理解传参部分:
c语言菜鸟指针传递 问题 void func(char **p) {} int main(void) { char *q=null; func(&q); } p被赋值了神马 为什么俩星号?
p被赋值的是char* p的地址!你把char* 理解为一个变量就好理解了,就好比char a;char是变量类型,a是变量。既然是变量它就有地址,所以p也有地址,char **p,可以看成是 char* (*p)所以char** 被传的值是存放地址的变量的地址!
void func(char **p) {} //函数参数是指向指针的指针
int main(void)
{
char *q=null; //q定义为指针类型
func(&q); //&q,是取q的地址,q是一个指针类型,所以&q就是指针q的地址,即向指针的指针
}
来自:https://zhidao.baidu.com/question/686311732439253092.html
问:运行的以下clang代码,我希望输出ptr3=123与var相同ptr2的结果,但是结果是ptr3=(null)。如何修改我想要的结果代码?
gcc a.c -o a
./a
ptr2=123
ptr3=1PTI
让我们来看看您的“复制”功能:
void ptr_copy(char* d, char* s)
{
d = s;
}
在函数中,变量d是局部变量。一旦函数返回并d超出范围并终止其生命,对它的分配将丢失。
这使您ptr3在main函数中留下未初始化的变量,使用它会导致未定义的行为 -
如果要复制指针,则需要通过将指针传递给指针本身来模拟按引用传递:
void ptr_copy(char** d, char* s)
{
*d = s;
}
并称其为
ptr_copy(&ptr3, ptr)
需要的是一个不同的ptr_copy功能,如下所示:
void ptr_copy(char** dst, char* src) {
(*dst) = src;
}
ptr_copy(&ptr3, ptr);
这个想法是您将内容填充ptr到ptr3存储的位置(因此&ptr3,不是ptr3)。
当您将指针传递给函数时,该指针的值将被传递(即给定指针指向的地址)。因此,d内部ptr_copy的指针不同于(与该指针具有相同的值,但它位于内存的另一部分中)不同的指针。这就是为什么分配,更改地址指向的原因,但是对却没有任何作用。
确实考虑一个功能
void value_copy(int d, int s) {
d = s;
}
int i1 = 3;
int i3 = 2;
value_copy(i3, i1);
您不希望i3在调用后等于3 value_copy(),对吗?
正确调用如下:
#make a.c
cc a.c -o a
#./a
ptr2=123
ptr3=123
来自:https://stackoverflow.com/questions/59084119/copy-string-to-pointer-failed-in-function-in-clang
经GDB调试一下,发现其经过char ** d传参数进入函数后,实现了对传入的指针传址的d进行了修改,返回时也是作了修改,所以能正确指向123,GDB在打印时print ptr就是地址和值,如下:
(gdb) l
8 int main(){
9 char *ptr = "123";
10 char* ptr2;
11 char* ptr3;
12
13 ptr2 = ptr;
14 printf("ptr=%p\n", ptr);
15 printf("ptr2=%p\n", ptr2);
16 ptr_copy(&ptr3, ptr);
17 printf("ptr3=%p\n", ptr3);
(gdb) p ptr
$1 = 0x400670 "123"
(gdb) n
14 printf("ptr=%p\n", ptr);
(gdb) s
ptr=0x400670
15 printf("ptr2=%p\n", ptr2);
(gdb) p ptr
$3 = 0x400670 "123"
(gdb) s
ptr2=0x400670
16 ptr_copy(&ptr3, ptr);
(gdb) s
ptr_copy (d=0x7fffffffe498, s=0x400670 "123") at a.c:5
5 *d = s;
(gdb) p d
$4 = (char **) 0x7fffffffe498
(gdb) s
6 }
(gdb) s
main () at a.c:17
17 printf("ptr3=%p\n", ptr3);
(gdb) p ptr3
$6 = 0x400670 "123"
经过函数的运作,这个ptr,ptr2,ptr3都指向了0x400670,也就是123。
[实践OK]Linux centos系统cached过高问题
Unix/LinuxC技术 jackxiang 2019-11-27 17:31
问题,之前以为是redis占用太多内存,后来发现是操作系统有问题:
free -m
total used free shared buffers cached
Mem: 7865 6138 1726 0 326 5110
-/+ buffers/cache: 701 7163
echo 1 > /proc/sys/vm/drop_caches
free -m
total used free shared buffers cached
Mem: 7865 530 7335 0 0 19
===============================================
Linux cached过高问题,手动释放cached
To free pagecache: echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes: echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes: echo 3 > /proc/sys/vm/drop_caches
来自:https://www.cnblogs.com/yanwei-wang/p/8133888.html
free -m
total used free shared buffers cached
Mem: 7865 6138 1726 0 326 5110
-/+ buffers/cache: 701 7163
echo 1 > /proc/sys/vm/drop_caches
free -m
total used free shared buffers cached
Mem: 7865 530 7335 0 0 19
===============================================
Linux cached过高问题,手动释放cached
To free pagecache: echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes: echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes: echo 3 > /proc/sys/vm/drop_caches
来自:https://www.cnblogs.com/yanwei-wang/p/8133888.html
[实践OK]在Linux系统上关闭rpc.statd服务的方法
Unix/LinuxC技术 jackxiang 2019-11-21 16:34
ss -lnt
LISTEN 0 128 *:57840 *:*
sudo lsof -i tcp:57840
rpc.statd 1453 rpcuser 9u IPv4 13387 0t0 TCP *:57840 (LISTEN)
ps -ef|grep 1453
rpcuser 1453 1 0 2018 ? 00:00:00 rpc.statd
rpm -qf /sbin/rpc.statd
nfs-utils-1.2.3-39.el6.x86_64
ls /etc/init.d/nfs*
/etc/init.d/nfslock status
vi /etc/services
nfs 2049/tcp nfsd shilp # Network File System
nfs 2049/udp nfsd shilp # Network File System
nfs 2049/sctp nfsd shilp # Network File System
找到里面的 nfs ,在前面加 # 注释掉,重启,我直接停掉服务。
/etc/init.d/nfslock stop
Stopping NFS statd: [ OK ]
来自:https://blog.csdn.net/maxuearn/article/details/79879607
LISTEN 0 128 *:57840 *:*
sudo lsof -i tcp:57840
rpc.statd 1453 rpcuser 9u IPv4 13387 0t0 TCP *:57840 (LISTEN)
ps -ef|grep 1453
rpcuser 1453 1 0 2018 ? 00:00:00 rpc.statd
rpm -qf /sbin/rpc.statd
nfs-utils-1.2.3-39.el6.x86_64
ls /etc/init.d/nfs*
/etc/init.d/nfslock status
vi /etc/services
nfs 2049/tcp nfsd shilp # Network File System
nfs 2049/udp nfsd shilp # Network File System
nfs 2049/sctp nfsd shilp # Network File System
找到里面的 nfs ,在前面加 # 注释掉,重启,我直接停掉服务。
/etc/init.d/nfslock stop
Stopping NFS statd: [ OK ]
来自:https://blog.csdn.net/maxuearn/article/details/79879607
[实践OK]/etc/fstab 不用重启生效的方法修改过/etc/fstab后mount -a 即可生效,查找iostat与df -h,挂载磁盘dm-0的对应关系。
Unix/LinuxC技术 jackxiang 2019-11-11 11:09
https://jackxiang.com/post/10343/,出现磁盘等待wait较高,如下:
iostat -x 2 5 # %util 出现100,设备是挂载的dm-0
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 2.00 0.00 0.00 100.00
#dm-0的%utilized 是100.00%,这个很好的说明了有进程正在写入到dm-0磁盘中。
dm是device mapper(设备映射)的意思:
dm-0是个块设备,就是个分区,他被挂载在不同的目录,但是不同目录里的文件却不一样。
实践如何不用重启直接生效/etc/fstab的方法:
修改过/etc/fstab后mount -a 即可生效
-a, --all
Mount all filesystems (of the given types) mentioned in fstab.
二)查找iostat与df -h,挂载磁盘dm-0的对应关系。
cd /dev/mapper/
ll
ddf1_4c5349202020202010000055000000004711471100001450p1 -> ../dm-1
dmsetup ls|grep ddf1_4c5349202020202010000055000000004711471100001450p1
ddf1_4c5349202020202010000055000000004711471100001450p1 (253:1)
df -Plh|grep 'ddf1_4c5349202020202010000055000000004711471100001450p1'
/dev/mapper/ddf1_4c5349202020202010000055000000004711471100001450p1 194M 34M 151M 19% /boot
双出现:dm-3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 2.00 0.00 0.00 100.00
df -Plh|grep 'ddf1_4c5349202020202010000055000000004711471100001450p3'
/dev/mapper/ddf1_4c5349202020202010000055000000004711471100001450p3 119G 2.4G 110G 3% /
指向boot目录。
反证:以为是卸载了所有的mount目录iowait就好,实践发现并没有好,负载依然高:
ddf1_4c5349202020202010000055000000004711471100001450p1 通过下面命令也能看:
来自:https://www.iteye.com/blog/andnnl-2236548
iostat -x 2 5 # %util 出现100,设备是挂载的dm-0
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 2.00 0.00 0.00 100.00
#dm-0的%utilized 是100.00%,这个很好的说明了有进程正在写入到dm-0磁盘中。
dm是device mapper(设备映射)的意思:
dm-0是个块设备,就是个分区,他被挂载在不同的目录,但是不同目录里的文件却不一样。
实践如何不用重启直接生效/etc/fstab的方法:
修改过/etc/fstab后mount -a 即可生效
-a, --all
Mount all filesystems (of the given types) mentioned in fstab.
二)查找iostat与df -h,挂载磁盘dm-0的对应关系。
cd /dev/mapper/
ll
ddf1_4c5349202020202010000055000000004711471100001450p1 -> ../dm-1
dmsetup ls|grep ddf1_4c5349202020202010000055000000004711471100001450p1
ddf1_4c5349202020202010000055000000004711471100001450p1 (253:1)
df -Plh|grep 'ddf1_4c5349202020202010000055000000004711471100001450p1'
/dev/mapper/ddf1_4c5349202020202010000055000000004711471100001450p1 194M 34M 151M 19% /boot
双出现:dm-3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 2.00 0.00 0.00 100.00
df -Plh|grep 'ddf1_4c5349202020202010000055000000004711471100001450p3'
/dev/mapper/ddf1_4c5349202020202010000055000000004711471100001450p3 119G 2.4G 110G 3% /
指向boot目录。
反证:以为是卸载了所有的mount目录iowait就好,实践发现并没有好,负载依然高:
ddf1_4c5349202020202010000055000000004711471100001450p1 通过下面命令也能看:
来自:https://www.iteye.com/blog/andnnl-2236548
[实践OK]linux下IO负载高因某颗CPU或者某几颗CPU进程导致的排查并定位解决办法之ps psr对应某颗CPU,iostat和iowait详细解说-查看磁盘IO瓶颈之定位到某个CPU上,或者从业务上发现服务器老旧出现的磁盘物理故障。
Unix/LinuxC技术 jackxiang 2019-11-11 09:52
磁盘有问题:
sudo badblocks -s -v -o sdbbadblocks.log /dev/sda #出现一堆的坏块编号
dmesg |less -i #jbd2,当有硬盘坏道时,通常在dmesg输出的信息中会有 Buffer I/O Error,所以经常检查dmesg的输出可以及时发现是否存在硬盘问题。
NFO: task jbd2/dm-3-8:526 blocked for more than 120 seconds.
Not tainted 2.6.32-431.el6.x86_64 #1
"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
jbd2/dm-3-8 D 0000000000000002 0 526 2 0x00000000
查看第2个CPU上的程序定位到jbd2:
|grep -v '\[' 去掉系统服务进程
ps -eo 'pid,psr,cmd' |sort -nk 2|awk '{if($2==2)print }'|grep -v '\['
ps -eo 'pid,psr,cmd' |sort -nk 2|awk '{if($2==2)print }'|grep '\['
ls -l /dev/dm-3
brw-rw---- 1 root disk 253, 3 Nov 11 14:59 /dev/dm-3
ps -LF -p 526 #看它的主进程
UID PID PPID LWP C NLWP SZ RSS PSR STIME TTY TIME CMD
root 526 2 526 0 1 0 0 2 Nov11 ? 00:00:00 [jbd2/dm-3-8]
lsof -nPp 526
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
jbd2/dm-3 526 root cwd DIR 253,3 4096 2 /
jbd2/dm-3 526 root rtd DIR 253,3 4096 2 /
jbd2/dm-3 526 root txt unknown /proc/526/exe
dmraid -r #man dmraid
/dev/sda: ddf1, ".ddf1_disks", GROUP, ok, 285155328 sectors, data@ 0
/dev/sdb: ddf1, ".ddf1_disks", GROUP, ok, 285155328 sectors, data@ 0
lsblk -f #RAID1:数据安全性高,即同样的数据在另一块盘上备份一份,硬盘的容量也就减少一半。
NAME FSTYPE LABEL UUID MOUNTPOINT
sdb ddf_raid_member LSI \x10
└─ddf1_4c5349202020202010000055000000004711471100001450 (dm-0)
├─ddf1_4c5349202020202010000055000000004711471100001450p1 (dm-1) ext4 bef5de45-511b-41c2-b487-6cf98faf978a /boot
├─ddf1_4c5349202020202010000055000000004711471100001450p2 (dm-2) swap 861a3dbd-ca4b-4c97-b2b8-51504ee45949 [SWAP]
└─ddf1_4c5349202020202010000055000000004711471100001450p3 (dm-3) ext4 410be0c5-9b55-490e-b924-606d46182ea2 /
sda ddf_raid_member LSI \x10
└─ddf1_4c5349202020202010000055000000004711471100001450 (dm-0)
├─ddf1_4c5349202020202010000055000000004711471100001450p1 (dm-1) ext4 bef5de45-511b-41c2-b487-6cf98faf978a /boot
├─ddf1_4c5349202020202010000055000000004711471100001450p2 (dm-2) swap 861a3dbd-ca4b-4c97-b2b8-51504ee45949 [SWAP]
└─ddf1_4c5349202020202010000055000000004711471100001450p3 (dm-3) ext4 410be0c5-9b55-490e-b924-606d46182ea2 /
dmraid -s
*** Group superset .ddf1_disks
--> Active Subset
name : ddf1_4c5349202020202010000055000000004711471100001450
size : 285155328
stride : 128
type : mirror
status : ok
subsets: 0
devs : 2
spares : 0
步骤一) top命令显示后 按1
Cpu2 : 0.0%us, 0.0%sy, 0.0%ni, 0.0%id,100.0%wa, 0.0%hi, 0.0%si, 0.0%st
wa -- iowait AmountoftimetheCPUhasbeenwaitingfor I/O to complete.
步骤二)iostat -x 2 5 #定位各个磁盘读写哪个高一些,iostat 会每2秒更新一次,一共打印5次信息, -x 的选项是打印出扩展信息,实际使用得需要扩展信息-x得到svctm一项,反应了磁盘的负载情况,如果该项大于15ms,并且util%接近100%,那就说明,磁盘现在是整个系统性能的瓶颈了。
svctm: 平均每次设备I/O操作的服务时间 (毫秒)。即 delta(use)/delta(rio+wio)
%util: 一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。即 delta(use)/s/1000 (因为use的单位为毫秒)
如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。
avgqu-sz: 平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)。
浅显易懂的解释:
平均服务时间(svctm)类似于收银员的收款速度
平均等待时间(await)类似于平均每人的等待时间
I/O 操作率 (%util)类似于收款台前有人排队的时间比例。
实践发现dm-0 / dm-3 卡住了,产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈,也可能是坏了,
第一个iostat 报告会打印出系统最后一次启动后的统计信息,这也就是说,在多数情况下,第一个打印出来的信息应该被忽略,剩下的报告,都是基于上一次间隔的时间。举例子来说,这个命令会打印5次,第二次的报告是从第一次报告出来一个后的统计信息,第三次是基于第二次 ,依次类推:
iostat -x 2 5 # %util 出现100,设备是挂载的dm-0
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 2.00 0.00 0.00 100.00
#dm-0的%utilized 是100.00%,这个很好的说明了有进程正在写入到dm-0磁盘中。
dm是device mapper(设备映射)的意思:
dm-0是个块设备,就是个分区,他被挂载在不同的目录,但是不同目录里的文件却不一样。
svctm 一般要小于 await (因为同时等待的请求的等待时间被重复计算了),如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明 I/O 队列太长,应用得到的响应时间变慢,如果响应时间超过了用户可以容许的范围,这时可以考虑更换更快的磁盘......。
步骤三)查找引起高I/O wait 对应的进程 ,iotop #查找I/O wait 对应的进程
步骤四)查找哪个文件引起的I/Owait:
lsof 命令可以展示一个进程打开的所有文件,或者打开一个文件的所有进程。从这个列表中,我们可以找到具体是什么文件被写入,根据文件的大小和/proc中io文件的具体数据
我们可以使用-p <pid>的方式来减少输出,pid是具体的进程
lsof -p 1028
步骤四)更深入的确认这些文件被频繁的读写,我们可以通过如下命令来查看
[root@localhost ~]# df /tmp
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/mapper/cl-root 17811456 3981928 13829528 23% /
从上面的命令结果来看,我们可以确定/tmp 是我们环境的逻辑磁盘的根目录
复制代码
复制代码
[root@localhost ~]# pvdisplay
--- Physical volume ---
PV Name /dev/sda2
VG Name cl
PV Size 19.00 GiB / not usable 3.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 4863
Free PE 0
Allocated PE 4863
PV UUID 4QfaOy-DNSO-niK1-ayn2-K6AY-WZMy-9Nd2It
复制代码
复制代码
过pvdisplay我们能看到/dev/sda2其实就是我们用来创建逻辑磁盘的具体磁盘。通过以上的信息我们可以放心的说lsof的结果就是我们要查找的文件
cat /proc/18987/io
rchar: 58891582418
wchar: 58891579778
syscr: 46556085
syscw: 46556077
read_bytes: 212992
write_bytes: 59580235776
cancelled_write_bytes: 0
同时可以结合vmstat 查看查看b参数(等待资源的进程数),b有一个等待:
vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 1 0 11119256 238876 205460 0 0 0 0 2 3 0 0 99 1 0
来自:https://www.cnblogs.com/happy-king/p/9234122.html
sudo badblocks -s -v -o sdbbadblocks.log /dev/sda #出现一堆的坏块编号
dmesg |less -i #jbd2,当有硬盘坏道时,通常在dmesg输出的信息中会有 Buffer I/O Error,所以经常检查dmesg的输出可以及时发现是否存在硬盘问题。
NFO: task jbd2/dm-3-8:526 blocked for more than 120 seconds.
Not tainted 2.6.32-431.el6.x86_64 #1
"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
jbd2/dm-3-8 D 0000000000000002 0 526 2 0x00000000
查看第2个CPU上的程序定位到jbd2:
|grep -v '\[' 去掉系统服务进程
ps -eo 'pid,psr,cmd' |sort -nk 2|awk '{if($2==2)print }'|grep -v '\['
ps -eo 'pid,psr,cmd' |sort -nk 2|awk '{if($2==2)print }'|grep '\['
ls -l /dev/dm-3
brw-rw---- 1 root disk 253, 3 Nov 11 14:59 /dev/dm-3
ps -LF -p 526 #看它的主进程
UID PID PPID LWP C NLWP SZ RSS PSR STIME TTY TIME CMD
root 526 2 526 0 1 0 0 2 Nov11 ? 00:00:00 [jbd2/dm-3-8]
lsof -nPp 526
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
jbd2/dm-3 526 root cwd DIR 253,3 4096 2 /
jbd2/dm-3 526 root rtd DIR 253,3 4096 2 /
jbd2/dm-3 526 root txt unknown /proc/526/exe
dmraid -r #man dmraid
/dev/sda: ddf1, ".ddf1_disks", GROUP, ok, 285155328 sectors, data@ 0
/dev/sdb: ddf1, ".ddf1_disks", GROUP, ok, 285155328 sectors, data@ 0
lsblk -f #RAID1:数据安全性高,即同样的数据在另一块盘上备份一份,硬盘的容量也就减少一半。
NAME FSTYPE LABEL UUID MOUNTPOINT
sdb ddf_raid_member LSI \x10
└─ddf1_4c5349202020202010000055000000004711471100001450 (dm-0)
├─ddf1_4c5349202020202010000055000000004711471100001450p1 (dm-1) ext4 bef5de45-511b-41c2-b487-6cf98faf978a /boot
├─ddf1_4c5349202020202010000055000000004711471100001450p2 (dm-2) swap 861a3dbd-ca4b-4c97-b2b8-51504ee45949 [SWAP]
└─ddf1_4c5349202020202010000055000000004711471100001450p3 (dm-3) ext4 410be0c5-9b55-490e-b924-606d46182ea2 /
sda ddf_raid_member LSI \x10
└─ddf1_4c5349202020202010000055000000004711471100001450 (dm-0)
├─ddf1_4c5349202020202010000055000000004711471100001450p1 (dm-1) ext4 bef5de45-511b-41c2-b487-6cf98faf978a /boot
├─ddf1_4c5349202020202010000055000000004711471100001450p2 (dm-2) swap 861a3dbd-ca4b-4c97-b2b8-51504ee45949 [SWAP]
└─ddf1_4c5349202020202010000055000000004711471100001450p3 (dm-3) ext4 410be0c5-9b55-490e-b924-606d46182ea2 /
dmraid -s
*** Group superset .ddf1_disks
--> Active Subset
name : ddf1_4c5349202020202010000055000000004711471100001450
size : 285155328
stride : 128
type : mirror
status : ok
subsets: 0
devs : 2
spares : 0
步骤一) top命令显示后 按1
Cpu2 : 0.0%us, 0.0%sy, 0.0%ni, 0.0%id,100.0%wa, 0.0%hi, 0.0%si, 0.0%st
wa -- iowait AmountoftimetheCPUhasbeenwaitingfor I/O to complete.
步骤二)iostat -x 2 5 #定位各个磁盘读写哪个高一些,iostat 会每2秒更新一次,一共打印5次信息, -x 的选项是打印出扩展信息,实际使用得需要扩展信息-x得到svctm一项,反应了磁盘的负载情况,如果该项大于15ms,并且util%接近100%,那就说明,磁盘现在是整个系统性能的瓶颈了。
svctm: 平均每次设备I/O操作的服务时间 (毫秒)。即 delta(use)/delta(rio+wio)
%util: 一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。即 delta(use)/s/1000 (因为use的单位为毫秒)
如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。
avgqu-sz: 平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)。
浅显易懂的解释:
平均服务时间(svctm)类似于收银员的收款速度
平均等待时间(await)类似于平均每人的等待时间
I/O 操作率 (%util)类似于收款台前有人排队的时间比例。
实践发现dm-0 / dm-3 卡住了,产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈,也可能是坏了,
第一个iostat 报告会打印出系统最后一次启动后的统计信息,这也就是说,在多数情况下,第一个打印出来的信息应该被忽略,剩下的报告,都是基于上一次间隔的时间。举例子来说,这个命令会打印5次,第二次的报告是从第一次报告出来一个后的统计信息,第三次是基于第二次 ,依次类推:
iostat -x 2 5 # %util 出现100,设备是挂载的dm-0
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 2.00 0.00 0.00 100.00
#dm-0的%utilized 是100.00%,这个很好的说明了有进程正在写入到dm-0磁盘中。
dm是device mapper(设备映射)的意思:
dm-0是个块设备,就是个分区,他被挂载在不同的目录,但是不同目录里的文件却不一样。
svctm 一般要小于 await (因为同时等待的请求的等待时间被重复计算了),如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明 I/O 队列太长,应用得到的响应时间变慢,如果响应时间超过了用户可以容许的范围,这时可以考虑更换更快的磁盘......。
步骤三)查找引起高I/O wait 对应的进程 ,iotop #查找I/O wait 对应的进程
步骤四)查找哪个文件引起的I/Owait:
lsof 命令可以展示一个进程打开的所有文件,或者打开一个文件的所有进程。从这个列表中,我们可以找到具体是什么文件被写入,根据文件的大小和/proc中io文件的具体数据
我们可以使用-p <pid>的方式来减少输出,pid是具体的进程
lsof -p 1028
步骤四)更深入的确认这些文件被频繁的读写,我们可以通过如下命令来查看
[root@localhost ~]# df /tmp
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/mapper/cl-root 17811456 3981928 13829528 23% /
从上面的命令结果来看,我们可以确定/tmp 是我们环境的逻辑磁盘的根目录
复制代码
复制代码
[root@localhost ~]# pvdisplay
--- Physical volume ---
PV Name /dev/sda2
VG Name cl
PV Size 19.00 GiB / not usable 3.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 4863
Free PE 0
Allocated PE 4863
PV UUID 4QfaOy-DNSO-niK1-ayn2-K6AY-WZMy-9Nd2It
复制代码
复制代码
过pvdisplay我们能看到/dev/sda2其实就是我们用来创建逻辑磁盘的具体磁盘。通过以上的信息我们可以放心的说lsof的结果就是我们要查找的文件
cat /proc/18987/io
rchar: 58891582418
wchar: 58891579778
syscr: 46556085
syscw: 46556077
read_bytes: 212992
write_bytes: 59580235776
cancelled_write_bytes: 0
同时可以结合vmstat 查看查看b参数(等待资源的进程数),b有一个等待:
vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 1 0 11119256 238876 205460 0 0 0 0 2 3 0 0 99 1 0
来自:https://www.cnblogs.com/happy-king/p/9234122.html