[实践OK]FreeBsd: 安装 rz , sz 工具包lrzsz。
Unix/LinuxC技术 jackx 2017-10-5 18:48
[实践OK]FreeBSD中安装pkg:https://jackxiang.com/post/10436/
安装包安装方式:
pkg install -y lrzsz
Port安装方式:
cd /usr/ports/comms/lrzsz
make install clean
备注:这种方式为编译安装,安装时同样需要联网下载。
lrzsz的操作上传下载的文件列表:
/usr/local/bin/lrx
/usr/local/bin/lrz
/usr/local/bin/lsb
/usr/local/bin/lrb
/usr/local/bin/lsx
/usr/local/bin/lsz
第一步:软链接:
ln -sf /usr/local/bin/lrz /usr/local/bin/rz
ln -sf /usr/local/bin/lsz /usr/local/bin/sz
第二步:
vim ~/.bashrc
在文件末尾添加:
export PATH=$PATH:/usr/local/bin
source ~/.bashrc
Linux可以,Freebsd上不行:
cat << EOF >> ~/.bashrc
export PATH=$PATH:/usr/local/bin
EOF
Cause
This problem may be caused by improper handling of escape sequences embedded in the files being uploaded.
Resolution
Use the -e or --escape option on lrz, which escapes control characters (Z). For example, type, lrz -e. Some Zmodem clients expect escaping, while others do not.
Notes
Note, some installations of lrzsz do not have the "sz" or "rz" commands, only "lsz" and "lrz". You can edit your .login file and add lines like "alias sz lsz" and "alias rz lrz -e". This way, when you type "sz" or "rz", it will automatically execute the right program with the right options.
lrzsz is part of the FreeBSD ports collection. It contains a set of shell commands for sending and receiving files via the X/Y/ZMODEM protocols. Your SSH or Telnet client must support them for transfers to work.
阅读全文
安装包安装方式:
pkg install -y lrzsz
Port安装方式:
cd /usr/ports/comms/lrzsz
make install clean
备注:这种方式为编译安装,安装时同样需要联网下载。
lrzsz的操作上传下载的文件列表:
/usr/local/bin/lrx
/usr/local/bin/lrz
/usr/local/bin/lsb
/usr/local/bin/lrb
/usr/local/bin/lsx
/usr/local/bin/lsz
第一步:软链接:
ln -sf /usr/local/bin/lrz /usr/local/bin/rz
ln -sf /usr/local/bin/lsz /usr/local/bin/sz
第二步:
vim ~/.bashrc
在文件末尾添加:
export PATH=$PATH:/usr/local/bin
source ~/.bashrc
Linux可以,Freebsd上不行:
cat << EOF >> ~/.bashrc
export PATH=$PATH:/usr/local/bin
EOF
Cause
This problem may be caused by improper handling of escape sequences embedded in the files being uploaded.
Resolution
Use the -e or --escape option on lrz, which escapes control characters (Z). For example, type, lrz -e. Some Zmodem clients expect escaping, while others do not.
Notes
Note, some installations of lrzsz do not have the "sz" or "rz" commands, only "lsz" and "lrz". You can edit your .login file and add lines like "alias sz lsz" and "alias rz lrz -e". This way, when you type "sz" or "rz", it will automatically execute the right program with the right options.
lrzsz is part of the FreeBSD ports collection. It contains a set of shell commands for sending and receiving files via the X/Y/ZMODEM protocols. Your SSH or Telnet client must support them for transfers to work.

