linux后台执行命令:&和nohup的用法,确实很实用

linux后台执行命令:&和nohup的用法,确实很实用,第1张

当我们在终端或控制台工作时,可能不希望由于运行一个作业而占住了屏幕,因为可能还有更重要的事情要做,比如阅读电子邮件。对于密集访问磁盘的进程,我们更希望它能够在每天的非负荷高峰时间段运行(例如凌晨)。为了使这些进程能够在后台运行,也就是说不在终端屏幕上运行,有几种选择方法可供使用。

&:当在前台运行某个作业时,终端被该作业占据;可以在命令后面加上&实现后台运行。例如:sh test.sh &

适合在后台运行的命令有f i n d、费时的排序及一些s h e l l脚本。在后台运行作业时要当心:需要用户交互的命令不要放在后台执行,因为这样你的机器就会在那里傻等。不过,作业在后台运行一样会将结果输出到屏幕上,干扰你的工作。如果放在后台运行的作业会产生大量的输出,最好使用下面的方法把它的输出重定向到某个文件中:

这样,所有的标准输出和错误输出都将被重定向到一个叫做out.file 的文件中。

PS:当你成功地提交进程以后,就会显示出一个进程号,可以用它来监控该进程,或杀死它。(ps -ef | grep 进程号 或者 kill -9 进程号)

nohup:使用&命令后,作业被提交到后台运行,当前控制台没有被占用,但是一但把当前控制台关掉(退出帐户时),作业就会停止运行。nohup命令可以在你退出帐户之后继续运行相应的进程。nohup就是不挂起的意思( no hang up)。该命令的一般形式为:

如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:

使用了nohup之后,很多人就这样不管了,其实这样有可能在当前账户非正常退出或者结束的时候,命令还是自己结束了。所以在使用nohup命令后台运行命令之后,需要使用exit正常退出当前账户,这样才能保证命令一直在后台运行。

ctrl + z :可以将一个正在前台执行的命令放到后台,并且处于暂停状态。

Ctrl+c :终止前台命令。

jobs: 查看当前有多少在后台运行的命令。 jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated。但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识。

2>&1解析:

扩展链接:如何写高效的代码,和代码优化方法

NetCat,在网络工具中有“瑞士军刀”美誉,其有Windows和Linux的版本。因为它短小精悍,功能实用,被设计为一个简单、可靠的网络工具,可通过TCP或UDP协议传输读写数据。同时,它还是一个网络应用Debug分析器,因为它可以根据需要创建各种不同类型的网络连接。

先来看下它的基本用法:

root@10.1.1.43:~# nc -h

[v1.10-38]

connect to somewhere: nc [-options] hostname port[s] [ports] ...

listen for inbound: nc -l -p port [-options] [hostname] [port]

options:

-c shell commands as `-e'use /bin/sh to exec [dangerous!!]

-e filename program to exec after connect [dangerous!!]

-b allow broadcasts

-g gateway source-routing hop point[s], up to 8 设置路由器跃程通信网关,最高可设置8个。

-G num source-routing pointer: 4, 8, 12, ... 设置来源路由指向器,其数值为4的倍数。

-h this cruft

-i secs delay interval for lines sent, ports sca 延时的间隔

-k set keepalive option on socket

-l listen mode, for inbound connects 监听模式,入站连接

-n numeric-only IP addresses, no DNS 直接使用ip地址,而不用域名服务器

-o file hex dump of traffic 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存。

-p port local port number 本地端口

-r randomize local and remote ports 随机本地和远程端口

-q secs quit after EOF on stdin and delay of secs

-s addr local source address

-T tos set Type Of Service

-t answer TELNET negotiation

-u UDP mode udp 模式

-v verbose [use twice to be more verbose]显示过程,vv 更多

-w secs timeout for connects and final net reads 等待连接超时

-z zero-I/O mode [used for scanning] 使用输入/输出模式,只在扫描通信端口时使用。

1.监听本地端口

root@10.1.1.43:~# nc -l -p 1234

root@10.1.1.43:~# netstat -tunlp | grep 1234

tcp0 0 0.0.0.0:12340.0.0.0:* LISTEN 15543/nc

2.端口扫描

root@10.1.1.43:~# nc -v -w 10 10.1.1.180 80

(UNKNOWN) [10.1.1.180] 80 (www) open

root@10.1.1.43:~# nc -v -w 10 10.1.1.180 -z 80-30000

(UNKNOWN) [10.1.1.180] 22000 (?) open

(UNKNOWN) [10.1.1.180] 80 (www) open

3.文件传出

源10.1.1.43 text.txt

目的 10.1.1.180

root@10:~# nc -l -p 1234 >test.txt #开10.1.1.180:1234端口监听,并将socket传输过来的数据重定向到test.txt文件 test 43 nc

root@10.1.1.43:~#cat test.txt

root@10.1.1.43:~# nc 10.1.1.180 1234 <test.txt#连接远程的10.1.1.180,从test.txt的路径从定向到socket,从而将文件传输到远方。

root@10:~# cat test.txt

test 43 nc

4.目录传输

源10.1.1.43 python_program

目的 10.1.1.180

root@10:~# nc -l -p 1234 | tar xzvf -

root@10.1.1.43:~# tar czvf - python_program | nc 10.1.1.180 1234

python_program/

python_program/1.py

python_program/4.py

python_program/3.py

5.测试UDP端口

root@172.16.211.34:web# netstat -tunlp

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

tcp0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1111/sshd

udp0 0 0.0.0.0:68 0.0.0.0:* 887/dhclient

root@172.16.211.35:~# nc -vuz 172.16.211.34 68

Connection to 172.16.211.34 68 port [udp/bootpc] succeeded!

参考:

NetCat 官方地址:http://netcat.sourceforge.net/

有两种方式:一种方式是根据运行级别配置服务,一种方式是执行本地特殊配置。

举例,任务是启动时运行命令cvslockd:

方式一:

1、 建立自启动脚本/etc/rc.d/init.d/cvslockd,内容为:

#!/bin/bash

/usr/local/bin/cvslockd

设置文件的属性为可执行:

#chmod +x /etc/rc.d/init.d/cvslockd

2、查看计算机运行级别,在文件/etc/inittab里看到id:5:initdefault:,则此系统运行级别为5;

3. 到/etc/rc5.d目录下,把你要执行的可执行文件做一个软连接,而且在命名的时候要以大写S字母开头,S之后的数字大小代表执行顺序的先后,数字越大越后执行。

#ln -s /etc/rc.d/init.d/cvslockd /etc/rc5.d/S100cvslockd

#ln -s /etc/rc.d/init.d/cvslockd /etc/rc0.d/K20cvslockd

方式二:

在/etc/rc.d/rc.local 添加 exec /usr/local/bin/cvslockd

该方式是在最后启动cvslockd。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8464049.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-16
下一篇2023-04-16

发表评论

登录后才能评论

评论列表(0条)

    保存