shell 命令

shell 命令

1. mkdir

mkdir -p 与 mkdir 的区别

  1. mkdir 如果存在上级目录不存在的情况,会无法创建下级目录,出现error的情况:
    例如:mkdir temp/fengjiakai,没有上级目录temp,会出现如下错误
    mkdir: cannot create directory 'temp/fengjiakai': No such file or directory

  2. mkdir -p 递归创建目录,即使上级目录不存在,也可以创建下级目录

2. touch命令

Linux touch命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。(这里只了解最简单的作用)

touch file    #创建名为“file”的新的空白文件

3. &&、 命令之间的&、shell 重定向 2>&1 、1>&2、命令行末尾的 &

针对下面的 shell 脚本进行讲解

chmod +x ./bin/$processor_bin && ./bin/$processor_bin >> ${log_file} 2>&1 &

3.1 首先是脚本中的符号“&&”

command1&command2&command3   #三个命令同时执行
command1;command2;command3   #不管前面命令执行成功没有,后面的命令继续执行 
command1&&command2           #只有前面命令执行成功,后面命令才继续执行

所以上述命令 需要执行完 chmod +x ./bin/$processor_bin ,并且成功之后,再执行
./bin/$processor_bin >> ${log_file} 2>&1 &

3.2 shell 重定向

大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端。一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端。同样,一个命令通常将其输出写入到标准输出,默认情况下,这也是你的终端。

3.2.1 重定向符号

命令说明
command>file将输出定向到file(注意,使用 > 时,如果重复输出到一个文件中,会覆盖之前的内容)
command<file将输入重定向到file
command>>file将输出以追加的方式定向到file中

例子:

$ echo "example" > a.txt
$ cat a.txt
example

利用 “>” 再向 a.txt 定向

$ echo "example second" > a.txt
$ cat a.txt
example second
## 你会发现,之前写入的 example 被覆盖了

如果不想之前的内容被覆盖,请使用“<<”

$ echo "example third" > a.txt
$ cat a.txt
example second
example third

3.2.2 标准输出与标准错误重定向( 2>&1 、1>&2)

在shell脚本中,默认情况下,总是有三个文件处于打开状态,标准输入(键盘输入)、标准输出(输出到屏幕)、标准错误(也是输出到屏幕),它们分别对应的文件描述符是0,1,2 。

### 如果当前目录向只有 a.txt ###
$ ls
a.txt
$ ls a.txt b.txt
ls: b.txt: No such file or directory 
a.txt 

利用重定向后

$ ls a.txt b.txt 1>file.out 2>file.err   #执行后,没有任何返回值. 原因是, 返回值都重定向到相应的文件中了,而不再前端显示
$ cat file.out
a.txt
$ cat file.err
ls: b.txt: No such file or directory

注意:一般来说, "1>" 通常可以省略成 ">".
即可以把如上命令写成: ls a.txt b.txt >file.out 2>file.err

2>&1 错误返回值传递给1输出通道, 同样&1表示1输出通道.

$ ls a.txt b.txt 1>file.out 2>&1 
$ cat file.out
ls: b.txt: No such file or directory
a.txt

#将可执行程序的标准输出定向输入到 log_file 文件中,并且标准错误也输出的 log_file 中。
./bin/$processor_bin >> ${log_file} 2>&1

3.3 命令末尾的 &

command>file 2>&1 &

命令的最后一个&表示把该命令以后台的job的形式运行

我自己在工作需要远程连到公司的开发机,在开发机上运行程序时,一旦退出终端就会导致运行的程序被终止,该如何解决呢?
答案就是让程序在后台运行,不受当前终端进程的影响。
以下的方法来自两个思路:
1.使进程不接受HUP信号,如nohup
2.改变进程的父进程,而不再是当前终端的进程,如&和setsid。

参考链接
链接: 重定向 https://blog.youkuaiyun.com/u011630575/article/details/52151995.
链接: 命令末尾的 & https://www.cnblogs.com/gaoBlog/p/10289179.html.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值