Linux执行shell脚本报Could not open input file什么原因?

回复

zkbhj 回复了问题 • 1 人关注 • 1 个回复 • 237 次浏览 • 2018-12-06 16:31 • 来自相关话题

一点点学习Linux:如何添加crontab计划任务?

zkbhj 发表了文章 • 0 个评论 • 169 次浏览 • 2018-11-13 11:53 • 来自相关话题

crond 是linux用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。crond命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。可以用以下的方法启动、关闭这个服务:
/sbin/service crond start //启动服务

/sbin/service crond stop //关闭服务

/sbin/service crond restart //重启服务

/sbin/service crond reload //重新载入配置1.linux任务调度的工作主要分为以下两类:

系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存

个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置。


2.crontab命令选项:

cron服务提供crontab命令来设定cron服务的,以下是这个命令的一些参数与说明:

crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数

crontab -l //列出某个用户cron服务的详细内容

crontab -r //删除某个用户的cron服务

crontab -e //编辑某个用户的cron服务

比如说root查看自己的cron设置:crontab -u root -l

再例如,root想删除fred的cron设置:crontab -u fred -r

在编辑cron服务时,编辑的内容有一些格式和约定,输入:crontab -u root -e

进入vi编辑模式,编辑的内容一定要符合下面的格式:*/1 * * * * ls >> /tmp/ls.txt

3.cron文件语法 分 小时 日 月 星期 命令

0-59 0-23 1-31 1-12 0-6 command (取值范围,0表示周日一般一行对应一个任务)4.记住几个特殊符号的含义:

"*"代表取值范围内的数字,

"/"代表"每",

"-"代表从某个数字到某个数字,

","分开几个离散的数字
 
5.举几个例子
5 * * * * ls //指定每小时的第5分钟执行一次ls命令

30 5 * * * ls //指定每天的 5:30 执行ls命令

30 7 8 * * ls //指定每月8号的7:30分执行ls命令

30 5 8 6 * ls //指定每年的6月8日5:30执行ls命令

30 6 * * 0 ls //指定每星期日的6:30执行ls命令[注:0表示星期天,1表示星期1,以此类推,也可以用英文来表示,sun表示星期天,mon表示星期一等。]

30 3 10,20 * * ls //每月10号及20号的3:30执行ls命令[注:”,”用来连接多个不连续的时段]

25 8-11 * * * ls //每天8-11点的第25分钟执行ls命令[注:”-”用来连接连续的时段]

*/15 * * * * ls //每15分钟执行一次ls命令 [即每个小时的第0 15 30 45 60分钟执行ls命令 ]

30 6 */10 * * ls //每个月中,每隔10天6:30执行一次ls命令[即每月的1、11、21、31日是的6:30执行一次ls命令。 ]

50 7 * * * root run-parts /etc/cron.daily //每天7:50以root 身份执行/etc/cron.daily目录中的所有可执行文件[ 注:run-parts参数表示,执行后面目录中的所有可执行文件。 ]6.新增调度任务可用两种方法:

a.在命令行输入: crontab -e 然后添加相应的任务,wq存盘退出。

b.直接编辑/etc/crontab 文件,即vi /etc/crontab,添加相应的任务。 查看全部
crond 是linux用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。crond命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。可以用以下的方法启动、关闭这个服务:
/sbin/service crond start //启动服务

/sbin/service crond stop //关闭服务

/sbin/service crond restart //重启服务

/sbin/service crond reload //重新载入配置
1.linux任务调度的工作主要分为以下两类:


系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存

个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置。



2.crontab命令选项:

cron服务提供crontab命令来设定cron服务的,以下是这个命令的一些参数与说明:

crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数

crontab -l //列出某个用户cron服务的详细内容

crontab -r //删除某个用户的cron服务

crontab -e //编辑某个用户的cron服务

比如说root查看自己的cron设置:crontab -u root -l

再例如,root想删除fred的cron设置:crontab -u fred -r

在编辑cron服务时,编辑的内容有一些格式和约定,输入:crontab -u root -e

进入vi编辑模式,编辑的内容一定要符合下面的格式:*/1 * * * * ls >> /tmp/ls.txt

3.cron文件语法
  分     小时      日       月       星期      命令

0-59 0-23 1-31 1-12 0-6 command (取值范围,0表示周日一般一行对应一个任务)
4.记住几个特殊符号的含义:

"*"代表取值范围内的数字,

"/"代表"每",

