Ⅰ linux的stty命令詳解
linux下的stty命令主要功能是改變和列印終端設置的常用命令,下面由我為大家搜集整理了linux的stty命令詳解的相關知識,希望對大家有幫助!
linux的stty命令詳解
stty是Linux下改變和列印終端設置的常用命令。
語法
stty(選項)(參數)
參數
1.列印終端行設置
-a,--all 以人可讀的方式列印所有當前設置;-a參數比單獨的stty命令輸出的終端信息更詳細
-g,--save 以stty可讀的方式列印當前所有設置
-F,--file=DEVICE 打開並使用特定的設備((DEVICE)以代替標准輸入(stdin)
--help 顯示幫助並退出
--version 顯示版本並退出
linux的stty命令用法
1. stty size 列印終端行數和列數
2,在命令行下禁止輸出小寫
stty olcuc #開啟
stty -olcuc#恢復
3,列印出終端的行數和列數
stty size
4,改變ctrl+D的方法:
stty eof "string"
系統默認是ctrl+D來表示文件的結束,而通過這種方法,可以改變!
5,屏蔽顯示
stty -echo #禁止回顯
stty echo #打開回顯
測試方法:
stty -echo;read;stty echo;read
6,忽略回車符
stty igncr #開啟
stty -igncr#恢復
7 .利用它設置我們的串口列印操作信息。
stty -F /dev/ttyS0 speed 115200 cs8 -parenb -cstopb -echo
解釋:通過stty設置/dev/ttyS0串口, 波特率為115200 ,數據位cs8,奇偶校驗位-parenb,停止位-cstopb,同時-echo禁止終端回顯
Ⅱ 在linux上單獨執行屏幕有輸出,重定向後沒有任何輸出了。 myprog > 1.log 或 myprog | tee 1.log
單獨的重定向操作會隱藏原來的輸出,可以配合 tee 命令來使用,具體用法請網路,簡版單用例如下
輸出到權 1.log
myprog|tee1.log
追加到 1.log
myprog|tee-a1.log
Ⅲ Linux下的並行神器——parallel
GNU Parallel的輸入源支持文件、命令行和標准輸入(stdin或pipe)。
當然,若不想像上面那樣進行組合,可使用 --xapply 參數從每一個源獲取一個參數(或文件一行),這個參數有些類似R中的函數,具有廣播作用——如果其中一個輸入源的長度比較短,它的值會被重復。
GNU Parallel可以通過 --arg-sep 和 --arg-file-sep 指定分隔符替代 ::: 或 ::::,當這兩個符號被其它命令佔用的時候會特別有用。
GNU Parallel默認把一行做為一個參數:使用 \n 做為參數定界符。可以使用 -d 改變:
GNU Parallel支持通過 -E 參數指定一個值做為結束標志:
GNU Parallel使用 --no-run-if-empty 來跳過空行:
如果parallel之後沒有給定命令,那麼這些參數會被當做命令:
此外,命令還可以是一個腳本文件,一個二進制可執行文件或一個bash的函數(須用 export -f 導出函數)
GNU Parallel支持多種替換字元串,默認使用 {},使用 -I 改變替換字元串符號 {}。其最常見的字元串替換包括以下幾種: {.} ,去掉擴展名; {/} ,去掉路徑,只保留文件名; {//} ,只保留路徑; {/.} ,同時去掉路徑和擴展名; {#} ,輸出任務編號。同時對於每一個字元串替換都可以自己指定符號: -I 對應 {} ; --extensionreplace 替換 {.} ; --basenamereplace 替換 {/} ; --dirnamereplace 替換 {//} ; --basenameextensionreplace 替換 {/.} ; --seqreplace 替換 {#} 。
同時,如果有多個輸入源時,可以通過 {編號} 指定某一個輸入源的參數:
使用 --header 把每一行輸入中的第一個值做為參數名。
使用 --colsep 把文件中的行切分為列,做為輸入參數。
--xargs 會在一行中輸入盡可能多的參數(與參數字元串長度有關),通過 -s 可指定一行中參數的上限。
為了獲得更好的並發性,GNU Parallel會在文件讀取結束後再分發參數。
GNU Parallel 在讀取完最後一個參數之後,才開始第二個任務,此時會把所有的參數平均分配到4個任務(如果指定了4個任務)。
第一個任務與上面使用 --xargs 的例子一樣,但是第二個任務會被平均的分成4個任務,最終一共5個任務。(奇怪的是我的結果與官網教程的結果不一樣)
替換字元串可以是輸出字元的一部分,使用 -m 參數表示每個job不重復輸出「背景」(context), -X 則與 -m 相反,會重復輸出「背景文本」,具體通過下面幾個例子進行理解:
使用 -N 限制每行參數的個數,其中 -N0 表示一次只讀取一個參數,且不輸入這個參數(作為計數器來使用)。
如果命令行中包含特殊字元,就需要使用引號保護起來。
perl腳本 'print "@ARGV\n"' 與linux的 echo 的功能一樣。
使用GNU Parallel運行這條命令的時候,perl命令需要用引號包起來,也可以使用 -q 保護perl命令:
使用 --trim 去除參數兩頭的空格:
使用 --tag 以參數做為輸出前綴,使用 --tagstring 修改輸出前綴:
--dryrun 作用類似於echo:
--verbose 則在運行之前先列印命令:
一般來說,GNU Parallel 會延遲輸出,直到一組命令執行完成。使用 --ungroup ,可立刻列印輸出已完成部分。
使用 --ungroup 會很快,但會導致輸出錯亂,一個任務的行輸出可能會被另一個任務的輸出截斷。像上例所示,第二行輸出混合了兩個任務: '4-middle' '2-start'。使用 --linebuffer 避免這個問題(稍慢一點):
強制使輸出與參數保持順序 --keep-order/-k :
GNU Parallel可以把每一個任務的輸出保存到文件中,臨時文件默認保存在 /tmp 中,可以使用 --tmpdir改變(或者修改 $TMPDIR):
輸出文件可以有結構的保存 --results ,輸出文件不僅包含標准輸出(stdout)也會包含標准錯誤輸出(stderr):
在使用多個變數的時候會顯示很有用:
使用 --jobs/-j 指定並行任務數。
通過使用 --interactive 在一個任務執行之前讓用戶決定是否執行。
當job有大量的IO操作時,為避免 「驚群效應」 ,可使用 --delay 參數指定各個job開始的時間間隔。
若已知任務超過一定時間未反應則為失敗則可以通過 --timeout 指定等待時間避免無謂的等待。GNU parallel能計算所有任務運行時間的中位數,因此可以指定時間為中位數的倍數關系。
GNU parallel有多種方式可用來動態的顯示任務進度信息,如:
使用 --joblog 參數能夠生成各個任務的日誌文件:
通過 --resume-failed 參數可以重新運行失敗的任務; --retry-failed 的作用與 --resume-failed 類似,只是 --resume-failed 從命令行讀取失敗任務,而 --retry-failed 則是從日誌文件中讀取失敗任務:
GNU parallel支持在某一情況下(如第一個失敗或成功時,或者20%任務失敗時)終止任務,終止任務又有兩種類型,其一為立即終止(通過 --halt now 指定),殺死所有正在運行的任務並停止生成新的任務,其二為稍後終止(通過 --halt soon 指定),停止生成新任務並等待正在運行任務完成。
GNU parallel還支持在任務失敗後重試運行 --retries :
關於終止信號的高級用法參考 官方入門文檔 。
GNU parallel能夠在開始一個新的任務前檢查系統的負載情況防止過載(通過 --load 可指定負載),同時還能檢查系統是否使用了交換空間(swap)(通過 --noswap 限制使用swap)。
同時,對於某些佔用內存較多的程序,parallel會檢查內存只有內存滿足時才啟動任務(通過 --memfree 指定需要內存大小),而且在啟動任務後內存不夠50%時會殺掉最新開始的任務,直到這個任務完成再重新開始那些殺死的任務。
還可以通過 --nice 來指定任務的優先順序。
可使用 -S host 來進行遠程登陸:
parallel -S username@$SERVER1 echo running on ::: username@$SERVER1
GNU parallel 文件傳輸使用的是rsync。
更多遠程操作參見入門文檔。
--pipe 參數使得我們可以將輸入(stdin)分為多塊(block),然後分配給多個任務多個cpu以達到負載均衡,最後的結果順序與原始順序一致。使用 --block 參數可以指定每塊的大小,默認為1M。
如果不關心結果順序,只想要快速的得到結果,可使用 --round-robin 參數。沒有這個參數時每塊文件都會啟動一個命令,使用這個參數後會將這些文件塊分配給job數任務(通過 --jobs 進行指定)。若想分配更為均勻還可同時指定 --block 參數。
參考:
官方文檔
GNU Parallel指南
Ⅳ 文件管理與重定向
Linux的 文件系統分層結構標准 :FHS Filesystem Hierarchy Standard
參考文檔: http://www.pathname.com/fhs/ 其中對每個文件目錄有詳細說明
/ :根目錄,最頂級目錄,也是 管理員的家目錄
/boot:引導文件、內核文件(vmlinuz)、引導載入器(bootloader, grub)都存放於此
/bin: 所有用戶 使用的基本命令(二進制文件)
/sbin:管理類的基本命令 (僅由root執行)
/bin與/sbin:不能關聯至獨立分區,OS啟動即會用到的程序
/etc 配置文件目錄
/home/USERNAME:各個用戶家目錄,存放用戶數據
/proc: 用於輸出內核與進程信息相關的虛擬文件系蔽亮統
/sys:用於輸出當前系統上硬體設備相關信息虛擬文件系統
/usr: universal shared, read-only data (通用只讀文件)
lib:32位使用
lib64:只存在64位系統
include: C程序的頭文件(header files)
share:結構化獨立的數據,例如doc, man等
local:第三方應用程序的安裝位置
bin, sbin, lib, lib64, etc, share
/var: variable data files (可變數據)
cache: 應用程序緩存數據目錄
lib: 應用程序狀態信息數據
local:專用於為/usr/local下的應用程序存儲可變數據
lock: 鎖文件
log: 日誌目錄及文件
opt: 專用於為/opt下的應用程序存儲可變數據
run: 運行中的進程相關數據,通常用於存儲進程pid文件
spool: 應用程序數據池
tmp: 保存系統兩次重啟之間產生的臨時數據
/dev:設備文件及特殊文件存儲位置
/tmp:臨時文件存儲位置
/srv:系統上運行的服務用到的數據
/media:攜帶型移動設備掛載點(優盤)
/mnt:臨時文件系統掛載點
/opt:第三方應用程序的安裝位置
注意:CentOS 7 以後版本目錄結構變化 (以下兩者相同)
/bin 和 /usr/bin
/sbin 和 /usr/sbin
/lib 和/usr/lib
/lib64 和 /usr/lib64
範例:
二進早並困製程陸念序:/bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin
庫文件: /lib, /lib64, /usr/lib, /usr/lib64, /usr/local/lib, /usr/local/lib64
配置文件: /etc, /etc/DIRECTORY, /usr/local/etc
幫助文件: /usr/share/man, /usr/share/doc, /usr/local/share/man, /usr/local/share/doc
用 ll 命令查看首字母:
(-) 普通文件
d 目錄文件
b 塊設備
c 字元設備
l 符號鏈接文件
p 管道文件pipe
s 套接字文件socket
每個shell和系統進程 都有一個當前的工作目錄(current work directory,簡稱CWD)
顯示當前shell CWD的絕對路徑: 使用pwd命令 (printing working directory)
範例:
[圖片上傳失敗...(image-8b8689-1596285623724)]
基名 :basename,只取文件名而不要路徑
目錄名 :dirname,只取路徑,不要文件名
範例:
命令 cd : change directory 改變目錄(可以使用絕對或相對路徑)
選項:-P 切換至物理路徑
切換至父目錄 : cd ..
切換至當前用戶家目錄: cd
切換至上一個工作目錄 : cd -
相關的環境變數:
PWD:當前目錄路徑
OLDPWD:上一次目錄路徑
文件相關信息:metadata(屬性,元數據), data(數據內容)
每個文件有三個時間戳: (touch創建已存在的文件時,刷新3個時間戳)
access time 訪問時間,atime,讀取文件內容
modify time 修改時間,mtime,改變文件內容(數據)
change time 改變時間,ctime,元數據發生改變(屬性)
mtime的改變必然引起ctime的改變
執行ll命令默認顯示mtime
範例:
用來匹配符合條件的多個文件,方便批理管理文件
通配符采有特定的符號,表示特定的含義,此特符號稱為 元字元
範例:只顯示文件夾
別外還有在Linux系統中預定義的字元類:命令man 7 glob可以查看
使用以上通配符,需要雙重中括弧!!!!!!!!!!!!!!
{a..e} 與 [a - e] 排序內容不相同!!!
範例:
範例: 創建一個以昨天日期命名的.log文件
cp 命令格式:
默認cp=cp -i,提示是否覆蓋
範例:
1、將/etc/目錄下所有文件,備份到/data獨立的子目錄下,並要求子目錄格式為 backupYYYY-mm-dd,備份過程可見
2、創建/data/rootdir目錄,並復制/root下所有文件到該目錄內,要求 保留原有許可權
mv 命令可以實現文件或目錄的 移動和改名 :
常用選項:
-i 互動式
-f 強制
-b 若目標存在,覆蓋前先備份
利用 rename 可以 批量修改文件名 :
範例: (改名對象打不打引號都可以)
使用rm 命令可以刪除文件
常用選項 :
-i 互動式
-f 強制刪除
-r 遞歸,對目錄進行操作時必須使用
--no-preserve-root 用來刪除根目錄
範例:刪除特殊文件
rm雖然刪除了文件,但是被刪除的文件仍然 可能被恢復 ,
在安全要求較高的場景下,可以使用shred安全刪除文件
補充技巧: 防止rm造成嚴重後果,定義別名進行備份 (修改配置文件永久有效)
配置文件目錄:/root/.bashrc
顯示目錄樹 tree
常見選項:
-d: 只顯示目錄
-L level: 指定顯示的層級數目
-P pattern: 只顯示由指定wild-card pattern匹配到的路徑
常見選項:
-p: 存在於不報錯,且可自動創建所需的各目錄 (用於一次創建多層目錄)
-v: 顯示詳細信息
-m MODE: 創建目錄時直接 指定許可權!!!!!!!!!!
rmdir 只能刪除空目錄 ,如果想刪除非空目錄,可以使用rm -r 命令遞歸刪除目錄樹
常見選項:
-p 遞歸刪除父空目錄
-v 顯示詳細信息
練習
(1) 如何創建/testdir/dir1/x, /testdir/dir1/y, /testdir/dir1/x/a, /testdir/dir1/x/b, /testdir/dir1/y/a,
/testdir/dir1/y/b
(2) 如何創建/testdir/dir2/x, /testdir/dir2/y, /testdir/dir2/x/a, /testdir/dir2/x/b
(3) 如何創建/testdir/dir3, /testdir/dir4, /testdir/dir5, /testdir/dir5/dir6, /testdir/dir5/dir7
inode = (index node)
每個文件的屬性信息,比如:文件的大小,時間,類型等,稱為文件的 元數據
這些元數據存放在 inode表中
inode 表 中有很多條記錄組成, 第一條記錄保存元數據,包括以下信息:
inode number 節點號(身份證號)
文件類型
許可權
UID
GID
鏈接數(指向這個文件名路徑名稱個數)
該文件的大小和不同的時間戳
指向磁碟上文件的數據塊指針
有關文件的其他數據
一般情況下inode表會佔用系統磁碟inode總量的1%
節點號表示 文件的唯一編號 !!!整個系統中 節點號是有限的
當節點號用盡時,即使還有儲存空間,也會提示無剩餘空間 !!!!!!
目錄 是個特殊文件,目錄的元數據保存了 目錄中文件的列表及節點號的對應關系!!!
系統引用文件是 使用 inode號
實際用戶是 通過文件名 來引用一個文件
目錄是 目錄下的文件名和文件inode號之間的映射
執行cp命令:
執行rm 命令:
執行mv命令:
硬鏈接本質上就 給一個文件起一個新的名稱 ,實質是同一個文件
範例:對文件f1.log創建新的名稱f1link.log,兩者inode都是132
硬鏈接特性 :
目錄的鏈接數至少為2,因為目錄中的 . 即為自身
創建子目錄會導致鏈接數增加!
一個符號鏈接指向另一個文件, 就像windows中的快捷方式
軟鏈接特點:
關於源文件相對路徑:只有跨分區創建軟鏈接時才有此問題!
案例一:
提示空間不足 No space left on device,但是 df 查看磁碟空間剩餘很多
案例二:
提示儲存空間不足,刪除無用的大文件後,空間並未釋放,什麼原因?如何解決?
讀入數據:Input
輸出數據:Output
打開的文件都有一個 fd : file descriptor (文件描述符)
Linux給程序提供 三種 I/O 設備
I/O重定向:將默認的輸入,輸出或錯誤 對應的設備進行修改,指向新的目標
STDOUT和STDERR可以被重定向到指定文件,而非默認的當前終端
支持的操作符號包括:
把STDOUT重定向到文件或其他終端
重定向到文件時,若文件不存在則創建,若文件存在則覆蓋內容
再次重定向到同一文件,內容再次覆蓋
若 > 符號之前不輸入命令,則效果為生成空文件或清空目標文件
是迅速清空文件內容的一種方式
藉助/dev/null也可實現同樣的功能
磁碟空間不足時,大文件被佔用不能停,而且rm刪除無法立即騰出空間,應使用 > 或/dev/null >
把STDERR重定向到文件或其他終端
set - C 命令, 禁止將內容覆蓋已有文件,但可追加 (此時>|可以強制覆蓋)
set + C 命令,允許覆蓋
強制覆蓋
用 ( )或者{ }合並多個命令的out或err, 注意使用花括弧的格式!!!
使用 < 來重定向標准輸入:從文件中導入STDIN,代替當前終端的輸入設備
使用 單行或多行重定向 來創建新文件,並輸入指定內容
同時存在 < > ,優先進行 輸入運算
只能對新文件進行!!!!!
只能對新文件進行!!!!!
使用 "<<終止詞" 命令 把接下來輸入的多行內容進行重定向,
直到終止詞位置之前的所有文本都發送給STDIN
終止詞 可以是任何一個或多個符號,
比如:!,@,$,EOF(End Of File),mage等, 其中EOF比較常用
易錯點: tr命令實現的是 單個字元一一對應的轉換關系!!!!
基本格式:
常見用途: 全局大小寫轉換
-d 刪除 所有含有SET1的字元
-c 取字元集的補集,即 取反(一般與-d搭配使用)
-s 把 連續重復的單個字元 以單獨一個字元表示,即 去重
管道(使用符號「|」表示) 用來連接多個命令
功能說明:
注意:STDERR默認不能通過管道轉發,可利用2>&1 或 |& 實現,格式如下
因此, 當不確定命令的輸出結果,或者已知結果中存在error時 ,應該使用上述命令
範例:將 /home 裡面的 文件打包 ,不生成文件,而是傳送到 stdout,經過管道後,
將 tar -cvf - /home 傳送給後面的 tar -xvf - , 最後的這個 - 表示 取前一個命令的 stdout
利用tee命令 可以既重定向到文件,又顯示在屏幕
tee的功能:
基本用法
若後面不加命令2
Ⅳ linux中,ls >filename 與ls 1>filename 有什麼區別
一、ls > filename 與 ls 1> filename 的作用是相同的
都是將標准輸出也就是ls命令的結果重定向到 filename 文件中,並不在屏幕上輸出!
二、linux重定向的設備代碼
標准輸入(stdin) 代碼為 0 ,實際映射關系:/dev/stdin -> /proc/self/fd/0
標准輸出(stdout)代碼為 1 , 實際映射關系:/dev/stdout -> /proc/self/fd/1
標准錯誤輸出(stderr)代碼為 2 ,實際映射關系: /dev/stderr ->/pro/self/fd/2
#舉例:正常輸出和錯誤信息都不顯示,把標准輸出和標准錯誤都重定向到/dev/null
# ls 1>/dev/null 2>/dev/null
三、linux重定向的符號意義
1、> 和 < 分別代表重定向的方向,是從左到右還是從右到左
2、>> 和 << 代表追加,也就是不改變重定向目標文件原有的內容,追加在後面。
#舉例: 將執行 "ls -d" 命令的結果追加到文件lsd.txt中 ls -d >> lsd.txt
3、>&n 使用系統調用 p (2) 復制文件描述符 n 並把結果用作標准輸出;
#舉例: 讓標准錯誤輸出和標准輸入一樣都被存入到文件中 ls -d > test.txt 2>& 1
4. <&n 標准輸入復制自文件描述符 n;
5. n<&- 表示將 n 號輸入關閉
6. <&- 表示關閉標准輸入(鍵盤)
7. n>&- 表示將 n 號輸出關閉
8. >&- 表示將標准輸出關閉
#舉例: 關閉 1 ,2 文件描述符
ls test.sh test1.sh 1>&- 2>&-
熟練記住前三個重定向符號的用法就可以了。
Ⅵ linux標准輸入輸出
linux中有三種標准輸入輸出,分別是STDIN,STDOUT,STDERR,對應的數字是0,1,2。
STDIN是標准輸入,默認從鍵盤讀取信息;
STDOUT是標准輸出,默認將輸出結果輸出至終端;
STDERR是標准錯誤,默認將輸出結果輸出至終端。
由於STDOUT與STDERR都會默認顯示在終端上,為了區分,就有了編號的0,1,2的定義,用1表示STDOUT,2表示STDERR。
2>&1,指將標准輸出、標准錯誤指定為同一輸出路徑
舉栗子:
eg1:cat >>filetest 2>&1 <<END-------建立filetest文件,當輸入遇到END時,退出
eg2:
1、以普通用戶執行find /etc -name passwd命令,默認會將命令的執行結果(STDOUT)與錯誤信息(STDERR)都輸出至終端顯示器。
2、執行find /etc -name passwd >find.out 2>find.err,會將STDOUT與STDERR分別存放至find.out和find.err中。該命令也可以寫成下面三種形式
find /etc -name passwd 1>find.out 2>find.err
find /etc -name passwd 2>find.err >find.out
find /etc -name passwd 2>find.err 1>find.out
3、若要將所有標准輸出及標准錯誤都輸出至文件,可用&表示全部1和2的信息,eg:
find /etc -name passwd &>find.all 或 find /etc -name passwd >find.all 2>&1
4、2>&1 ---標准錯誤重新定向到標准輸出
5、用法:find /etc -name passwd &2>&1 |less
可分解成
find /etc -name passwd & 表示前面的命令放到後台執行。
2>&1 |less 表示將標准錯誤重定向至標准輸出,並用less進行分頁顯示