[实践OK]linux中的strings命令简介以及CentOS 6.6 安装 Node.js,在安装Node高版本时用到新的Gcc时查看之用@node编译安装。
Unix/LinuxC技术 jackx 2017-9-20 17:12
用处:strings命令主要用来做查看二进制的编译文件里面某个.c/.cpp文件编译到那个.so库中去了,或查看它调用了哪些库文件.
strings命令很简单, 看起来好像没什么, 但实际有很多用途。 下面, 我来举一个例子。 在大型的软件开发中, 假设有100个.c/.cpp文件, 这个.cpp文件最终生成10个.so库, 那么怎样才能快速知道某个.c/.cpp文件编译到那个.so库中去了呢? 当然, 你可能要说, 看makefile不就知道了。 对, 看makefile肯定可以, 但如下方法更好, 直接用命令:
strings -f "*.so" | grep "xxxxxx"
/usr/local/node/bin/node
来自:http://blog.csdn.net/stpeace/article/details/46641069
二、Node编译高版本涉及Gcc相关的编译安装过程Url:
http://www.cnblogs.com/dee0912/p/5272149.html
关于编译Node的GCC版本升级:
1)linux下升级gcc的方法 – 亲测可用:https://www.cppfans.org/1719.html
2)编译安装 gcc 4.9并验证使用:http://blog.csdn.net/hzhxxx/article/details/28634893
strings命令很简单, 看起来好像没什么, 但实际有很多用途。 下面, 我来举一个例子。 在大型的软件开发中, 假设有100个.c/.cpp文件, 这个.cpp文件最终生成10个.so库, 那么怎样才能快速知道某个.c/.cpp文件编译到那个.so库中去了呢? 当然, 你可能要说, 看makefile不就知道了。 对, 看makefile肯定可以, 但如下方法更好, 直接用命令:
strings -f "*.so" | grep "xxxxxx"
/usr/local/node/bin/node
来自:http://blog.csdn.net/stpeace/article/details/46641069
二、Node编译高版本涉及Gcc相关的编译安装过程Url:
http://www.cnblogs.com/dee0912/p/5272149.html
关于编译Node的GCC版本升级:
1)linux下升级gcc的方法 – 亲测可用:https://www.cppfans.org/1719.html
2)编译安装 gcc 4.9并验证使用:http://blog.csdn.net/hzhxxx/article/details/28634893
[diff 工具]diff工具之winmerge软件~
Unix/LinuxC技术 jackx 2017-9-19 14:28
http://winmerge.org/
CMake 指定安装目录
Unix/LinuxC技术 jackx 2017-9-18 17:36
使用 CMAKE_INSTALL_PREFIX 来指定。
方法1:
[plain] view plain copy print?
cmake -DCMAKE_INSTALL_PREFIX=/usr ..
方法二:
修改cmake文件,加入:
SET(CMAKE_INSTALL_PREFIX < install_path >)
要加在 PROJECT(< project_name>) 之后。
摘录:
Default Build and Installation:
Installing vidstab library:
cd path/to/vid.stab/dir/
cmake .
make
sudo make install
默认会安装到:
1).h文件:
/usr/local/include/vid.stab
2).so文件:
/usr/local/lib/libvidstab.so
于是,想安装到指定目录,经rpmbuild打包修改成:
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/ffmpeg
来自:http://blog.csdn.net/caspiansea/article/details/53526725
方法1:
[plain] view plain copy print?
cmake -DCMAKE_INSTALL_PREFIX=/usr ..
方法二:
修改cmake文件,加入:
SET(CMAKE_INSTALL_PREFIX < install_path >)
要加在 PROJECT(< project_name>) 之后。
摘录:
Default Build and Installation:
Installing vidstab library:
cd path/to/vid.stab/dir/
cmake .
make
sudo make install
默认会安装到:
1).h文件:
/usr/local/include/vid.stab
2).so文件:
/usr/local/lib/libvidstab.so
于是,想安装到指定目录,经rpmbuild打包修改成:
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/ffmpeg
来自:http://blog.csdn.net/caspiansea/article/details/53526725
[实践OK]阿里云FreeBSD11.1系统盘扩容、分区、挂载,FreeBSD手动扩容。
Unix/LinuxC技术 jackx 2017-9-11 11:55
零、少了20G的查看:
df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/ufsid/59a7effe7885633c 19G 5.6G 12G 31% /
devfs 1.0K 1.0K 0B 100% /dev
一、gpart show 查看磁盘空间情况,可以看到磁盘大小是 40G,但是FreeBSD系统盘空间有20G,少了20G。
Welcome to Alibaba Cloud Elastic Compute Service !
root@iZ2ze0upl89i15wngnott5Z:~ # gpart show [img]=> 63 83886017 vtbd0 MBR (40G)
63 1 - free - (512B)
64 41942975 1 freebsd [active] (20G)
41943039 41943041 - free - (20G)
二、gpart recover ada0 恢复磁盘的空闲大小,然后再执行 gpart show 就可以看到磁盘的空闲空间了。
gpart recover vtbd0
vtbd0 recovering is not needed
三、gpart resize -i 3 -a 4k -s 40G vtbd0
用它:
gpart resize -i 1 -a 4k -s 39G vtbd0 #注意编号是1: -i 1
vtbd0s1 resized
上面FreeBSD14.1的精确计算大小和扩容再实践步骤参考:https://jackxiang.com/post/10934/
resize磁盘,我这里是50G的磁盘,但是不只能直接写50G,因为1G被swap占用了,512K被启动分区占用,最多只能使用48G,如果扩容到其他的大小,都需要在磁盘的总大小上减掉2G
growfs /dev/ada0p3
It's strongly recommended to make a backup before growing the file system.
OK to grow filesystem on /dev/vtbd0s1 from 20GB to 39GB? [yes/no] yes
growfs: /dev/vtbd0s1: Operation not permitted
扩容文件系统,执行完成以后会提示是否同意从 19G 扩容到 48G,以及一些风险提醒,直接Yes。
解决办法:freebsd resize partition
将growfs当做service来执行
service growfs onestart
实践OK如下:
4 、df -h看下能看到成功扩容。
aliyun do the resize the freebsd size:
attachment.php?fid=475[/img]
service growfs onestart
Growing root partition to fill device
vtbd0s1 resized
growfs: requested size 40GB is not larger than the current filesystem size 40GB
onestart 这个命令是什么意思?我找到了:
vim /etc/rc.d/growfs ,但是里面没有onestart。
在 /etc/rc.d/growfs 脚本中没有看到 onestart 的特定逻辑,但它是由 FreeBSD 的服务管理框架处理的。你可以使用 service growfs onestart 命令来一次性启动服务,而不会影响其自动启动状态。growfs_start() { 是入口。
https://help.aliyun.com/document_detail/35099.html
自己家里的服务器作了下kvm的扩容尝试,原因还是安装port时空间太小https://jackxiang.com/post/2849/,最后扩容成功就不存在这个问题了:
/usr/ports/x11/xprintidle/
mkdir: /usr/ports/x11: No space left on device
tar: could not chdir to '/usr/ports/x11/xprintidle/'
怎么办?扩容了:
qemu-img resize FreeBSD-13.0-RELEASE-amd64.raw +128G #运行成功后,去freeBSD里面进行扩容:
df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/ufsid/59a7effe7885633c 19G 5.6G 12G 31% /
devfs 1.0K 1.0K 0B 100% /dev
一、gpart show 查看磁盘空间情况,可以看到磁盘大小是 40G,但是FreeBSD系统盘空间有20G,少了20G。
Welcome to Alibaba Cloud Elastic Compute Service !
root@iZ2ze0upl89i15wngnott5Z:~ # gpart show [img]=> 63 83886017 vtbd0 MBR (40G)
63 1 - free - (512B)
64 41942975 1 freebsd [active] (20G)
41943039 41943041 - free - (20G)
二、gpart recover ada0 恢复磁盘的空闲大小,然后再执行 gpart show 就可以看到磁盘的空闲空间了。
gpart recover vtbd0
vtbd0 recovering is not needed
三、gpart resize -i 3 -a 4k -s 40G vtbd0
用它:
gpart resize -i 1 -a 4k -s 39G vtbd0 #注意编号是1: -i 1
vtbd0s1 resized
上面FreeBSD14.1的精确计算大小和扩容再实践步骤参考:https://jackxiang.com/post/10934/
resize磁盘,我这里是50G的磁盘,但是不只能直接写50G,因为1G被swap占用了,512K被启动分区占用,最多只能使用48G,如果扩容到其他的大小,都需要在磁盘的总大小上减掉2G
growfs /dev/ada0p3
It's strongly recommended to make a backup before growing the file system.
OK to grow filesystem on /dev/vtbd0s1 from 20GB to 39GB? [yes/no] yes
growfs: /dev/vtbd0s1: Operation not permitted
扩容文件系统,执行完成以后会提示是否同意从 19G 扩容到 48G,以及一些风险提醒,直接Yes。
解决办法:freebsd resize partition
将growfs当做service来执行
service growfs onestart
实践OK如下:
4 、df -h看下能看到成功扩容。
aliyun do the resize the freebsd size:
attachment.php?fid=475[/img]
service growfs onestart
Growing root partition to fill device
vtbd0s1 resized
growfs: requested size 40GB is not larger than the current filesystem size 40GB
onestart 这个命令是什么意思?我找到了:
vim /etc/rc.d/growfs ,但是里面没有onestart。
在 /etc/rc.d/growfs 脚本中没有看到 onestart 的特定逻辑,但它是由 FreeBSD 的服务管理框架处理的。你可以使用 service growfs onestart 命令来一次性启动服务,而不会影响其自动启动状态。growfs_start() { 是入口。
https://help.aliyun.com/document_detail/35099.html
自己家里的服务器作了下kvm的扩容尝试,原因还是安装port时空间太小https://jackxiang.com/post/2849/,最后扩容成功就不存在这个问题了:
/usr/ports/x11/xprintidle/
mkdir: /usr/ports/x11: No space left on device
tar: could not chdir to '/usr/ports/x11/xprintidle/'
怎么办?扩容了:
qemu-img resize FreeBSD-13.0-RELEASE-amd64.raw +128G #运行成功后,去freeBSD里面进行扩容:
[实践OK]在 FreeBSD 上彻底禁用 sendmail,禁用freebsd ntpd 时间同步,devd进程禁用开机启动,iftop在Port下的安装,加大SWAP,Freebsd修改hostname。
Unix/LinuxC技术 jackx 2017-9-10 14:32
vim /etc/defaults/rc.conf 里面有sendmail部分的关闭参数说明,修改一下即可。
sendmail_enable="NO" # Run the sendmail inbound daemon (YES/NO).
不想重新启动服务器的话(应急措施)∶killall sendmail
/etc/rc.d/sendmail stop
Stopping sendmail.
Waiting for PIDS: 1489.
Cannot 'stop' sendmail_msp_queue. Set sendmail_msp_queue_enable to YES in /etc/rc.conf or use 'onestop' instead of 'stop'
/etc/rc.d/sendmail onestop
sendmail not running? (check /var/run/sendmail.pid).
sendmail_msp_queue not running? (check /var/spool/clientmqueue/sm-client.pid).
cat /etc/rc.conf
hostname="jackxiang_owncloud_tools_diff_nginx_php_mysql_redis-10-10-0-237"
ifconfig_vtnet0="inet 10.10.0.*** netmask 255.255.255.0"
defaultrouter="*.*.0.1"
sshd_enable=yes
syslogd_flags="-s"
devd_flags="-s"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
因为Service php-fpm或mysql及nginx出现Freebsd重启不了,于是这样写就Ok了:
vi /etc/rc.conf
/etc/rc.d的启动需要在 /etc/rc.conf里打开,用Service就能启动,前面出问题不知道啥原因:
/etc/rc.d/php-fpm
你可能会因为种种原因而想在 FreeBSD 服务器上彻底禁用 sendmail,那么你可以尝试这样∶
1,如果你不想重新启动服务器的话(应急措施)∶
# killall sendmail
2,如果你想让 sendmail 在启动的时候就不做任何行为的话,你需要把以下这几行加入到 /etc/rc.conf 中∶
sendmail_enable="NONE"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
加入之后需要重新启动服务器让设置生效。
来自:http://www.chinaz.com/server/2010/0226/107257.shtml
=============禁用freebsd ntpd 时间同步================
vi /etc/rc.conf
ntpd_enable="NO"
1.首先在rc.conf里面添加:ntpd_enable=”YES”。
2.修改/etc/ntp.conf
server 0.freebsd.pool.ntp.org iburst maxpoll 9
server 1.freebsd.pool.ntp.org iburst maxpoll 9
server 2.freebsd.pool.ntp.org iburst maxpoll 9
其他全部注释掉。
3.启动ntpd之前需要手动运行ntpdate pool.ntp.org先同步一下时间,避免因为系统时间与时间服务期时间相差太大导致渐次逼近无法实施而造成的ntpd运行失败。
4.运行/etc/rc.d/ntpd start启动服务。
5.可以通过ntpq -p命令来检查当前ntpd服务状态,注意看输出的表格中st这一项值,必须小于16,16代表无法连接时间服务器,如果都为16,则对时不能完成,需要检查网络原因。
6.ntpd服务需要开放对udp端口123的访问。
来自:http://www.voidcn.com/article/p-ebfmvhcn-ve.html
disable syslogd:
echo syslogd_enable=NO >> /etc/rc.conf
syslogd_enable="NO" # vi /etc/rc.conf
来自:https://superuser.com/questions/626305/disabling-syslogd-in-freebsd
devd进程禁用开机启动:
devd_enable="NO" # vi /etc/rc.conf
iftop在Port下的安装:
cd /usr/ports/net-mgmt/iftop/ && make install clean
Freebsd下面加大SWAP实践OK:
/etc/fstab
md99 none swap sw,file=/swapfile,late 0 0
手工生效,否则用这个swapinfo -m就会发现只有1M:
mdconfig -a -t vnode -f /swapfile -u 0 && swapon /dev/md0
swapinfo -m
Device 1M-blocks Used Avail Capacity
/dev/md0 512 0 512 0%
查看新增加的swap是否生效:top
CPU: 0.0% user, 0.0% nice, 0.0% system, 0.4% interrupt, 99.6% idle
Mem: 8616K Active, 11M Inact, 45M Wired, 4396K Buf, 1900M Free
Swap: 512M Total, 512M Free
From:http://darren2000.pixnet.net/blog/post/2180080-freebsd%E4%B8%8A%E6%96%B0%E5%A2%9Eswap%E7%A9%BA%E9%96%93
https://www.cyberciti.biz/faq/create-a-freebsd-swap-file/
Freebsd下实时查看各种信息:
systat 能实时查看各种信息
systat -pigs 默认值CPU
systat -iostat 硬盘IO
systat -swap 交换分区
systat -mbufs 网络缓冲区
systat -vmstat 虚拟内存
systat -netstat 网络
systat -icmp ICMP协议
systat -ip IP协议
systat -tcp TCP协议
systat -ifstat 网卡
显示PCI总线设备信息
pciconf -lv
显示内核加载的模块
kldstat -v
显示指定模块
klsdstat -m ipfilter
即插即用设备
pnpinfo
显示设备占用的IRQ和内存地址
devinfo -u
cpu
sysctl -a|grep cpu
sysctl -a|grep sched 查看使用的调度器,我编译的是ULE
虚拟内存
vmstat
硬盘
gstat
systat -iostat
iostat
网卡
ifconfig
systat -ifstat
网络
netstat
sockstat
tcpdump
trafshow
systat -mbufs
systat -icmp
systat -ip
systat -tcp
只是看流量的话,用systat -netstat
https://my.oschina.net/u/187928/blog/37049
sendmail_enable="NO" # Run the sendmail inbound daemon (YES/NO).
不想重新启动服务器的话(应急措施)∶killall sendmail
/etc/rc.d/sendmail stop
Stopping sendmail.
Waiting for PIDS: 1489.
Cannot 'stop' sendmail_msp_queue. Set sendmail_msp_queue_enable to YES in /etc/rc.conf or use 'onestop' instead of 'stop'
/etc/rc.d/sendmail onestop
sendmail not running? (check /var/run/sendmail.pid).
sendmail_msp_queue not running? (check /var/spool/clientmqueue/sm-client.pid).
cat /etc/rc.conf
hostname="jackxiang_owncloud_tools_diff_nginx_php_mysql_redis-10-10-0-237"
ifconfig_vtnet0="inet 10.10.0.*** netmask 255.255.255.0"
defaultrouter="*.*.0.1"
sshd_enable=yes
syslogd_flags="-s"
devd_flags="-s"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
因为Service php-fpm或mysql及nginx出现Freebsd重启不了,于是这样写就Ok了:
vi /etc/rc.conf
/etc/rc.d的启动需要在 /etc/rc.conf里打开,用Service就能启动,前面出问题不知道啥原因:
/etc/rc.d/php-fpm
你可能会因为种种原因而想在 FreeBSD 服务器上彻底禁用 sendmail,那么你可以尝试这样∶
1,如果你不想重新启动服务器的话(应急措施)∶
# killall sendmail
2,如果你想让 sendmail 在启动的时候就不做任何行为的话,你需要把以下这几行加入到 /etc/rc.conf 中∶
sendmail_enable="NONE"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
加入之后需要重新启动服务器让设置生效。
来自:http://www.chinaz.com/server/2010/0226/107257.shtml
=============禁用freebsd ntpd 时间同步================
vi /etc/rc.conf
ntpd_enable="NO"
1.首先在rc.conf里面添加:ntpd_enable=”YES”。
2.修改/etc/ntp.conf
server 0.freebsd.pool.ntp.org iburst maxpoll 9
server 1.freebsd.pool.ntp.org iburst maxpoll 9
server 2.freebsd.pool.ntp.org iburst maxpoll 9
其他全部注释掉。
3.启动ntpd之前需要手动运行ntpdate pool.ntp.org先同步一下时间,避免因为系统时间与时间服务期时间相差太大导致渐次逼近无法实施而造成的ntpd运行失败。
4.运行/etc/rc.d/ntpd start启动服务。
5.可以通过ntpq -p命令来检查当前ntpd服务状态,注意看输出的表格中st这一项值,必须小于16,16代表无法连接时间服务器,如果都为16,则对时不能完成,需要检查网络原因。
6.ntpd服务需要开放对udp端口123的访问。
来自:http://www.voidcn.com/article/p-ebfmvhcn-ve.html
disable syslogd:
echo syslogd_enable=NO >> /etc/rc.conf
syslogd_enable="NO" # vi /etc/rc.conf
来自:https://superuser.com/questions/626305/disabling-syslogd-in-freebsd
devd进程禁用开机启动:
devd_enable="NO" # vi /etc/rc.conf
iftop在Port下的安装:
cd /usr/ports/net-mgmt/iftop/ && make install clean
Freebsd下面加大SWAP实践OK:
/etc/fstab
md99 none swap sw,file=/swapfile,late 0 0
手工生效,否则用这个swapinfo -m就会发现只有1M:
mdconfig -a -t vnode -f /swapfile -u 0 && swapon /dev/md0
swapinfo -m
Device 1M-blocks Used Avail Capacity
/dev/md0 512 0 512 0%
查看新增加的swap是否生效:top
CPU: 0.0% user, 0.0% nice, 0.0% system, 0.4% interrupt, 99.6% idle
Mem: 8616K Active, 11M Inact, 45M Wired, 4396K Buf, 1900M Free
Swap: 512M Total, 512M Free
From:http://darren2000.pixnet.net/blog/post/2180080-freebsd%E4%B8%8A%E6%96%B0%E5%A2%9Eswap%E7%A9%BA%E9%96%93
https://www.cyberciti.biz/faq/create-a-freebsd-swap-file/
Freebsd下实时查看各种信息:
systat 能实时查看各种信息
systat -pigs 默认值CPU
systat -iostat 硬盘IO
systat -swap 交换分区
systat -mbufs 网络缓冲区
systat -vmstat 虚拟内存
systat -netstat 网络
systat -icmp ICMP协议
systat -ip IP协议
systat -tcp TCP协议
systat -ifstat 网卡
显示PCI总线设备信息
pciconf -lv
显示内核加载的模块
kldstat -v
显示指定模块
klsdstat -m ipfilter
即插即用设备
pnpinfo
显示设备占用的IRQ和内存地址
devinfo -u
cpu
sysctl -a|grep cpu
sysctl -a|grep sched 查看使用的调度器,我编译的是ULE
虚拟内存
vmstat
硬盘
gstat
systat -iostat
iostat
网卡
ifconfig
systat -ifstat
网络
netstat
sockstat
tcpdump
trafshow
systat -mbufs
systat -icmp
systat -ip
systat -tcp
只是看流量的话,用systat -netstat
https://my.oschina.net/u/187928/blog/37049
[实践OK]Linux/linux centos下的SS/ss查看源端和目标端口Linux的Http端口命令完成情况,相当方便简单。
Unix/LinuxC技术 jackx 2017-9-8 10:13
背景:TCP高并发时用 netstat反应不过来,用ss,ss --help查不到下面的参数,得用 man ss查看。
Linux下的SS查看Linux的Http端口完成情况
Netid Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp 0 0 101.200.228.135:http 61.150.114.230:32331
tcp 0 0 101.200.228.135:http 61.150.114.230:32329
tcp 0 0 101.200.228.135:http 61.150.114.230:32347
tcp 0 0 101.200.228.135:http 61.150.114.230:32322
tcp 0 0 101.200.228.135:http 61.150.114.230:32346
tcp 0 0 101.200.228.135:http 61.150.114.230:32321
tcp 0 0 101.200.228.135:http 61.150.114.230:32327
tcp 0 0 101.200.228.135:http 61.150.114.230:32328
tcp 0 0 101.200.228.135:http 61.150.114.230:23159
tcp 0 0 101.200.228.135:http 1.85.216.135:50864
tcp 0 0 101.200.228.135:http 140.205.205.4:63844
#ss dst 10.51.77.34
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 10.51.77.34:6379 10.51.77.34:53590
tcp ESTAB 0 0 10.51.77.34:6379 10.51.77.34:53586
tcp ESTAB 0 0 10.51.77.34:53586 10.51.77.34:6379
tcp CLOSE-WAIT 1 0 10.51.77.34:43714 10.51.77.34:6379
tcp ESTAB 0 0 10.51.77.34:53590 10.51.77.34:6379
tcp CLOSE-WAIT 1 0 10.51.77.34:43718 10.51.77.34:6379
加个源端口过滤一下(sport = 6379,等号之间得有空格):
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 10.51.77.34:6379 10.51.77.34:53590
tcp ESTAB 0 0 10.51.77.34:6379 10.51.77.34:53586
查看源地址Http端口的一个情况:
tcp ESTAB 0 0 101.200.228.135:http 101.81.172.212:41352
tcp ESTAB 0 0 101.200.228.135:http 36.110.2.171:35007
tcp ESTAB 0 0 101.200.228.135:http 115.236.174.162:55497
tcp ESTAB 0 0 101.200.228.135:http 36.110.2.171:33458
Linux下的SS查看Linux的Http端口完成情况
Netid Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp 0 0 101.200.228.135:http 61.150.114.230:32331
tcp 0 0 101.200.228.135:http 61.150.114.230:32329
tcp 0 0 101.200.228.135:http 61.150.114.230:32347
tcp 0 0 101.200.228.135:http 61.150.114.230:32322
tcp 0 0 101.200.228.135:http 61.150.114.230:32346
tcp 0 0 101.200.228.135:http 61.150.114.230:32321
tcp 0 0 101.200.228.135:http 61.150.114.230:32327
tcp 0 0 101.200.228.135:http 61.150.114.230:32328
tcp 0 0 101.200.228.135:http 61.150.114.230:23159
tcp 0 0 101.200.228.135:http 1.85.216.135:50864
tcp 0 0 101.200.228.135:http 140.205.205.4:63844
#ss dst 10.51.77.34
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 10.51.77.34:6379 10.51.77.34:53590
tcp ESTAB 0 0 10.51.77.34:6379 10.51.77.34:53586
tcp ESTAB 0 0 10.51.77.34:53586 10.51.77.34:6379
tcp CLOSE-WAIT 1 0 10.51.77.34:43714 10.51.77.34:6379
tcp ESTAB 0 0 10.51.77.34:53590 10.51.77.34:6379
tcp CLOSE-WAIT 1 0 10.51.77.34:43718 10.51.77.34:6379
加个源端口过滤一下(sport = 6379,等号之间得有空格):
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 10.51.77.34:6379 10.51.77.34:53590
tcp ESTAB 0 0 10.51.77.34:6379 10.51.77.34:53586
查看源地址Http端口的一个情况:
tcp ESTAB 0 0 101.200.228.135:http 101.81.172.212:41352
tcp ESTAB 0 0 101.200.228.135:http 36.110.2.171:35007
tcp ESTAB 0 0 101.200.228.135:http 115.236.174.162:55497
tcp ESTAB 0 0 101.200.228.135:http 36.110.2.171:33458
[实践OK]redis C接口hiredis 简单函数使用介绍
Unix/LinuxC技术 jackx 2017-9-6 10:14
背景:搞一些Nginx的扩展啥的都用那个hiredis进行静态编译后,编译进Nginx,这儿先研究一下这个Redis的C连接认证以及取数据先。
代码@/usr/local/src/hiredis:
编译一下:
gcc redisTest.c /home/test/rpmbuild/BUILD/ngx_http_monitor_module-2.2.0/hiredis/libhiredis.a -I/home/test/rpmbuild/BUILD/ngx_http_monitor_module-2.2.0/
关于头文件之 linux下C include搜索的路径:http://blog.csdn.net/chosen0ne/article/details/7210946
编译静态的resis静态链接库make static,别make 会生成动态连接库,如果只指定 -L路径,会弄成了动态编译,有依赖SO的情况,静态文件大点无所谓了:
cd hiredis
make clean
make static
静态编译出来就是这样的:
ldd a.out
linux-vdso.so.1 => (0x00007ffeec95e000)
libc.so.6 => /lib64/libc.so.6 (0x0000003771400000)
/lib64/ld-linux-x86-64.so.2 (0x0000003771000000)
执行:
./a.out
Connect to redisServer Success
Authentication success
Succeed to execute command[set stest1 value1]
The length of 'stest1' is 6.
Succeed to execute command[strlen stest1]
The value of 'stest1' is value1
Succeed to execute command[get stest1]
Succeed to execute command[get stest2]
参考:http://blog.csdn.net/mniwc/article/details/12851837
代码@/usr/local/src/hiredis:
编译一下:
gcc redisTest.c /home/test/rpmbuild/BUILD/ngx_http_monitor_module-2.2.0/hiredis/libhiredis.a -I/home/test/rpmbuild/BUILD/ngx_http_monitor_module-2.2.0/
关于头文件之 linux下C include搜索的路径:http://blog.csdn.net/chosen0ne/article/details/7210946
编译静态的resis静态链接库make static,别make 会生成动态连接库,如果只指定 -L路径,会弄成了动态编译,有依赖SO的情况,静态文件大点无所谓了:
cd hiredis
make clean
make static
静态编译出来就是这样的:
ldd a.out
linux-vdso.so.1 => (0x00007ffeec95e000)
libc.so.6 => /lib64/libc.so.6 (0x0000003771400000)
/lib64/ld-linux-x86-64.so.2 (0x0000003771000000)
执行:
./a.out
Connect to redisServer Success
Authentication success
Succeed to execute command[set stest1 value1]
The length of 'stest1' is 6.
Succeed to execute command[strlen stest1]
The value of 'stest1' is value1
Succeed to execute command[get stest1]
Succeed to execute command[get stest2]
参考:http://blog.csdn.net/mniwc/article/details/12851837
"rpc.statd is not running" 解决方案
Unix/LinuxC技术 jackx 2017-8-18 21:42
/etc/init.d/rpcbind start
Starting rpcbind: [ OK ]
From:http://www.huo119.com/post/738.shtm
下面这个没有用:http://jingshengsun888.blog.51cto.com/1767811/1169111
[实践OK]kipmi0进程CPU占用率的问题,kipmi0进程单核CPU100%的解决办法。
Unix/LinuxC技术 jackx 2017-8-17 14:41
From:http://www.51niux.com/?id=118
背景: 一批老机器出现还没打开Nginx等负载就1了,一看是一个进程点用CPU几乎100%了,于是查了下网上,有这样一个说法。
kipmi0进程CPU占用率的问题
支持 IPMI 的服务器主板上运行 Linux,有的时候经常容易出现 top 命令列表中显示 kipmi0 进程的 CPU 占用接近 100%,禁用开机加载 IPMI 驱动才不会出现。
IPMI 驱动 CPU 占用说明
kipmi 导致的 CPU 使用增长是很常见的,这个硬件设备接口不是中断设备,所以驱动必须轮询设备的状态和消息。这个轮询显示成一个繁忙的CPU。
kipmi内核线程的优先级非常低(一般为 19),所以不会影响系统中的其他进程。甚至当轮询进入死循环(通常是它认为 BMC 有活跃事件需要它处理),它仍然会在任何进程需要CPU资源时放弃占用资源。
CPU通常视 kipmi0 内核线程为 IDLE 时间,kipmi0在没有其他任务运行时运行,并且是系统最低优先级的进程。
降低 CPU 占用的方法
可以通过以下方法使得 kipmi0 内核线程只使用 10% 的 CPU:
echo 100 > /sys/module/ipmi_si/parameters/kipmid_max_busy_us
如果想使此改动永久生效,那可以修改 ipmi_si 内核模块的加载参数,例如增加 /etc/modprobe.d/ipmi.conf 配置文件:
# Prevent kipmi0 from consuming 100% CPU
options ipmi_si kipmid_max_busy_us=100
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
182 root 39 19 0 0 0 R 100.0 0.0 55364:09 kipmi0
实践是临时修改:
echo 100 > /sys/module/ipmi_si/parameters/kipmid_max_busy_us
一会再看就会发现降下来了:
uptime
14:51:57 up 58 days, 22:50, 1 user, load average: 0.00, 0.00, 0.12
来自:https://wiki.zohead.com/%E6%8A%80%E6%9C%AF/Linux/kipmi0%E8%BF%9B%E7%A8%8BCPU%E5%8D%A0%E7%94%A8%E7%8E%87%E7%9A%84%E9%97%AE%E9%A2%98.md
http://blog.chinaunix.net/uid-29179844-id-5173247.html
oh-my-zsh配置你的zsh提高shell逼格终极选择
Unix/LinuxC技术 jackx 2017-8-14 11:21
如何使用zsh
如果是linux 系统,首先你需要安装 zsh
sudo yum install zsh
或者
sudo apt-get install zsh
来自:http://yijiebuyi.com/blog/b9b5e1ebb719f22475c38c4819ab8151.html
如果是linux 系统,首先你需要安装 zsh
sudo yum install zsh
或者
sudo apt-get install zsh
来自:http://yijiebuyi.com/blog/b9b5e1ebb719f22475c38c4819ab8151.html
查询linux自动重新启动原因
Unix/LinuxC技术 jackx 2017-8-14 10:46
1、Linux 服务器因 CPU 温度过高自动重启
http://www.s2.cn/news.php?id=33
2、Linux服务器不明原因重启了,怎么查找原因
http://bbs.51cto.com/archiver/tid-861470.html
3、重启的信息可以通过
dmesg来看
系统的log一般都是记录在/var/log/messages里
命令:
cat /var/log/messages | grep 'reboot'
4、linux启动日志: /var/log/boot.log
实践如下:
[root@xiyou-vedio_encode_bj_sjs_10_71_11_22 ~]# last reboot
reboot system boot 2.6.32-696.6.3.e Mon Aug 14 10:37 - 10:41 (00:03)
reboot system boot 2.6.32-696.6.3.e Mon Aug 14 09:57 - 10:41 (00:43)
reboot system boot 2.6.32-696.6.3.e Mon Aug 14 08:58 - 10:41 (01:43)
reboot system boot 2.6.32-696.6.3.e Mon Aug 14 08:52 - 10:41 (01:48)
reboot system boot 2.6.32-696.6.3.e Mon Aug 14 08:36 - 10:41 (02:04)
reboot system boot 2.6.32-696.6.3.e Mon Aug 14 08:07 - 10:41 (02:34)
[root@xiyou-vedio_encode_bj_sjs_10_71_11_22 ~]# cal
August 2017
Su Mo Tu We Th Fr Sa
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
linux启动日志: /var/log/boot.log
mount.nfs: rpc.statd is not running but is required for remote locking.
mount.nfs: Either use '-o nolock' to keep locks local, or start statd.
mount.nfs: an incorrect mount option was specified
来自:http://blog.sina.com.cn/s/blog_56d8ea900101cytr.html
http://www.s2.cn/news.php?id=33
2、Linux服务器不明原因重启了,怎么查找原因
http://bbs.51cto.com/archiver/tid-861470.html
3、重启的信息可以通过
dmesg来看
系统的log一般都是记录在/var/log/messages里
命令:
cat /var/log/messages | grep 'reboot'
4、linux启动日志: /var/log/boot.log
实践如下:
[root@xiyou-vedio_encode_bj_sjs_10_71_11_22 ~]# last reboot
reboot system boot 2.6.32-696.6.3.e Mon Aug 14 10:37 - 10:41 (00:03)
reboot system boot 2.6.32-696.6.3.e Mon Aug 14 09:57 - 10:41 (00:43)
reboot system boot 2.6.32-696.6.3.e Mon Aug 14 08:58 - 10:41 (01:43)
reboot system boot 2.6.32-696.6.3.e Mon Aug 14 08:52 - 10:41 (01:48)
reboot system boot 2.6.32-696.6.3.e Mon Aug 14 08:36 - 10:41 (02:04)
reboot system boot 2.6.32-696.6.3.e Mon Aug 14 08:07 - 10:41 (02:34)
[root@xiyou-vedio_encode_bj_sjs_10_71_11_22 ~]# cal
August 2017
Su Mo Tu We Th Fr Sa
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
linux启动日志: /var/log/boot.log
mount.nfs: rpc.statd is not running but is required for remote locking.
mount.nfs: Either use '-o nolock' to keep locks local, or start statd.
mount.nfs: an incorrect mount option was specified
来自:http://blog.sina.com.cn/s/blog_56d8ea900101cytr.html
[实践OK]一个JavaScript函数把URL参数解析成Json对象
Unix/LinuxC技术 jackx 2017-8-13 19:39
问题:请编写一个JavaScript函数parseQueryString,它的用途是把URL参数解析为一个对象。
运行结果:
a c
eg:var obj=parseQueryString(url);
创建对象的三种形式:
一:
var Person=new Object();
Person.name="Sun";
Person.age=24;
二:
var Person=new Object();
Person["name"]="Sun";
Person["age"]=24;
三:
对象字面量表达式
var Person={
name: "Sun",
age: 24
}
PS:
1、在这个例子中,比较适合使用第二种形式,向obj中添加元素
2、split("&") , 如果url只有一个参数的时候,没有“&”的时候,也不会报错,只会返回array[0]
function parseQueryString(url) {
var obj = {};
var keyvalue = [];
var key = "",
value = "";
var paraString = url.substring(url.indexOf("?") + 1, url.length).split("&");
for (var i in paraString) {
keyvalue = paraString[i].split("=");
key = keyvalue[0];
value = keyvalue[1];
obj[key] = value;
}
return obj;
}
以下介绍了JS根据key值获取URL中的参数值及把URL的参数转换成json对象,js通过两种方式获取url传递参数,代码
示例一:
//把url的参数部分转化成json对象
parseQueryString: function(url) {
var reg_url = /^[^/?]+/ ? ([/w/W] + ) $ / ,
reg_para = /([^&=]+)=([/w/W]*?)(&|$|#)/g,
arr_url = reg_url.exec(url),
ret = {};
if (arr_url && arr_url[1]) {
var str_para = arr_url[1],
result;
while ((result = reg_para.exec(str_para)) != null) {
ret[result[1]] = result[2];
}
}
return ret;
}
// 通过key获取url中的参数值
getQueryString: function(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if (r != null) return unescape(r[2]);
return null;
}
示例二:
js通过两种方法获取url传递参数:
js获取url传递参数方法一:
这里是一个获取URL带QUESTRING参数的JAVASCRIPT客户端解决方案,相当于asp的request.querystring,PHP的$_GET
函数:
function GetRequest() {
var url = location.search; //获取url中"?"符后的字串
var theRequest = new Object();
if (url.indexOf("?") != -1) {
var str = url.substr(1);
strs = str.split("&");
for (var i = 0; i < strs.length; i++) {
theRequest[strs[i].split("=")[0]] = (strs[i].split("=")[1]);
}
}
return theRequest;
}
然后我们通过调用此函数获取对应参数值:
var Request = new Object();
Request = GetRequest();
var 参数1,参数2,参数3,参数N;
参数1 = Request[''参数1''];
参数2 = Request[''参数2''];
参数3 = Request[''参数3''];
参数N = Request[''参数N''];
以此获取url串中所带的同名参数
js获取url传递参数方法二 正则分析法:
function GetQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if (r != null) return (r[2]);
return null;
}
alert(GetQueryString("参数名1"));
alert(GetQueryString("参数名2"));
alert(GetQueryString("参数名3"));
其他参数获取介绍:
//设置或获取对象指定的文件名或路径。
alert(window.location.pathname);
//设置或获取整个 URL 为字符串。
alert(window.location.href);
//设置或获取与 URL 关联的端口号码。
alert(window.location.port);
//设置或获取 URL 的协议部分。
alert(window.location.protocol);
//设置或获取 href 属性中在井号“#”后面的分段。
alert(window.location.hash);
//设置或获取 location 或 URL 的 hostname 和 port 号码。
alert(window.location.host);
//设置或获取 href 属性中跟在问号后面的部分。
alert(window.location.search);
From:https://www.w3cschool.cn/json/1koy1piy.html
运行结果:
a c
eg:var obj=parseQueryString(url);
创建对象的三种形式:
一:
var Person=new Object();
Person.name="Sun";
Person.age=24;
二:
var Person=new Object();
Person["name"]="Sun";
Person["age"]=24;
三:
对象字面量表达式
var Person={
name: "Sun",
age: 24
}
PS:
1、在这个例子中,比较适合使用第二种形式,向obj中添加元素
2、split("&") , 如果url只有一个参数的时候,没有“&”的时候,也不会报错,只会返回array[0]
function parseQueryString(url) {
var obj = {};
var keyvalue = [];
var key = "",
value = "";
var paraString = url.substring(url.indexOf("?") + 1, url.length).split("&");
for (var i in paraString) {
keyvalue = paraString[i].split("=");
key = keyvalue[0];
value = keyvalue[1];
obj[key] = value;
}
return obj;
}
以下介绍了JS根据key值获取URL中的参数值及把URL的参数转换成json对象,js通过两种方式获取url传递参数,代码
示例一:
//把url的参数部分转化成json对象
parseQueryString: function(url) {
var reg_url = /^[^/?]+/ ? ([/w/W] + ) $ / ,
reg_para = /([^&=]+)=([/w/W]*?)(&|$|#)/g,
arr_url = reg_url.exec(url),
ret = {};
if (arr_url && arr_url[1]) {
var str_para = arr_url[1],
result;
while ((result = reg_para.exec(str_para)) != null) {
ret[result[1]] = result[2];
}
}
return ret;
}
// 通过key获取url中的参数值
getQueryString: function(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if (r != null) return unescape(r[2]);
return null;
}
示例二:
js通过两种方法获取url传递参数:
js获取url传递参数方法一:
这里是一个获取URL带QUESTRING参数的JAVASCRIPT客户端解决方案,相当于asp的request.querystring,PHP的$_GET
函数:
function GetRequest() {
var url = location.search; //获取url中"?"符后的字串
var theRequest = new Object();
if (url.indexOf("?") != -1) {
var str = url.substr(1);
strs = str.split("&");
for (var i = 0; i < strs.length; i++) {
theRequest[strs[i].split("=")[0]] = (strs[i].split("=")[1]);
}
}
return theRequest;
}
然后我们通过调用此函数获取对应参数值:
var Request = new Object();
Request = GetRequest();
var 参数1,参数2,参数3,参数N;
参数1 = Request[''参数1''];
参数2 = Request[''参数2''];
参数3 = Request[''参数3''];
参数N = Request[''参数N''];
以此获取url串中所带的同名参数
js获取url传递参数方法二 正则分析法:
function GetQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if (r != null) return (r[2]);
return null;
}
alert(GetQueryString("参数名1"));
alert(GetQueryString("参数名2"));
alert(GetQueryString("参数名3"));
其他参数获取介绍:
//设置或获取对象指定的文件名或路径。
alert(window.location.pathname);
//设置或获取整个 URL 为字符串。
alert(window.location.href);
//设置或获取与 URL 关联的端口号码。
alert(window.location.port);
//设置或获取 URL 的协议部分。
alert(window.location.protocol);
//设置或获取 href 属性中在井号“#”后面的分段。
alert(window.location.hash);
//设置或获取 location 或 URL 的 hostname 和 port 号码。
alert(window.location.host);
//设置或获取 href 属性中跟在问号后面的部分。
alert(window.location.search);
From:https://www.w3cschool.cn/json/1koy1piy.html
[实践OK]用c语言实现HUP信号重启进程的方法~
Unix/LinuxC技术 jackx 2017-8-11 20:30
背景:用Linux的信号Signal实现发信号给进程,是一种进程间通讯的办法,主要用来重新加载配置、重启服务、杀死进程、进程间通讯等。
下面就是一个通过向进程发送Signal信号以该进程退出,重新起了一新的子进程,用到了kill -HUP PID,主要是学习HUP信号的C语言编码方法。
gcc 编译:
gcc nohup.c -o b.out
运行:
./a.out
ps aux|grep b.out
root 4919 0.0 0.1 4296 1328 pts/6 S+ 20:22 0:00 ./b.out
kill -HUP 4919
#ps aux|grep b.out
root 4958 0.0 0.1 4296 1324 pts/6 S 20:23 0:00 ./b.out
From:http://www.jb51.net/article/37422.htm
下面就是一个通过向进程发送Signal信号以该进程退出,重新起了一新的子进程,用到了kill -HUP PID,主要是学习HUP信号的C语言编码方法。
gcc 编译:
gcc nohup.c -o b.out
运行:
./a.out
ps aux|grep b.out
root 4919 0.0 0.1 4296 1328 pts/6 S+ 20:22 0:00 ./b.out
kill -HUP 4919
#ps aux|grep b.out
root 4958 0.0 0.1 4296 1324 pts/6 S 20:23 0:00 ./b.out
From:http://www.jb51.net/article/37422.htm
[实践Ok]Linux下常用命令行,以及查下最后登录/最近登录系统的用户是谁的命令
Unix/LinuxC技术 jackx 2017-8-2 09:58
查下最后登录/最近登录系统的用户是谁的命令:last ,上次登录的历史信息。通过搜索:/var/log/wtmp,
last
root pts/8 111.199.59.117 Mon Jan 8 22:12 still logged in
nl file.txt #看行数
快捷打开Vim:Ctrl+x+e ,先设置:
export EDITOR=/usr/local/bin/vim
du -h --max-depth=1
3.7M ./.git
20K ./nianbaoc++
28K ./echoman
24K ./nodestudy
16K ./epoll_example_codes
15M .
expr 做加减法:
expr 1 + 1
2
look命令:
look car
Linux look命令Linux 命令大全Linux look命令用于查询单词。look指令用于英文单字的查询
look没有find功能强大,但他有一个功能是find所没有的,就是搜索英文单词我们知道系统自带的单词表是没有中文解释的,如果你安装的是中文操作系统。 我们就可以自制一个英文词汇表
http://www.it610.com/article/2766338.htm
look car
CAR
Car
car
Cara
Carabancel
...
look: /usr/share/dict/words: 没有那个文件或目录
ls /usr/share/dict/words
/usr/share/dict/words
32位还是64位操作系统?
getconf LONG_BIT
64
dstat
You did not select any stats, using -cdngy by default.
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read writ| recv send| in out | int csw
4 4 92 0 0 0| 64k 33k| 0 0 |4075B 2071B| 258 308
1 1 98 0 0 0| 384k 0 | 48k 43k| 0 0 | 249 211
7 17 75 0 0 1| 0 248k|4854B 12k| 0 0 | 592 673
last
root pts/8 111.199.59.117 Mon Jan 8 22:12 still logged in
nl file.txt #看行数
快捷打开Vim:Ctrl+x+e ,先设置:
export EDITOR=/usr/local/bin/vim
du -h --max-depth=1
3.7M ./.git
20K ./nianbaoc++
28K ./echoman
24K ./nodestudy
16K ./epoll_example_codes
15M .
expr 做加减法:
expr 1 + 1
2
look命令:
look car
Linux look命令Linux 命令大全Linux look命令用于查询单词。look指令用于英文单字的查询
look没有find功能强大,但他有一个功能是find所没有的,就是搜索英文单词我们知道系统自带的单词表是没有中文解释的,如果你安装的是中文操作系统。 我们就可以自制一个英文词汇表
http://www.it610.com/article/2766338.htm
look car
CAR
Car
car
Cara
Carabancel
...
look: /usr/share/dict/words: 没有那个文件或目录
ls /usr/share/dict/words
/usr/share/dict/words
32位还是64位操作系统?
getconf LONG_BIT
64
dstat
You did not select any stats, using -cdngy by default.
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read writ| recv send| in out | int csw
4 4 92 0 0 0| 64k 33k| 0 0 |4075B 2071B| 258 308
1 1 98 0 0 0| 384k 0 | 48k 43k| 0 0 | 249 211
7 17 75 0 0 1| 0 248k|4854B 12k| 0 0 | 592 673
勒索软件横行,是该用key登陆ssh了!
Unix/LinuxC技术 jackx 2017-7-27 09:41
5月12日晚,WanaCrypt0r 2.0勒索软件在全球爆发(简称 WCry2.0),Wcry2.0利用4月份nsa泄露的安全漏洞对windows系统进行攻击,从而植入勒索软件,据统计全球上百个国家的13万多台电脑遭到感染,其中不乏大型企业,医院及各种公共服务行业,带来了巨大的恶意影响。
漏洞、文件加密型的勒索软件、比特币付费解密的完美组合,已成为网络攻击敲诈勒索的最佳实践。我们看到近年来不断出现利用各种服务漏洞和不安全配置进行勒索敲诈的案例,如大量裸奔在互联网的hadoop、mongodb、elasticsearch等服务的不安全配置及弱口令导致的勒索。
同样linux ssh服务也面临以上的风险,据国外媒体报道,一台在互联网运行的linux系统开启ssh服务10秒内,就会出现对ssh的口令破解攻击,由此可见攻击者通过自动化的方式不断去扫描整个互联网寻找攻击目标,ssh用户口令破解也因为攻击手段简单、粗暴,技术门槛低成为最常见的攻击方式。ssh做为linux系统最最主要的远程管理工具,一旦成功破解系统用户密码,尤其是root用户,就会获得系统的最高权限,除了可以通过勒索软件用来实施勒索外,系统也可能被安装后门、木马等恶意软件,成为僵尸主机。
如果您还在使用密码登陆ecs实例的ssh服务,除了通过安全组设置严格的ssh服务登陆源地址外,强烈建议改用SSH密钥对 登陆ecs实例,禁用密码方式登陆。SSH密钥对利用高强度的公私钥及对称加密算法实现对用户的认证,有效降低了破解用户口令的攻击。
来源:某云,后面是广告,就不粘贴了。
漏洞、文件加密型的勒索软件、比特币付费解密的完美组合,已成为网络攻击敲诈勒索的最佳实践。我们看到近年来不断出现利用各种服务漏洞和不安全配置进行勒索敲诈的案例,如大量裸奔在互联网的hadoop、mongodb、elasticsearch等服务的不安全配置及弱口令导致的勒索。
同样linux ssh服务也面临以上的风险,据国外媒体报道,一台在互联网运行的linux系统开启ssh服务10秒内,就会出现对ssh的口令破解攻击,由此可见攻击者通过自动化的方式不断去扫描整个互联网寻找攻击目标,ssh用户口令破解也因为攻击手段简单、粗暴,技术门槛低成为最常见的攻击方式。ssh做为linux系统最最主要的远程管理工具,一旦成功破解系统用户密码,尤其是root用户,就会获得系统的最高权限,除了可以通过勒索软件用来实施勒索外,系统也可能被安装后门、木马等恶意软件,成为僵尸主机。
如果您还在使用密码登陆ecs实例的ssh服务,除了通过安全组设置严格的ssh服务登陆源地址外,强烈建议改用SSH密钥对 登陆ecs实例,禁用密码方式登陆。SSH密钥对利用高强度的公私钥及对称加密算法实现对用户的认证,有效降低了破解用户口令的攻击。
来源:某云,后面是广告,就不粘贴了。
[实践OK]在Linux的Shell系统下的Date/date函数用法,以及用format格式化获取昨天、明天或多天前的日期输出的用法~
Unix/LinuxC技术 jackx 2017-7-20 16:51
背景:经常一些应用爱搞一天一个目录,天数多了里面文件也大了,磁盘也占满了,怎么办?得每天删除1个月的日志。于是一个月的时间就得用上了。
Mysql删除七天前的,搬过来:
我要的是这个:
一、Linux的Shell系统下的Date/date函数用法:
Egg: cat /root/del_catalina.sh
In Bash:
get year-month-day from date
DATE=`date +%Y-%m-%d`
get year-month-day hour:minute:second from date
DATE=`date +%Y-%m-%d:%H:%M:%S`
二、获取昨天、明天或多天前的日期:
在Linux中可以通过date命令获取昨天、明天、上个月、下个月、上一年和下一年
# 获取昨天
date -d 'yesterday' # 或 date -d 'last day'
# 获取明天
date -d 'tomorrow' # 或 date -d 'next day'
# 获取上个月
date -d 'last month'
# 获取下个月
date -d 'next month'
# 获取上一年
date -d ’last year'
# 获取下一年
date -d 'next year'
此外你可以获取多天前,多天后,多个月前,多个月后,多年前或多年后
# 三年前
date -d '3 year ago'
# 五年后
date -d '-5 year ago'
# 两天后
date -d '-2 day ago'
# 一个月前
date -d '1 month ago'
来自:https://my.oschina.net/aiguozhe/blog/57835
Mysql删除七天前的,搬过来:
我要的是这个:
一、Linux的Shell系统下的Date/date函数用法:
Egg: cat /root/del_catalina.sh
In Bash:
get year-month-day from date
DATE=`date +%Y-%m-%d`
get year-month-day hour:minute:second from date
DATE=`date +%Y-%m-%d:%H:%M:%S`
二、获取昨天、明天或多天前的日期:
在Linux中可以通过date命令获取昨天、明天、上个月、下个月、上一年和下一年
# 获取昨天
date -d 'yesterday' # 或 date -d 'last day'
# 获取明天
date -d 'tomorrow' # 或 date -d 'next day'
# 获取上个月
date -d 'last month'
# 获取下个月
date -d 'next month'
# 获取上一年
date -d ’last year'
# 获取下一年
date -d 'next year'
此外你可以获取多天前,多天后,多个月前,多个月后,多年前或多年后
# 三年前
date -d '3 year ago'
# 五年后
date -d '-5 year ago'
# 两天后
date -d '-2 day ago'
# 一个月前
date -d '1 month ago'
来自:https://my.oschina.net/aiguozhe/blog/57835