linux經常使用指令學習記錄

前言

本文主要爲學習貼,用來記錄一些linux上的經常使用指令以供參考。linux

文件內容查看

cat

從上往下閱讀文件內容面試

cat [-AbEnTv] ${FILE_NAME)
cat -n /etc/issue 將該文件的內容輸出到標準輸出中,並顯示行號
cat file1 file2 > file3  將file1 file2的內容依次添加到file3當中

tac

從下往上閱讀文件內容,用法同cat正則表達式

nl

添加行號打印,默認狀況下空白行不顯示行號數據庫

nl [-bnw] ${FILE_NAME}
nl -b a file1 即便空白行也顯示行號
nl -b a -n rz file 空白行也顯示行號,而且行號在字段的最右方顯示,且行號不用加0對齊

more/less

一頁一頁翻動文件。數組

more ${FILE_NAME} 向下翻動文件
less ${FILE_NAME} 向上/下翻動文件

head/tail

取文件的前幾行或者最後幾行內容bash

head/tail [-n number] ${FILE_NAME}
head -n 10 file 讀取文件前十行的內容
tail -n 10 file 讀取文件後十行的內容
head -n -10 file 不打印文件後十行內容
tail -n +100 file 只打印100行之後的內容
tail -f file 打開文件並持續更新,直到ctrl+c才退出。這個經常使用於查看最新的日誌

type

查看命令是屬於內置指令仍是外部指令微信

type [-tpa] name
-t: 加入-t參數時,會顯示命令的類型,file表示爲外部命令,alias表示爲命令別名設置的名稱,builtin表示爲bash內置的命令功能 
-p: 若是name爲外部命令,會顯示完整的文件名
-a: 會將全部在PATH路徑下包含name的命令顯示出來

命令與文件查詢

which

尋找執行文件,查找命令的完整文件名網絡

which [-a] command #-a會將全部由PATH目錄中能夠找到的命令均列出,而不僅第一個被找到的指令
which ifconfig #在非root用戶下會查找不到,由於ifconfig位於/sbin/ifconfig下,而非root用戶的PATH中不包含該路徑,因此找不到
which cd #找不到,由於cd爲bash的內置命令

whereis

根據文件名尋找文件,查找文件的完整文件名less

whereis [-bmsu] 文件或目錄名
-b 只找二進制文件
-m 只找在manual路徑下的文件
-s 只找source源文件
-u 查找不在上述選項中的其餘特殊文件

locate+updatedb

locate會根據/var/lib/mlocate內的數據庫記載,找出用戶輸入的關鍵字文件名,即全部包含該關鍵字的文件都將被輸出。可是由於數據庫的更新通常爲一天一次,因此若是須要查找新的內容,須要用updatedb指令更新數據庫,updatedb會根據/etc/updatedb.conf去查找硬盤內的文件名,並更新數據庫文件socket

locate [-ir] keyword
-i 忽略大小寫差別
-r keyword能夠爲正則表達式

find

查找文件,磁盤查找,支持通配符

find [PATH] [option] [action]
find / -mtime 0 #查找24小時內被修改過的文件
find /etc -mtime 3 #查找3天前的24小時內被修改的文件
find / -mtime +3 #查找3天前(不含3天自己)被更改的文件
find / -mtime -3 #查找3天內被更改的文件
find / -user name #查找用戶名爲name的文件
find / -group name #查找羣組名爲group的文件
find / -nouser #查找不屬於任何用戶的文件,可能出現於網絡文件,或是已經被刪除的用戶建立的文件
find / -name filename #查找文件名爲filename的文件
find / -type TYPE #查找某一類文件,f:正規文件,b:設備文件,d:目錄,l:鏈接文件,s:socket,p:FIFO

壓縮與打包

常見壓縮擴展名

*.Z: compress程序壓縮文件
*.gz: gzip程序壓縮文件
*.bz2: bzip2程序壓縮的文件
*.tar: tar程序打包的文件,但沒有被壓縮
*.tar.gz: tar程序打包的文件,其中通過gzip的壓縮
*.tar.bz2: tar程序打包的文件,其中通過bzip2壓縮

