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.csdn.net/u011630575/article/details/52151995.
鏈接: 命令末尾的 & https://www.cnblogs.com/gaoBlog/p/10289179.html.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章