"-"代表从某个数字到某个数字,

","分开几个离散的数字
 
5.举几个例子
5       *       *       *      *     ls              //指定每小时的第5分钟执行一次ls命令

30 5 * * * ls //指定每天的 5:30 执行ls命令

30 7 8 * * ls //指定每月8号的7:30分执行ls命令

30 5 8 6 * ls //指定每年的6月8日5:30执行ls命令

30 6 * * 0 ls //指定每星期日的6:30执行ls命令[注:0表示星期天,1表示星期1,以此类推,也可以用英文来表示,sun表示星期天,mon表示星期一等。]

30 3 10,20 * * ls //每月10号及20号的3:30执行ls命令[注:”,”用来连接多个不连续的时段]

25 8-11 * * * ls //每天8-11点的第25分钟执行ls命令[注:”-”用来连接连续的时段]

*/15 * * * * ls //每15分钟执行一次ls命令 [即每个小时的第0 15 30 45 60分钟执行ls命令 ]

30 6 */10 * * ls //每个月中,每隔10天6:30执行一次ls命令[即每月的1、11、21、31日是的6:30执行一次ls命令。 ]

50 7 * * * root run-parts /etc/cron.daily //每天7:50以root 身份执行/etc/cron.daily目录中的所有可执行文件[ 注:run-parts参数表示,执行后面目录中的所有可执行文件。 ]
6.新增调度任务可用两种方法:

a.在命令行输入: crontab -e 然后添加相应的任务,wq存盘退出。

b.直接编辑/etc/crontab 文件,即vi /etc/crontab,添加相应的任务。

如何在Linux上查找大文件或者目录?

回复

zkbhj 回复了问题 • 1 人关注 • 1 个回复 • 202 次浏览 • 2018-10-18 17:53 • 来自相关话题

为什么Linux的Crond最小只支持分钟级别的定时任务?Crontab工作机制探究

zkbhj 发表了文章 • 0 个评论 • 218 次浏览 • 2018-10-17 15:21 • 来自相关话题

在开发过程中,经常会有用到计划任务的时候。一般来讲,常见的大部分需求也很好实现,Linux的定时任务简单地配置到crontab里面就可以了,设置方法也很简单,如下所示,6个参数依次表示为“分、时、日、月、周和具体任务”(示例为每天凌晨3点执行freshclam工作)。
[root@student ~]# crontab -l
0 3 * * * freshclam然而,从5个时间参数来看最小是精确到某一分钟执行。如果要想实现秒级的定时任务,那么该怎么做呢? 
首先,我们先探究下Linux的Crond工作的机制是怎么样的。
 cron 是一个可以用来根据时间、日期、月份、星期的组合来调度对重复任务的执行的守护进程。

cron 假定系统持续运行。如果当某任务被调度时系统不在运行,该任务就不会被执行。

要使用 cron 服务,你必须安装了 vixie-cron RPM 软件包,而且必须在运行crond 服务。要判定该软件包是否已安装,使用 rpm -q vixie-cron 命令。要判定该服务是否在运行,使用 /sbin/service crond status 命令。
 
配置
 
cron 的主配置文件是 /etc/crontab,它包括下面几行:SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly前四行是用来配置 cron 任务运行环境的变量。SHELL 变量的值告诉系统要使用哪个 shell 环境(在这个例子里是 bash shell);PATH 变量定义用来执行命令的路径。cron 任务的输出被邮寄给MAILTO 变量定义的用户名。如果 MAILTO 变量被定义为空白字符串(MAILTO=""),电子邮件就不会被寄出。HOME 变量可以用来设置在执行命令或脚本时使用的主目录。

/etc/crontab 文件中的每一行都代表一项任务,它的格式是:
minute hour day month dayofweek command 

minute — 分钟,从 0 到 59 之间的任何整数

hour — 小时,从 0 到 23 之间的任何整数

day — 日期,从 1 到 31 之间的任何整数(如果指定了月份,必须是该月份的有效日期)

month — 月份,从 1 到 12 之间的任何整数(或使用月份的英文简写如 jan、feb 等等)

dayofweek — 星期,从 0 到 7 之间的任何整数,这里的 0 或 7 代表星期日(或使用星期的英文简写如 sun、mon 等等)

command — 要执行的命令(命令可以是ls /proc >> /tmp/proc 之类的命令,也可以是执行你自行编写的脚本的命令。)

 
在以上任何值中,星号(*)可以用来代表所有有效的值。譬如,月份值中的星号意味着在满足其它制约条件后每月都执行该命令。

