Linux/Linux 下使用 sed 批量替换文本内容

Linux/Linux 下使用 sed 批量替换文本内容

sed 命令的全名是 stream editor,是 Linux 上非常强大的流编辑器,适用于对文本的行内容进行处理。 下面是一个例子:


Test.java文件中有 3 行代码,如上图所示,想要把每行开头的Str替换为String,使用sed 's/^Str/String/' Test.java

阅读更多
Linux/使用 awk 对日志内容做统计

Linux/使用 awk 对日志内容做统计

awk 是一个行编辑器,说明如下: - 一次读取一行文本,按照输入分隔符进行切片,,默认分隔符为空格,切成多个组成部分(多个切片) - 将切片直接保存在内建的变量中,$1、$2...($0 表示一整行) - 支持对单个切片的判断,支持循环判断
下面是使用 netstat -ntlp 查看网络状态
阅读更多
Linux/Linux 下如何检索文件内容

Linux/Linux 下如何检索文件内容

管道操作符:|

可以将指令连接起来,前一个指令的输出作为后一个指令的输入 find ~ | grep "test" 的作用是在当前目录以及子目录中查找文件名包含 test 的文件以及文件夹,与 find ~ -name "test" 作用相同。

阅读更多
Linux/Linux 下 使用 find 命令 查找文件以及文件夹

Linux/Linux 下 使用 find 命令 查找文件以及文件夹

find 后面第一个参数是要查找的目录,find 命令会在指定的目录以及子目录下面去查询文件 -name 后面接文件名,表示按照名字来查找文件和文件夹。 例如我在 ~/test/ 目录下面有一个文件 test3.java,那就可以在 ~ 目录下面 执行如下查找语句,查找出所有名字为 test3.java 的文件
阅读更多
Linux/虚拟机 Centos 配置 IP 地址
Linux/Linux 后台运行脚本

Linux/Linux 后台运行脚本

我们经常需要在 Linux 服务器上执行一些耗时比较长的操作,比如深度学习的模型训练。但是我们平时在 Linux 上运行的程序可能需要和用户进行交互,例如允许让用户输入,然后输出结果也打印到交互命令行上。这种方式比较适合运行一些简单的命令。但这种模式的缺点是,一旦当前的交互命令行退出,程序就停止运行了。这就要求我们在与服务器断开连接之后,依然能够在 Linux 后台运行脚本。这里先给出一个比较完美的写法。

假设你的脚本是 train.py,你想保存的输出文件为 train.log,那么使用如下语句:

1
nohup python -u train.py > train.log 2>&1 &

nohup命令的意思是 no hang up(不挂起),也就是说,当前交互命令行退出的时候,程序还会执行。

python -u 中的 -u参数是使得python不启用缓冲。默认情况下代码中的输出语句的内容不会立刻被写入 train.log,而是先会存储在缓冲区中,等到一定时机再写入train.log。使用-u参数会关闭缓冲,输出立刻被写入文件。

> train.log 表示把标准输出 (STDOUT) 重定向到train.log中。这样,在代码中使用print打印的字符都会保存在train.log中。

2>&1 中,1表示文件描述符 1,表示标准输出,2表示文件描述符 2,意思是标准错误输出,2>&1表示标准输出和错误输出合并了,将错误输出重定向到标准输出。因为标准错误输出 (STDERR) 没有缓冲区,而标准输出有。这就会导致STDOUT > train.logSTDERR > train.log 分别执行,train.log文件被两次打开写入,而标准输出和错误输出将会竞争覆盖,会出现不可控的问题。

最后的&是指后台运行。但当用户退出的时候,也就是挂起了。脚本也会停止执行。所以使用 nohub就是在当前交互命令行退出的时候,程序还会执行。

参考

linux 下后台运行python脚本