gzip

gzip能夠解開compress,zip與gzip等軟件所壓縮的文件。gzip壓縮後,源文件會被刪除,被替代爲.gz的壓縮文件。

gzip [-cdtv#] 文件名
-c: 將壓縮的數據輸出到屏幕上,可經過數據流重定向來處理
-d: 解壓縮的參數
-t: 能夠用來校驗一個壓縮文件的一致性
-v: 顯示壓縮比等信息
-#: 壓縮等級,-1最快,-9最慢但壓縮程度最高,默認-6

gzip -d filename: 會將壓縮文件解壓縮,並刪除壓縮文件

tar

tar [-j|-z] [cv] [-f 新建的文件名] filename #壓縮
tar [-j|-z] [xv] [-f 打包文件名] [-C 目錄] #解壓縮
-c: 新建打包文件,可配合v查看過程當中被打包的文件名
-x: 解打包或解壓縮功能,能夠搭配-C在特定目錄中解開
-j: 經過bzip2的支持進行壓縮和解壓縮
-z: 經過gzip支持壓縮和解壓縮
-v: 將正在處理的文件名顯示出來
-C: 在特定目錄中解壓縮
-p: 保留備份數據的本來權限和屬性
-P: 保留絕對路徑,通常狀況下都是相對路徑,防止數據覆蓋
--exclude=FILE: 在壓縮過程當中不要講FILE打包進去
--newer: 打包ctime和mtime在日期後面的文件
--newer-mtime:打包mtime在日期後面的文件
tar -zcv -f filename.tar.gz filename #壓縮打包爲filename.tar.gz
tar -zxv -f filename.tart.gz -C 欲解壓縮的目錄 filename

變量讀取與聲明

read

從控制檯讀取輸入

read [-pt] variable
-p: 能夠加上提示符
-t: 等待輸入的秒數

declare

declare [-aixr] variable
-a: 聲明爲數組
-i: 聲明爲整數
-x: 聲明爲環境變量,用法同export
-r: 聲明爲只讀變量

declare -i sum=100+200+300 #若是不聲明爲整數,則會默認爲字符串
declare +r sum #等同於取消操做

變量的修改

${變量#關鍵字} :從變量內容開頭開始,將符合關鍵字的最短數據刪除
${變量##關鍵字}:從變量內容開頭開始,將符合關鍵字的最長數據刪除
${變量%關鍵字}:從變量內容最後開始,將符合關鍵字的最短數據刪除
${變量%%關鍵字}:從比那兩內容最後開始,將符合關鍵字的最長數據刪除
${變量/舊字符串/新字符串}:將遇到的第一個舊字符串更新爲新字符串
${變量//舊字符串/新字符串}:將全部舊字符串更新爲新字符串

變量的替換

變量的替換通常是指根據變量非空與否將變量的值進行替換,記憶方法是當公式中含有:時,則變量不存在與變量爲空字符串爲空,不然只有變量不存在視爲空

var=${str-expr}: 至關於var= str==null ? expr : str
var=${str:-expr}: 至關於var= (str==null || str=='') ? expr : str
var=${str+expr}: 至關於var=(str==null ? '' : expr)
var=${str:+expr}: 至關於var=(str==null || str=='') ? '' : expr
var=${str=expr}:  至關於str= str = null ? expr : str, expr = str
var=${str:=expr}: 至關於str= str == nul || str == '' ? expr : str, expr = str

數據流重定向

>/1>: 以覆蓋的方式將正確的數據輸出到指定的文件或設備上
>>/1>>: 以累加的方式將正確的數據輸出到指定的文件或設備上
2>: 以覆蓋的方式將錯誤信息輸出到指定的文件或設備上
2>>: 以累加的方式將錯誤信息輸出到指定的文件或設備上
<: 將本來須要鍵盤輸入的數據改成文件代替
<<: 結束輸入

find /home -name .bashrc > list 2>&1 #將標準輸出和錯誤輸出都導出到list文件中
cat > catfile < ~/.bashrc #將.bashrc的內容拷貝並覆蓋到catfile中
cat > catfile << "eof" #輸入eof後馬上結束

選取命令

cut

cut -d '分隔符' -f fields #根據分隔符將每一行分割並取出下標爲fields的值
cur -c 字符範圍 #將每一行字符範圍內的內容切割出來

export | cut -c 12- #將export文件的每一行從第12個字符開始之後全部內容切割出來
echo ${PATH} | cut -d ':' -f 3,5 #將path內容按照:分割開來並取第三個和第五個值

cut在處理多空格分隔的行時會比較吃力

grep

分析一行,當該行中有咱們想要的信息,就將該行輸出

grep [-acinv] [--color=auto] '關鍵詞' 文件名
-a: 將binary文件以text文件的方式進行查找
-c: 打印出現的次數
-i: 忽略大小寫
-n: 同時輸出行號
-v: 反向選擇,即選擇不存在關鍵字的行
--color=auto: 將關鍵字加上顏色顯示

last | grep 'root' | cut -d ' ' -f 1

egrep能夠合併管道命令
egrep -v '^$|^#' filename
這裏|表明或

sed

sed [-nefr] [n1[,n2]function]
-n: 只有通過sed特殊處理的那一行纔會被列出來
-e:直接在命令行模式上進行sed的動做編輯
-f filename:將sed動做寫在一個文件內
-r:支持擴展型正則表達式語法
-i:直接修改讀取的文件內容

n1,n2: 通常表明選擇進行動做的行數,$表明最後一行
function:
a:新增
c: 替換,會替換n1到n2之間的行
d:刪除
p:將某個選擇的數據打印出來
s:替換,能夠接正則表達式

sed 's/要被替換的字符串/新的字符串/g'
cat /etc/passwd | sed -e '4d' -e '6c no six line' #若是要添加多個指令,則必須添加-e

排序

sort

sort [-fbMnrtuk] file/stdin
-f: 忽略大小寫
-b:忽略最前面的空格
-M:以月份來排序
-n:使用純數字來排序,默認爲文字類型
-r:倒序
-u:相同數據中,只顯示一行
-t:分隔符,默認爲tab
-k:第幾段數據做爲排序標準

wc

統計文件的行數和子樹

wc [-lwm] filename
-l: 僅列出行
-w:僅列出多少字
-m: 多少字

uniq

去重

uniq [-ic]
-i: 大小寫無關
-c: 計數統計

tee

雙重重定向,將一份輸出同時輸出到文件和標準輸出流

tee [-a] filename
-a: 添加到文件後面

xargs

讀入stdin數據,而且以某種分割字符將其分割成參數。該命令適合於不支持管道的命令來支持管道操做

xargs [-0epn] command
-0: 將特殊字符還原成通常字符
-e: EOF,當xargs分析到這個參數時會中止解析
-p:在執行每一個命令的參數時,都會詢問用戶
-n: 後面接次數,要使用幾個參數的意思

文件格式化處理

awk

主要是處理每一行的字段內的數據,而默認的字段的分隔符爲空格鍵或tab鍵

awk '條件類型{動做1}條件類型2{動做2}...' filename

NF:$0每一行擁有的字段總數
NR:目前awk所處理的是第幾行數據
FS: 目前的分隔符

last -n 5 | awk '{print $1 "\t" $3}' #打印一行的第一段文字和第三段文字
last -n 5 | awk '{print $1 "\t lines: " NR "\t columnes: " NF}'
cat /etc/passwd | awk 'BEGIN {FS=":"} $3 < 10 {print $1 "\t " $3}'

diff

以行尾單位比較兩個文件之間的區別,也可比較不一樣目錄之間相同文件的內容

diff [-bBi] from-file to-file
from-file和to-file能夠用 - 即標準輸入替代
-b: 忽略一行當中僅有多個空白的區別,如about me和about    me視爲相同
-B:忽略空白行的區別
-i:忽略大小寫的區別

clipboard.png
想要了解更多開發技術,面試教程以及互聯網公司內推,歡迎關注個人微信公衆號!將會不按期的發放福利哦~

相關文章
相關標籤/搜索