整数间的短线(-)指定一个整数范围。譬如,1-4 意味着整数 1、2、3、4。

用逗号(,)隔开的一系列值指定一个列表。譬如,3, 4, 6, 8 标明这四个指定的整数。

正斜线(/)可以用来指定间隔频率。在范围后加上 /<integer> 意味着在范围内可以跳过 integer。譬如,0-59/2 可以用来在分钟字段定义每两分钟。间隔频率值还可以和星号一起使用。例如,*/3 的值可以用在月份字段中表示每三个月运行一次任务。

开头为井号(#)的行是注释,不会被处理。

如你在 /etc/crontab 文件中所见,它使用run-parts 脚本来执行 /etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly和/etc/cron.monthly 目录中的脚本,这些脚本被相应地每小时、每日、每周、或每月执行。这些目录中的文件应该是 shell 脚本。

如果某 cron 任务需要根据调度来执行,而不是每小时、每日、每周、或每月地执行,它可以被添加到 /etc/cron.d 目录中。该目录中的所有文件使用和 /etc/crontab 中一样的语法。# record the memory usage of the system every monday
# at 3:30AM in the file /tmp/meminfo
30 3 * * mon cat /proc/meminfo >> /tmp/meminfo
# run custom script the first day of every month at 4:10AM
10 4 1 * * /root/scripts/backup.sh根用户以外的用户可以使用 crontab 工具来配置 cron 任务。所有用户定义的 crontab 都被保存在/var/spool/cron 目录中,并使用创建它们的用户身份来执行。要以某用户身份创建一个 crontab 项目,登录为该用户,然后键入crontab -e 命令,使用由 VISUAL 或 EDITOR环境变量指定的编辑器来编辑该用户的 crontab。该文件使用的格式和/etc/crontab 相同。当对 crontab 所做的改变被保存后,该 crontab 文件就会根据该用户名被保存,并写入文件/var/spool/cron/username 中。

cron 守护进程每分钟都检查 /etc/crontab 文件、etc/cron.d/ 目录、以及/var/spool/cron 目录中的改变。如果发现了改变,它们就会被载入内存。这样,当某个 crontab 文件改变后就不必重新启动守护进程了。
 
 控制对 cron 的使用
 
/etc/cron.allow 和/etc/cron.deny 文件被用来限制对 cron 的使用。这两个使用控制文件的格式都是每行一个用户。两个文件都不允许空格。如果使用控制文件被修改了,cron 守护进程(crond)不必被重启。使用控制文件在每次用户添加或删除一项 cron 任务时都会被读取。

无论使用控制文件中的规定如何,根用户都总是可以使用 cron。

如果 cron.allow 文件存在,只有其中列出的用户才被允许使用 cron,并且cron.deny 文件会被忽略。

如果 cron.allow 文件不存在,所有在cron.deny 中列出的用户都被禁止使用 cron。
 
启动和停止服务
 
要启动 cron 服务,使用 /sbin/service crond start 命令。要停止该服务,使用/sbin/service crond stop 命令。推荐你在引导时启动该服务。

由于Cron 是Linux的内置服务,可以用以下的方法启动、关闭这个服务:/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置
要实现秒级的计划任务,可以使用开源项目:Quartz
详细:http://www.quartz-scheduler.org/
 参考文章:
https://blog.csdn.net/wenqiang1208/article/details/74853519
https://blog.csdn.net/foxman209/article/details/6759920?utm_source=blogxgwz4
  查看全部
在开发过程中,经常会有用到计划任务的时候。一般来讲,常见的大部分需求也很好实现,Linux的定时任务简单地配置到crontab里面就可以了,设置方法也很简单,如下所示,6个参数依次表示为“分、时、日、月、周和具体任务”(示例为每天凌晨3点执行freshclam工作)。
[root@student ~]# crontab -l
0 3 * * * freshclam
然而,从5个时间参数来看最小是精确到某一分钟执行。如果要想实现秒级的定时任务,那么该怎么做呢? 
首先,我们先探究下Linux的Crond工作的机制是怎么样的。
 cron 是一个可以用来根据时间、日期、月份、星期的组合来调度对重复任务的执行的守护进程。

cron 假定系统持续运行。如果当某任务被调度时系统不在运行,该任务就不会被执行。

要使用 cron 服务,你必须安装了 vixie-cron RPM 软件包,而且必须在运行crond 服务。要判定该软件包是否已安装,使用 rpm -q vixie-cron 命令。要判定该服务是否在运行,使用 /sbin/service crond status 命令。
 
配置
 
cron 的主配置文件是 /etc/crontab,它包括下面几行:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
前四行是用来配置 cron 任务运行环境的变量。SHELL 变量的值告诉系统要使用哪个 shell 环境(在这个例子里是 bash shell);PATH 变量定义用来执行命令的路径。cron 任务的输出被邮寄给MAILTO 变量定义的用户名。如果 MAILTO 变量被定义为空白字符串(MAILTO=""),电子邮件就不会被寄出。HOME 变量可以用来设置在执行命令或脚本时使用的主目录。

/etc/crontab 文件中的每一行都代表一项任务,它的格式是:
minute         hour         day         month         dayofweek         command
 


minute — 分钟,从 0 到 59 之间的任何整数

hour — 小时,从 0 到 23 之间的任何整数

day — 日期,从 1 到 31 之间的任何整数(如果指定了月份,必须是该月份的有效日期)

month — 月份,从 1 到 12 之间的任何整数(或使用月份的英文简写如 jan、feb 等等)

dayofweek — 星期,从 0 到 7 之间的任何整数,这里的 0 或 7 代表星期日(或使用星期的英文简写如 sun、mon 等等)

command — 要执行的命令(命令可以是ls /proc >> /tmp/proc 之类的命令,也可以是执行你自行编写的脚本的命令。)


 
在以上任何值中,星号(*)可以用来代表所有有效的值。譬如,月份值中的星号意味着在满足其它制约条件后每月都执行该命令。

整数间的短线(-)指定一个整数范围。譬如,1-4 意味着整数 1、2、3、4。

用逗号(,)隔开的一系列值指定一个列表。譬如,3, 4, 6, 8 标明这四个指定的整数。

正斜线(/)可以用来指定间隔频率。在范围后加上 /<integer> 意味着在范围内可以跳过 integer。譬如,0-59/2 可以用来在分钟字段定义每两分钟。间隔频率值还可以和星号一起使用。例如,*/3 的值可以用在月份字段中表示每三个月运行一次任务。

开头为井号(#)的行是注释,不会被处理。

如你在 /etc/crontab 文件中所见,它使用run-parts 脚本来执行 /etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly和/etc/cron.monthly 目录中的脚本,这些脚本被相应地每小时、每日、每周、或每月执行。这些目录中的文件应该是 shell 脚本。

如果某 cron 任务需要根据调度来执行,而不是每小时、每日、每周、或每月地执行,它可以被添加到 /etc/cron.d 目录中。该目录中的所有文件使用和 /etc/crontab 中一样的语法。
# record the memory usage of the system every monday
# at 3:30AM in the file /tmp/meminfo
30 3 * * mon cat /proc/meminfo >> /tmp/meminfo
# run custom script the first day of every month at 4:10AM
10 4 1 * * /root/scripts/backup.sh
根用户以外的用户可以使用 crontab 工具来配置 cron 任务。所有用户定义的 crontab 都被保存在/var/spool/cron 目录中,并使用创建它们的用户身份来执行。要以某用户身份创建一个 crontab 项目,登录为该用户,然后键入crontab -e 命令,使用由 VISUAL 或 EDITOR环境变量指定的编辑器来编辑该用户的 crontab。该文件使用的格式和/etc/crontab 相同。当对 crontab 所做的改变被保存后,该 crontab 文件就会根据该用户名被保存,并写入文件/var/spool/cron/username 中。

cron 守护进程每分钟都检查 /etc/crontab 文件、etc/cron.d/ 目录、以及/var/spool/cron 目录中的改变。如果发现了改变,它们就会被载入内存。这样,当某个 crontab 文件改变后就不必重新启动守护进程了。
 
 控制对 cron 的使用
 
/etc/cron.allow 和/etc/cron.deny 文件被用来限制对 cron 的使用。这两个使用控制文件的格式都是每行一个用户。两个文件都不允许空格。如果使用控制文件被修改了,cron 守护进程(crond)不必被重启。使用控制文件在每次用户添加或删除一项 cron 任务时都会被读取。

无论使用控制文件中的规定如何,根用户都总是可以使用 cron。

如果 cron.allow 文件存在,只有其中列出的用户才被允许使用 cron,并且cron.deny 文件会被忽略。

如果 cron.allow 文件不存在,所有在cron.deny 中列出的用户都被禁止使用 cron。
 
启动和停止服务
 
要启动 cron 服务,使用 /sbin/service crond start 命令。要停止该服务,使用/sbin/service crond stop 命令。推荐你在引导时启动该服务。

由于Cron 是Linux的内置服务,可以用以下的方法启动、关闭这个服务:
/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置

要实现秒级的计划任务,可以使用开源项目:Quartz
详细:http://www.quartz-scheduler.org/
 参考文章:
https://blog.csdn.net/wenqiang1208/article/details/74853519
https://blog.csdn.net/foxman209/article/details/6759920?utm_source=blogxgwz4
 

Nginx如何配置http强制转为https?

回复

zkbhj 回复了问题 • 1 人关注 • 1 个回复 • 294 次浏览 • 2018-08-30 19:44 • 来自相关话题

怎么查看Linux的系统位数?

回复

zkbhj 回复了问题 • 1 人关注 • 1 个回复 • 387 次浏览 • 2018-08-06 16:20 • 来自相关话题

如何在Nginx的access日志中记录POST、Header和Cookie中的参数信息?

回复

zkbhj 回复了问题 • 1 人关注 • 1 个回复 • 709 次浏览 • 2018-08-06 11:50 • 来自相关话题

linux运维命令之ps、netstat、nmap和pmap

zkbhj 发表了文章 • 0 个评论 • 421 次浏览 • 2018-05-17 18:30 • 来自相关话题

1.先看ps,linux下面可不是p图的哦!

ps -ef 查询正在运行的进程信息,一般在该操作之后用grep和AWK提取需要的信息。

如:ps -ef|grep ssh 查看ssh进程

ps -ef|awk '{print $2}' 打印所有进程信息对应的端口号(PID)

ps -aux        列出目前所有的正在内存当中的程序

ps -ajxf        列出类似程序树的程序显示

ps -l             将目前属于您自己这次登入的 PID 与相关信息列示出来

ps -A            列出进程信息

ps -u root    列出用户root下进程信息

当然,ps只是一次获取信息,用top命令就可以显示进程信息,并实时更新

2.再看netstat,这个命令用于显示各种网络相关信息,如网络连接、路由表、接口状态 (Interface Statistics)、masquerade 连接和多播成员 (Multicast Memberships) 等等。

netstat -a    列出所有端口 (包括监听和未监听的)

netstat -at   列出所有的TCP端口

netstat -au  列出所有的UDP端口

netstat -an  列出目前已经连接的和正在监听的端口号


netstat -ap  在上面命令的基础上列出连接的PID(进程号),用这个PID,可以使用KILL 来杀死连接

netstat -l     列出所有有监听的服务状态(还有另外一种说法,列出所有处于监听状态的 Sockets)

netstat -lx   列出所有监听 UNIX 端口

netstat -s   列出所有端口的统计信息

netstat -p   列出所有端口的端口号(PID)和进程名

netstat -ie  列出所有网络接口列表的详细信息,是ifconfig的替代命令

netstat -r    列出核心路由信息表

netstat -apn|grep PID/NAME  列出对应端口号和名称对应的信息

牛刀小试:

netstat -nat |awk '{print $6}'|sort|uniq -c     查看TCP所有状态




3.pmap命令用于报告进程的内存映射关系,是一个常用的Linux运维命令,在性能检测方面很有用。

pmap -x   显示拓展格式

pmap -d  显示设备格式

pmap -q  不显示头尾行




4.pmap命令几乎是黑客最喜欢的命令,现在来看下这个刺激而心跳的命令吧!

nmap -sP 192.168.0.*  寻找所有在线主机并打印其内网ip地址和MAC地址

nmap -sP 192.168.0.1/24  探测192.168.1.0网段有多少机器是开机的,并探测其MAC地址及MAC芯片信息


注意:上面两个命令等同

nmap -sP(Ping Scan)命令仅执行ping扫描(主机发现),然后打印出响应ping扫描的可用主机。不做进一步测试(如端口扫描或者OS探测)。

 并且 -sP选项能和任意发现探针类型(即-P*选项,-PN除外)组合使用。


nmap -sA  ip_addr        扫描指定ip地址对应的主机

nmap -Pn  ip_addr        扫描访问可能阻塞时,该命令比上一条更好用

nmap -PN (No ping)    跳过主机发现阶段 查看全部
1.先看ps,linux下面可不是p图的哦!

ps -ef 查询正在运行的进程信息,一般在该操作之后用grep和AWK提取需要的信息。

如:ps -ef|grep ssh 查看ssh进程

ps -ef|awk '{print $2}' 打印所有进程信息对应的端口号(PID)

ps -aux        列出目前所有的正在内存当中的程序

ps -ajxf        列出类似程序树的程序显示

ps -l             将目前属于您自己这次登入的 PID 与相关信息列示出来

ps -A            列出进程信息

ps -u root    列出用户root下进程信息

当然,ps只是一次获取信息,用top命令就可以显示进程信息,并实时更新

2.再看netstat,这个命令用于显示各种网络相关信息,如网络连接、路由表、接口状态 (Interface Statistics)、masquerade 连接和多播成员 (Multicast Memberships) 等等。

netstat -a    列出所有端口 (包括监听和未监听的)

netstat -at   列出所有的TCP端口

netstat -au  列出所有的UDP端口

netstat -an  列出目前已经连接的和正在监听的端口号


netstat -ap  在上面命令的基础上列出连接的PID(进程号),用这个PID,可以使用KILL 来杀死连接

netstat -l     列出所有有监听的服务状态(还有另外一种说法,列出所有处于监听状态的 Sockets)

netstat -lx   列出所有监听 UNIX 端口

netstat -s   列出所有端口的统计信息

netstat -p   列出所有端口的端口号(PID)和进程名

netstat -ie  列出所有网络接口列表的详细信息,是ifconfig的替代命令

netstat -r    列出核心路由信息表

netstat -apn|grep PID/NAME  列出对应端口号和名称对应的信息

牛刀小试:

netstat -nat |awk '{print $6}'|sort|uniq -c     查看TCP所有状态




3.pmap命令用于报告进程的内存映射关系,是一个常用的Linux运维命令,在性能检测方面很有用。

pmap -x   显示拓展格式

pmap -d  显示设备格式

pmap -q  不显示头尾行




4.pmap命令几乎是黑客最喜欢的命令,现在来看下这个刺激而心跳的命令吧!

nmap -sP 192.168.0.*  寻找所有在线主机并打印其内网ip地址和MAC地址

nmap -sP 192.168.0.1/24  探测192.168.1.0网段有多少机器是开机的,并探测其MAC地址及MAC芯片信息


注意:上面两个命令等同

nmap -sP(Ping Scan)命令仅执行ping扫描(主机发现),然后打印出响应ping扫描的可用主机。不做进一步测试(如端口扫描或者OS探测)。

 并且 -sP选项能和任意发现探针类型(即-P*选项,-PN除外)组合使用。


nmap -sA  ip_addr        扫描指定ip地址对应的主机

nmap -Pn  ip_addr        扫描访问可能阻塞时,该命令比上一条更好用

nmap -PN (No ping)    跳过主机发现阶段

Nginx代理转发时图片只加载一半的问题排查

zkbhj 发表了文章 • 0 个评论 • 481 次浏览 • 2018-04-19 22:08 • 来自相关话题

今天在测试公司活动项目的过程中,出现了一个特别奇怪的问题:
一张图片在直接访问原始url地址时,可以很快的被加载出来,但是访问被nginx做了转发的地址之后,就只能显示一部分图片,而且要等好久才能请求结束,并且图片依然无法正常展示出来!效果如下图所示。
 





一张二维码被展示成了这个效果
 
最后研究了半天,终于查到了出现问题的原因。
 
要说明这个问题,首先要知道和了解一个Nginx上的概念:buffer工作原理,详细可以阅读:https://ask.zkbhj.com/?/article/227 。
 
其中很重要的一段话:

在proxy_buffering 开启的情况下,Nginx将会尽可能的读取所有的upstream端传输的数据到buffer,直到proxy_buffers设置的所有buffer们被写满或者数据被读取完(EOF)。此时nginx开始向客户端传输数据,会同时传输这一整串buffer们。同时如果response的内容很大的话,Nginx会接收并把他们写入到temp_file里去。大小由proxy_max_temp_file_size控制。如果busy的buffer传输完了会从temp_file里面接着读数据,直到传输完毕。

嗯,图片文件一般都会比较大,proxy_buffers肯定一次性容纳不下,需要写入到temp_file中去。这个时候,去看nginx的错误日志,发现了如下几行错误信息:






哈哈,Permission denied!就是这个原因了,在写入这个目录时,权限不足,造成浏览器一直在等待。
 
找到了问题的根源,解决也就轻松了。有两种解决方法,一种是:关闭掉proxy_buffer,在nginx配置文件中加入:
proxy_buffering off;

另外一种,就是把目录权限更改为可写。
 
到此问题解决。记录一下以便遇到同样问题的同学可以查看如何解决这个“问题”! 查看全部
今天在测试公司活动项目的过程中,出现了一个特别奇怪的问题:
一张图片在直接访问原始url地址时,可以很快的被加载出来,但是访问被nginx做了转发的地址之后,就只能显示一部分图片,而且要等好久才能请求结束,并且图片依然无法正常展示出来!效果如下图所示。
 

QQ图片20180419215326.png

一张二维码被展示成了这个效果
 
最后研究了半天,终于查到了出现问题的原因。
 
要说明这个问题,首先要知道和了解一个Nginx上的概念:buffer工作原理,详细可以阅读:https://ask.zkbhj.com/?/article/227 。
 
其中很重要的一段话:


在proxy_buffering 开启的情况下,Nginx将会尽可能的读取所有的upstream端传输的数据到buffer,直到proxy_buffers设置的所有buffer们被写满或者数据被读取完(EOF)。此时nginx开始向客户端传输数据,会同时传输这一整串buffer们。同时如果response的内容很大的话,Nginx会接收并把他们写入到temp_file里去。大小由proxy_max_temp_file_size控制。如果busy的buffer传输完了会从temp_file里面接着读数据,直到传输完毕。


嗯,图片文件一般都会比较大,proxy_buffers肯定一次性容纳不下,需要写入到temp_file中去。这个时候,去看nginx的错误日志,发现了如下几行错误信息:

QQ截图20180419220630.jpg


哈哈,Permission denied!就是这个原因了,在写入这个目录时,权限不足,造成浏览器一直在等待。
 
找到了问题的根源,解决也就轻松了。有两种解决方法,一种是:关闭掉proxy_buffer,在nginx配置文件中加入:
proxy_buffering off;

另外一种,就是把目录权限更改为可写。
 
到此问题解决。记录一下以便遇到同样问题的同学可以查看如何解决这个“问题”!

Nginx Proxy buffer 工作原理

zkbhj 发表了文章 • 0 个评论 • 660 次浏览 • 2018-04-19 21:57 • 来自相关话题

proxy_buffer_size

语法: proxy_buffer_size the_size

默认值: proxy_buffer_size 4k/8k

上下文: http, server, location

该指令设置缓冲区大小,从代理后端服务器取得的第一部分的响应内容,会放到这里.

小的响应header通常位于这部分响应内容里边.

默认来说,该缓冲区大小等于指令 proxy_buffers所设置的;但是,你可以把它设置得更小.

proxy_buffering

语法: proxy_buffering on|off

默认值: proxy_buffering on

上下文: http, server, location

该指令开启从后端被代理服务器的响应内容缓冲.

如果缓冲区开启,nginx假定被代理的后端服务器会以最快速度响应,并把内容保存在由指令proxy_buffer_size 和 proxy_buffers指定的缓冲区里边.

如果响应内容无法放在内存里边,那么部分内容会被写到磁盘上。

如果缓冲区被关闭了,那么响应内容会按照获取内容的多少立刻同步传送到客户端。

nginx不尝试计算被代理服务器整个响应内容的大小,nginx能从服务器接受的最大数据,是由指令proxy_buffer_size指定的.

对于基于长轮询(long-polling)的Comet 应用来说,关闭 proxy_buffering 是重要的,不然异步响应将被缓存导致Comet无法工作

proxy_buffers

语法: proxy_buffers the_number is_size;

默认值: proxy_buffers 8 4k/8k;

上下文: http, server, location

该指令设置缓冲区的大小和数量,从被代理的后端服务器取得的响应内容,会放置到这里. 默认情况下,一个缓冲区的大小等于内存页面大小,可能是4K也可能是8K,这取决于平台。

proxy_busy_buffers_size

语法: proxy_busy_buffers_size size;

默认值: proxy_busy_buffers_size proxy_buffer_size * 2;

上下文: http, server, location, if



buffer工作原理

首先第一个概念是所有的这些proxy buffer参数是作用到每一个请求的。每一个请求会安按照参数的配置获得自己的buffer。proxy buffer不是global而是per request的。

proxy_buffering 是为了开启response buffering of the proxied server,开启后proxy_buffers和proxy_busy_buffers_size参数才会起作用。

无论proxy_buffering是否开启,proxy_buffer_size(main buffer)都是工作的,proxy_buffer_size所设置的buffer_size的作用是用来存储upstream端response的header。

在proxy_buffering 开启的情况下,Nginx将会尽可能的读取所有的upstream端传输的数据到buffer,直到proxy_buffers设置的所有buffer们被写满或者数据被读取完(EOF)。此时nginx开始向客户端传输数据,会同时传输这一整串buffer们。同时如果response的内容很大的话,Nginx会接收并把他们写入到temp_file里去。大小由proxy_max_temp_file_size控制。如果busy的buffer传输完了会从temp_file里面接着读数据,直到传输完毕。

一旦proxy_buffers设置的buffer被写入,直到buffer里面的数据被完整的传输完(传输到客户端),这个buffer将会一直处在busy状态,我们不能对这个buffer进行任何别的操作。所有处在busy状态的buffer size加起来不能超过proxy_busy_buffers_size,所以proxy_busy_buffers_size是用来控制同时传输到客户端的buffer数量的。 查看全部
proxy_buffer_size

语法: proxy_buffer_size the_size

默认值: proxy_buffer_size 4k/8k

上下文: http, server, location

该指令设置缓冲区大小,从代理后端服务器取得的第一部分的响应内容,会放到这里.

小的响应header通常位于这部分响应内容里边.

默认来说,该缓冲区大小等于指令 proxy_buffers所设置的;但是,你可以把它设置得更小.

proxy_buffering

语法: proxy_buffering on|off

默认值: proxy_buffering on

上下文: http, server, location

该指令开启从后端被代理服务器的响应内容缓冲.

如果缓冲区开启,nginx假定被代理的后端服务器会以最快速度响应,并把内容保存在由指令proxy_buffer_size 和 proxy_buffers指定的缓冲区里边.

如果响应内容无法放在内存里边,那么部分内容会被写到磁盘上。

如果缓冲区被关闭了,那么响应内容会按照获取内容的多少立刻同步传送到客户端。

nginx不尝试计算被代理服务器整个响应内容的大小,nginx能从服务器接受的最大数据,是由指令proxy_buffer_size指定的.

对于基于长轮询(long-polling)的Comet 应用来说,关闭 proxy_buffering 是重要的,不然异步响应将被缓存导致Comet无法工作

proxy_buffers

语法: proxy_buffers the_number is_size;

默认值: proxy_buffers 8 4k/8k;

上下文: http, server, location

该指令设置缓冲区的大小和数量,从被代理的后端服务器取得的响应内容,会放置到这里. 默认情况下,一个缓冲区的大小等于内存页面大小,可能是4K也可能是8K,这取决于平台。

proxy_busy_buffers_size

语法: proxy_busy_buffers_size size;

默认值: proxy_busy_buffers_size proxy_buffer_size * 2;

上下文: http, server, location, if



buffer工作原理

首先第一个概念是所有的这些proxy buffer参数是作用到每一个请求的。每一个请求会安按照参数的配置获得自己的buffer。proxy buffer不是global而是per request的。

proxy_buffering 是为了开启response buffering of the proxied server,开启后proxy_buffers和proxy_busy_buffers_size参数才会起作用。

无论proxy_buffering是否开启,proxy_buffer_size(main buffer)都是工作的,proxy_buffer_size所设置的buffer_size的作用是用来存储upstream端response的header。

在proxy_buffering 开启的情况下,Nginx将会尽可能的读取所有的upstream端传输的数据到buffer,直到proxy_buffers设置的所有buffer们被写满或者数据被读取完(EOF)。此时nginx开始向客户端传输数据,会同时传输这一整串buffer们。同时如果response的内容很大的话,Nginx会接收并把他们写入到temp_file里去。大小由proxy_max_temp_file_size控制。如果busy的buffer传输完了会从temp_file里面接着读数据,直到传输完毕。

一旦proxy_buffers设置的buffer被写入,直到buffer里面的数据被完整的传输完(传输到客户端),这个buffer将会一直处在busy状态,我们不能对这个buffer进行任何别的操作。所有处在busy状态的buffer size加起来不能超过proxy_busy_buffers_size,所以proxy_busy_buffers_size是用来控制同时传输到客户端的buffer数量的。