Linux 命令行

Linux 命令筆記


1、目錄/文件

1.1 目錄文件平常操做

.            ->    當前目錄
..           ->    上一級目錄
.file/.dir   ->    隱藏文件/文件夾

【ls】 查看指定目錄文件
ls命令是最經常使用的linux命令,要配合着選項使用。php

經常使用命令

ls -lh # 方便查看文件大小
ls -AsSh

【pwd】:查看當前目錄html

pwd等價於/bin/pwd -L,顯示當前絕對路徑,若是是連接,則顯示連接路徑
pwd -P等價於/bin/pwd -P,顯示實際路徑,而非連接路徑

若是文件夾被臨時刪除,pwd仍是顯示未刪除文件夾的那個路徑,這時候可使用/bin/pwd,就會提示當前路徑不存在

【cd】:切換目錄node

cd -    # 上一目錄
cd ~    # 家目錄
cd      # 家目錄
cd ..   # 上一目錄
cd !$   # 將上命令的參數作爲cd 參數

【touch】:新建文件mysql

1. 建立新文件同時能夠指定一些時間參數
$ touch newfile

2. 一次性建立多個文件
$ touch {1..10}.txt

能夠對已有文件修改時間戳(ll顯示的時間)linux

【1】
touch -d [[CC]YY]MMDD text
touch -t [CC[YY]MMDDhhmm[.SS] text
CC爲年數中的前兩位,即」世紀數」;YY爲年數的後兩位,即某世紀中的年數.若是不給出CC的值
touch -d 20171004 text
touch -t 201710041330.30 text

【2】
-r:以另外一文件爲基準更新時間戳
以file1的時間戳爲基準,將file2的改爲同樣的
touch -r file1 file2

【3】其餘不經常使用參數
-a   或--time=atime或--time=access或--time=use  只更改存取時間。
-c   或--no-create  不創建任何文檔。
-f  此參數將忽略不予處理,僅負責解決BSD版本touch指令的兼容性問題。
-m   或--time=mtime或--time=modify  只更改變更時間。

【mkdir】:新建文件夾git

# 建立一個或多個的同級目錄
mkdir adir bdir

# 遞歸建立目錄
# 當前目錄下並無cdir這個文件夾,若是使用單純mkdir cdir/ddir會報錯。
# 應該使用
mkdir -p cdir/ddir

# 指定權限
mkdir -m 777 dir_name

# 顯示建立信息(成功或失敗)
mkdir -v dir_name

# 使用!$快速進入新建文件夾
mkdir ming
cd !$

【rm | rmdir】github

# 只能刪除空文件夾
rmdir dirname

# 刪除當前文件夾下全部文件並不提示
rm -f *

# 遞歸刪除dirname下全部文件
rm -r dirname

# 上面兩者結合,遞歸刪除dirname下全部文件並不提示
rm -rf dirname

【cp】:複製文件或目錄web

# 遞歸複製old_dir目錄下全部文件和文件夾到new_dir文件夾下
cp -r old_dir new_dir

注意:默認cp拷貝文件後會使用預設權限,即其餘人沒有更改的權限,須要使用-p或
者-a文件全部的全部特性都一塊兒複製過來 (拉取源站數據緩存,不更改文件最後修改
時間)正則表達式

【mv】:移動或重命名sql

# 移動/tmp/test/sample.txt文件到當前目錄下
mv /tmp/test/sample.txt ./

【cat 】查看文件

做用:文本文件查看和鏈接工具,用於查看文本文件的內容。
命令格式:cat file 常常和more、head、tail、less以及管道命令結合使用,如:cat file | more、cat file | head等。

三個功能

1.一次顯示整個文件:cat filename
2.從鍵盤建立一個文件:cat > filename 建立文件,輸入內容,Ctrl+d 結束
3.將幾個文件合併爲一個文件:cat file1 file2 > file

命令參數

-A, --show-all           等價於 -vET
-b, --number-nonblank    對非空輸出行編號
-e                       等價於 -vE
-E, --show-ends          在每行結束處顯示 $
-n, --number     對輸出的全部行編號,由1開始對全部輸出的行數編號
-s, --squeeze-blank  有連續兩行以上的空白行,就代換爲一行的空白行
-t                       與 -vT 等價
-T, --show-tabs          將跳格字符顯示爲 ^I
-u                       (被忽略)
-v, --show-nonprinting   使用 ^ 和 M- 引用,除了 LFD 和 TAB 以外

【tac】反向查看

cat是第一行到最後一行,tac是最後一行到第一行

【head | tail】

# 顯示前10行
head xs.txt  等價於  cat xs.txt|head  等價於  cat xs.txt|head -n 10


# 顯示最後10行
tail xs.txt  等價於  tail -n 10 xs.txt


# 顯示除末尾10行外
head -n -10 xs.txt

【more | less】

更具體命令能夠參考:Linux中more和less命令用法

【more】
# 回車就往下一行顯示,空白鍵就往下一頁顯示
# 按 b 鍵就會往回一頁顯示,按 q 就會退出
more xs.txt

# 查找比較雞肋,並從該處前兩行開始顯示輸出
more +/查找內容 xs.txt

【less】
# 和more幾乎同樣的功能,可是less更靈活(可使用任何vim的移動命令,還有標記功能很使用),好比查找命令,直接像vim同樣輸入/便可
less xs.txt

ma : 使用 a 標記文本的當前位置
'a : 導航到標記 a 處

F :實現和tail -f的功能,實時輸出內容,tail +F xs.txt

小練習

選取xs.txt的10-20行

head -n 20 xs.txt|tail

# 更快捷的方法
sed -n '10,20p' xs.txt

1.2 文件處理

wc

統計文件信息

# 統計全部信息(行數、單詞數、字符數)
$ wc /etc/passwd

# 行數
$ wc -l /etc/passwd

# 單詞數   # 中文沒法統計
$ wc -w /etc/passwd

# 字節數
$ wc -c /etc/passwd

# 字符數
$ wc -m /etc/passwd

# 最長行字節數
$ wc -L /etc/passwd

sort

$ cat /etc/passwd | sort
$ cat /etc/passwd | sort -r

# 以:爲分隔符,對第三列排序,所得的結果,再經過cut以:爲分隔符取第三列
$ cat /etc/passwd | sort -t ":" -k 3 |cut -d ":" -f 3

uniq

# 顯示每行重複頻率
uniq -c 文件名

# 只顯示有重複的行
uniq -d 文件名

挑戰題目

wget http://labfile.oss.aliyuncs.com/courses/1/data1
# 裏面是包含一些命令使用的列表

# 要求:從裏面找出出現頻率次數前3的命令並保存在/home/result

$ cat data1 | cut -c 8-|cut -d " " -f 1 |sort | uniq -dc | sort -r -n -k1 | head -n 3 > /home/result

1.3 文字處理

tr

tr能夠刪除或者去重某文本信息中的某些文字。還能夠進行替換操做

# 刪除hello,裏面全部l,o字符
$ echo 'hello' | tr -d 'lo'

# 去重hello裏的l
$ echo 'hello' | tr -s 'l'

# hello裏,l換成a,e換成b
$ echo 'hello' | tr 'le' 'ab'

col

將tab轉換爲等數量的空格,或者反轉

-x   tab轉空格
-h   空格轉tab(默認)
# 查看 /etc/protocols 中的不可見字符,能夠看到不少 ^I ,這其實就是 Tab 轉義成可見字符的符號
$ cat -A /etc/protocols

# 使用 col -x 將 /etc/protocols 中的 Tab 轉換爲空格,而後再使用 cat 查看,你發現 ^I 不見了
$ cat /etc/protocols | col -x | cat -A

sed

文件處理工具。
使得不須要打開文件就能夠對文件進行操做(刪除,替換,選取,新增)。以行爲單位進行處理。

經常使用選項

-n∶通過處理後的結果顯示出來。不影響真實文件。
-e:直接在指令列模式上進行 sed 的動做編輯;(沒明白)
-f∶直接將 sed 的動做寫在一個檔案內, -f filename 則能夠執行 filename 內的sed 動做;
-i∶直接修改讀取的檔案內容,而不是由屏幕輸出。

經常使用命令:

a∶新增, a 的後面能夠接字串,而這些字串會在新的一行出現(目前的下一行)~
c∶取代, c 的後面能夠接字串,這些字串能夠取代 n1,n2 之間的行!
d∶刪除,由於是刪除啊,因此 d 後面一般不接任何咚咚;
i∶插入, i 的後面能夠接字串,而這些字串會在新的一行出現(目前的上一行);
p∶列印,亦即將某個選擇的資料印出。一般 p 會與參數 sed -n
s∶取代,能夠直接進行取代的工做哩!一般這個 s 的動做能夠搭配正規表示法!例如 1,20s/old/new/g 就是啦!

刪除某行

sed '1d' somefile              #刪除第一行
 sed '$d' somefile              #刪除最後一行
 sed '1,2d' somefile           #刪除第一行到第二行
 sed '2,$d' somefile           #刪除第二行到最後一行
 
 # 以上,只是輸出,源文件並不會替換,若要對源文件進行修改,需加 -i
 sed -i '1,2d' somefile

顯示某行

sed -n '1p' somefile           #顯示第一行
 sed -n '$p' somefile           #顯示最後一行
 sed -n '1,2p' somefile        #顯示第一行到第二行
 sed -n '2,$p' somefile        #顯示第二行到最後一行

使用模式進行查詢

sed -n '/ruby/p' somefile    #查詢包括關鍵字ruby所在全部行
 sed -n '/\$/p' somefile      #查詢包括關鍵字$所在全部行,使用反斜線\屏蔽特殊含義

插入行

sed '1a drink tea' somefile              #第一行後增長字符串"drink tea"
sed '1,3a drink tea' somefile            #第一行到第三行後增長字符串"drink tea"
sed '1a drink tea\nor coffee' somefile   #第一行後增長多行,使用換行符\n

替換行

sed '1c Hi' somefile                #第一行代替爲Hi
sed '1,2c Hi' somefile              #第一行到第二行代替爲Hi

替換行中部分數據

sed 's/ruby/bird/g somefile'    #替換ruby爲bird,記住這個並不會更改源文件,只是輸出
sed 's/ruby//g' somefile       #刪除ruby

【注意】:以上對源文件都不作修改,若要修改,要加上-i

1.4 文件重構

cut

【顯示每行的某位置的內容】

# 前五個(包含第五個)
$ cut /etc/passwd -c -5
# 前五個以後的(包含第五個)
$ cut /etc/passwd -c 5-
# 第五個
$ cut /etc/passwd -c 5
# 2到5之間的(包含第五個)
$ cut /etc/passwd -c 2-5

【以指定的分隔符分隔,並返回某些列】

# 返回第一列和第六列
$ cut /etc/passwd -d ":" -f 1,6

awk

awk是一個強大的文本分析工具。
簡單來講awk就是把文件逐行的讀入,以空格爲默認分隔符將每行切片(至關於Excel的分列),切開的部分再進行各類分析處理。

# 打印空白行,文件有幾個空行,就輸出幾個空行
awk '/^$/{print "This is a blank line"}' awk.txt

# 打印所有列,引用變量
awk '{print $0}' awk.txt

# 打印前三列,引用變量
awk '{print $1,$2,$3}' awk.txt

# 指定間隔符爲空格,獲取第四列
awk -F" " '{print $4}' awk.txt

# 重組表格
awk  -F ':'  '{print $1"\t"$7}' awk.txt

# 表頭和結尾,會先輸出name,shell
awk  -F ':'  'BEGIN {print "name,shell"}  {print $1","$7} END {print "blue,/bin/nosh"}' awk.txt

# 在awk中引用變量變量,在原理是拼接.
limit=30
df -Th| grep "/dev/vd" | sed 's/%//g' |awk '{ if($6>'"$limit"') print $6}'

1.5 其餘命令

nl

-b :指定行號指定的方式,主要有兩種:

-b a :表示不管是否爲空行,也一樣列出行號(相似 cat -n);
-b t :若是有空行,空的那一行不要列出行號(默認值);

-n :列出行號表示的方法,主要有三種:

-n ln :行號在螢幕的最左方顯示;
-n rn :行號在本身欄位的最右方顯示,且不加 0 ;
-n rz :行號在本身欄位的最右方顯示,且加 0 ;
-w  :行號欄位的佔用的位數。
nl -b a -n rz -w 3 text

1.6 文件查找

which:查詢軟件

在PATH變量指定的路徑中,搜索某個系統命令(可執行文件)的位置,而且返回第一個搜索結果。

參數選項(基本不用)

-n  指定文件名長度,指定的長度必須大於或等於全部文件中最長的文件名。
-p  與-n參數相同,但此處的包括了文件的路徑。
-w  指定輸出時欄位的寬度。
-V  顯示版本信息

grep:搜索神器

搜索並篩選顯示結果。
該命令常常配合管道命令來控制輸出。
如下 是經常使用的選項:

【很是好用:不打開文件,直接搜索指定目錄下文件內的內容】

$ vim a   # wongbingming
$ vim b   # wangbingming
$ grep -rnI "bingming" .    # 固然這裏也可使用正則表達式
./a:1:wongbingming
./b:1:wangbingming

參數解釋
-r  遞歸遍歷各個文件夾下的全部文件
-n  顯示在文件中的第幾行查詢到
-I  忽略二進制文件

whreris:簡單快速

定位可執行文件、源代碼文件、幫助文件在文件系統中的位置。
個搜索很快,由於它並無從硬盤中依次查找,而是直接從數據庫中查詢。

$ whereis who

參數選項

-b   定位可執行文件。
-m   定位幫助文件。
-s   定位源代碼文件。
-u   搜索默認路徑下除可執行文件、源代碼文件、幫助文件之外的其它文件。
-B   指定搜索可執行文件的路徑。
-M   指定搜索幫助文件的路徑。
-S   指定搜索源代碼文件的路徑。

locate:快而全

經過/var/lib/mlocate/mlocate.db數據庫查找,不過這個數據庫也不是實時更新的,系統會使用定時任務天天自動執行updatedb命令更新一次,因此有時候你剛添加的文件,它可能會找不到,須要手動執行一次 updatedb命令(在咱們的環境中必須先執行一次該命令)。

$ updatedb
$ locate /etc/sh

# 查找/etc/目錄下全部以sh開頭的文件

find:小而細

鳥哥的Linux私房菜-find
天天一個linux命令(19):find 命令概覽
天天一個linux命令(20):find命令之exec

1.7 文件傳輸/下載

scp

實現不一樣機器之間傳輸數據(加密)
scp詳解

curl

Curl是一個命令行方式下傳輸數據的開源傳輸工具,支持多種協議包括:FTP,HTTP,HTTPS,IMAP,POP3,TELNET等。一樣支持HTTP POST方法,PUT方法,FTP上傳,cookie,用戶名/密碼認證,下載文件端點續傳等,功能十分強大。

經常使用的,用於模擬瀏覽器請求。
curl詳解

wget

測試速率

wget -S http://115.231.74.93:80/lvs.lxdns.net/test.rar && rm -rf test.rar*

1.8 文件壓縮

zcat

查看壓縮的文件內容

zcat file.gz

Linux上的壓縮格式比Windows上多不少,在 Windows 上最多見的不外乎這三種 *.zip*.rar*.7z 後綴的壓縮文件。而在 Linux 上面常見的格式除了以上三種外,還有 *.gz*.xz*.bz2*.tar*.tar.gz*.tar.xz*.tar.bz2,對於常見的壓縮格式,tar已經能夠解決,因此這裏只介紹tar。tar並不能壓縮和解壓7z,zip等其餘文件

tar

壓縮示例

# test是當前目錄下一個文件夾
$ tar -czvphf test.tar.gz old_folder

參數解釋

-c  指明建立tar文件
-z  指明生成gz文件

-v  可視輸出,不加就靜默壓縮

-f  指明壓縮後的文件名,必須-f後必須緊跟文件名,不然無效
-p  當在其餘主機還原時但願保留文件的屬性
-h  備份連接指向的源文件而不是連接自己

解包示例

$ mkdir new_folder
$ tar -xzvf test.tar.gz -C new_folder

參數解釋

-x  解壓命令
-z  指明源文件是gz文件
-f  指明壓縮後的文件名,必須-f後必須緊跟文件名,不然無效

-v  可視化輸出解包過程,通常不加,靜默解包

-C  指明解壓到哪一個目錄

其餘壓縮格式

*.tar.gz    -z
*.tar.xz    -J
*tar.bz2    -j

gz

最簡單的壓縮格式

# 壓縮
gzip somefile

# 解壓
gzip -d somefile.gz

7zip

yun install p7zip

# 解壓
7za x file.7z

# 壓縮
# 先將要壓縮的文件都放到~/test/ 下
7za a file.7z ~/test/

zip

# 解壓
unzip some.file 

# 壓縮 
zip -r some.zip file1 file2 dir1 dir2...

1.9 rpm包管理

# 解壓rpm包
rpm2cpio xxx.rpm |cpio -div

# 查看文件屬於哪一個rpm包
rpm -qf /path/filename

# 使用rpmrebuild從新生成rpm包
# 使用rpmrebuild須要依賴rpmbuild:yum install -y rpmbuild
rpmrebuild xxx

2、系統管理

2.0 環境變量

變量分爲用戶變量(env)和shell變量(set)

# 添加shell變量

[root@host ~]# myuser=wangbm
[root@host ~]# echo $myuser
wangbm
[root@host ~]# env|grep myuser
[root@host ~]# set|grep myuser
myuser=wangbm


# 添加用戶變量,會發現用戶變量會覆蓋shell變量
[root@host ~]# export myuser=wangbingming
[root@host ~]# env|grep myuser
myuser=wangbingming
[root@host ~]# set|grep myuser
myuser=wangbingming


# 刪除環境變量
[root@host ~]# unset myuser
[root@host ~]# env|grep myuser
[root@host ~]# set|grep myuser

一些系統的變量

# 這裏生成的變量,對全部用戶生效
/etc/profile

# 對特定user生效
/root/.bash_profile
/home/user/.bashrc

# 注意修改文件後,要手動source一下

2.1 相關查詢

系統信息

# 查詢開機時間
$ who -b

# 查詢系統內核
$ uname -r

# 查詢是否安裝某個rpm包
$ rpm -qa|grep nova

# service 文件目錄
$ /usr/lib/systemd/system    # centos 7.x
$ /etc/init.d                # centos 6.x

# 查詢開機自啓列表
$ systemctl list-unit-files
$ chkconfig --list

# 查看系統版本
$ cat /etc/redhat-release

# ------或者------
$ yum install redhat-lsb -y
$ lsb_release -a

# 進程樹
$ pstree -p

# 查看系統運行多長時間
$ uptime/w

# 查看系統版本
lsb_release -a

# 查看CPU信息
$ cat /proc/cpuinfo
$ numactk -H

時間查詢

輸出操做系統的當前日期、時間和時區。

# -s參數用於修改當前的日期和時間
date –s 2007-10-17
date –s 18:05:00

用法:cd /CNCLog/cache/qsLogBackSrcFull/bkDir/`date +%Y-%m-%d`

2.2 系統分區

分區介紹

Linux的分區,不一樣於Windows,必定要區別對待,否則會搞不明白。

Linux的分區的過程經歷如下幾個步驟

1. 設備分區:對硬盤存儲空間的劃分
2. 格式化:寫入文件系統
3. 掛載:將分區掛載到目錄上,才能訪問數據

關於硬件對應的設備文件名,能夠參照下圖

其中以硬盤爲例來講明

硬盤能夠分爲三種
hd : IDE硬盤接口(淘汰,接口最大傳輸100來M)
sd : SCSI硬盤接口(淘汰,接口最大傳輸200M),和SATA硬盤接口

如今都是SATA的硬盤接口

/dev/sda1   表示的是第一塊(a)SATA硬盤的第一個分區(1)
/dev/sdb2   表示的是第二塊(b)SATA硬盤的第二個分區(2)

分區類型
能夠分爲:主分區擴展分區邏輯分區

【主分區】:最多隻能有4個    (受硬盤結構限制,若是硬盤結構不變,將都被限制)

【擴展分區】:
    1. 最多隻能有一個
    2. 主分區+擴展分區,一共只能有四個,能夠少於
    3. 擴展分區下面,不能存放數據,只能進行邏輯分區的劃分

【邏輯分區】:掛載後就是一個目錄下的空間,數量不受限制

格式化作了哪些事

【目的】
1. 不是爲了清空數據
2. 主要是爲了寫入文件系統

【文件系統】
Windows:
FAT16(每一個分區大小最大不能超過2G),FAT32(單個分區大小最大16G,單個文件大小不能超過4G),NTFS

Linux:ext2,ext3,ext4

->>>>> 越日後越先進

【寫入文件系統作了啥】
1. 分數據塊
把空間分紅若干個等大小的數據塊(block),每一個大小4kb
若是咱們有一個文件10kb,那麼會佔用3個數據塊,實際大小就會是12kb

你能夠查看一個文件夾的大小,也都是4kb
ll -l

2. 創建數據表
一個文件被分紅若干個的數據塊,那麼若是有用戶訪問的時候,就須要有一個表把這些數據塊拼湊起來。
這個數據表就記錄了這個文件由哪些數據塊組成。

分區說明

必須分區
/        根目錄,最高級目錄,不分配的話,全部的文件都沒存儲,軟件無法運行
/swap    交換分區,虛擬內存,4G如下,分2倍,4G以上,和真實內存同樣便可

推薦分區
/boot    啓動分區,防止/ 分區寫滿,致使系統沒法啓動,不須要很大,200M足矣


邏輯分區號:只能從5開始,即便3,4沒有被使用

分區操做

關於分區的操做能夠參考這個: 分區操做

## 查看分區表信息
$ sudo fdisk -l
$ lsblk

# 刪除分區前,先確認有沒有掛載點,有的話須要先umount卸載
$ fdisk /dev/vdb  而後再按d,w

2.3 進程管理

ps、kill、killall

參考文檔:ps 命令的十個簡單用法

# 查看當前全部進程
ps -aux

# 終止pid爲1095的進程
kill 1095

# 強制終止pid爲1095的進程
# 9是信號強度,強制殺死
# 其餘信號,-1 該信號讓進程正常關閉,而後從新讀取配置文件以後重啓
# -15 正常結束進程的信號,kill命令默認信號
kill -9 1095

# 終止指定程序
killall 程序名

# pkill
pkill -9 httpd 強制終止進程
pkill -t -9 pts/1 強制殺死pts/1虛擬終端登入的進程

top

經常使用的性能分析工具,可以實時顯示系統中各個進程的資源佔用情況,相似於Windows的任務管理器。
linux的top命令參數詳解

top       實時得查看進程的狀態,以及系統的一些信息(如 CPU、內存信息等),3s刷新一次
ps        來靜態查看當前的進程信息
pstree    來查看當前活躍進程的樹形結構。

pgrep

[root@wangbm web]# pgrep keepalived
21955
21956
21957
[root@wangbm web]# ps -ef|grep keepalived
root     21955     1  0 21:27 ?        00:00:00 /usr/sbin/keepalived -D
root     21956 21955  0 21:27 ?        00:00:00 /usr/sbin/keepalived -D
root     21957 21955  0 21:27 ?        00:00:00 /usr/sbin/keepalived -D
root     22035 12159  0 21:33 pts/0    00:00:00 grep --color=auto keepalived

2.4 設備信息管理

df

顯示磁盤的相關信息

df -Th

free

輸出內存的使用狀況,m,g分別是指定單位,默認是kb

free -m
free -g

total 表示總內存大小;
used和free分別表示被使用和空閒內存大小;
share指可被多個進程共同享有的內存; buffers和cached用來保留最近訪問的文件和數據,當其餘進程須要更多的內存時,這些內容能夠被縮減; Free命令還能夠輸出交換空間的相關信息。

ifconfig

顯示或設置網絡設備

last

列出目前與過去登入系統的用戶相關信息。通常可用來查看系統重啓記錄

history

屏幕輸出當前用戶在命令行模式下執行的最後(1000個)命令

passwd

這個用於修改密碼

非交互式修改密碼

echo 'root12#$'| passwd --stdin root

reboot/shutdown

重啓/關機

reboot/shutdown -r now

# reboot [-n][-w][d][-i]    從新啓動計算機,使用權限是系統管理員
-n 重啓前不將記錄寫回硬盤
-w 並非真的重啓,只是把記錄寫道/var/log/wtmp文件中
-d 不把記錄寫入/var/log/wtmp文件中
-i 重啓謙先把全部與網絡相關的裝備中止

rpm

# 安裝rpm包
rpm -ivh monitor-system-1.2-1.i386.rpm

# 更新rpm包
rpm -U/Fvh (F只更新已存在的文件)

# 查詢包中的文件
rpm -ql monitor-system

# 查詢文件所屬的包
rpm -qf /usr/local/squid/etc/squid.conf(絕對路徑/到目錄下查找)

# 查詢全部包
rpm –qa | grep squid

# 卸載某個rpm包
rpm –e monitor-system

開啓80端口

vi /etc/sysconfig/iptables

# 在22端口下面添加一行
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

# 重啓防火牆
/bin/systemctl restart  iptables.service

修改時區

# 由EDT(美國)改爲CST(中國)

$ mv /etc/localtime /etc/localtime.bak  
$ ln -s /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime

查看機器鏈接的哪一個交換機

$ service lldpd restart
$ lldpcli show nei sum   # 查看JS_HuaiAnDXXZ4_166.3
-------------------------------------------------------------------------------
LLDP neighbors:
-------------------------------------------------------------------------------
Interface:    eth1, via: LLDP
  Chassis:     
    ChassisID:    mac 00:6b:8e:01:1a:07
    SysName:      JS_HuaiAnDXXZ4_165.132_IPMI
  Port:        
    PortID:       local 39
    PortDescr:    Ethernet1/0/39
    TTL:          120
-------------------------------------------------------------------------------
Interface:    eth0, via: LLDP
  Chassis:     
    ChassisID:    mac 58:69:6c:62:7b:c2
    SysName:      JS_HuaiAnDXXZ4_166.3
  Port:        
    PortID:       ifname TenGigabitEthernet 0/41
    PortDescr:    TenGigabitEthernet 0/41
    TTL:          121
-------------------------------------------------------------------------------

2.5 磁盤管理

df

顯示指定磁盤文件的可用空間。
這裏要理解掛載的概念。

全部的設備(磁盤/等其餘介質)都須要掛載在一個目錄,Linux才能訪問數據。

具體能夠參考這篇文章:df 命令

經常使用命令

$ df -Th
$ df -lh


$ df -h        以1024來換算
$ df -H        以1000來換算

$ df -t ext3   指定設備類型
$ df -T        文件系統的類型
$ df -i        查看inode的使用狀況

關於inode能夠查看:inode的理解

du

查看目錄的容量

$ du -h -d 0 ~

# 參數解釋
-h  以人能看得懂的方式顯示
-d  掃描的目錄層級,0表示只有一個指定目錄,1表示次級目錄

~   是家目錄,這裏能夠選你指定的目錄

$ du -s
# 查看當前所處目錄總容量大小,單位是k,不可跟-d

$ du -a
# 查看當前所處目錄及全部子目錄的全部文件,單位是k,建議不用

查看文件的大小

$ du -h file.txt

dd

dd命令用於轉換和複製文件,不過它的複製不一樣於cp。以前提到過關於 Linux的很重要的一點,一切即文件,在 Linux上,硬件的設備驅動(如硬盤)和特殊設備文件(如/dev/zero/dev/random)都像普通文件同樣,只要在各自的驅動程序中實現了對應的功能,dd也能夠讀取自和/或寫入到這些文件。這樣,dd也能夠用在備份硬件的引導扇區、獲取必定數量的隨機數據或者空數據等任務中。dd程序也能夠在複製時處理數據,例如轉換字節序、或在 ASCIIEBCDIC編碼間互換。

這裏有篇文章講得很好:Linux-dd命令詳解

補充一點

# 輸出到文件
$ dd of=test bs=10 count=1 # 或者 dd if=/dev/stdin of=test bs=10 count=1

# 輸出到標準輸出
$ dd if=/dev/stdin of=/dev/stdout bs=10 count=1
# 注
在打完了這個命令後,繼續在終端打字,做爲你的輸入

前面說到dd在拷貝的同時還能夠實現數據轉換,那下面就舉一個簡單的例子:將輸出的英文字符轉換爲大寫再寫入文件

dd if=/dev/stdin of=test bs=10 count=1 conv=ucase

製做虛擬鏡像並掛載

# 製做虛擬鏡像
$ dd if=/dev/zero of=virtual.img bs=1M count=256
$ mkfs.ext4 virtual.img

# 使用一個循環設備(/dev/loop)鏈接虛擬鏡像文件
$ sudo losetup /dev/loop0 virtual.img

# 掛載前查看下當前已掛載的設備
$ sudo mount

# 掛載
$ sudo mkdir /mnt/point
$ sudo mount /dev/loop0 /mnt/point

# 上面鏈接虛擬鏡像文件和掛載設備兩條命令能夠合併成一條,掛載類型能夠省略,會自動識別
$ sudo mount -o loop [-t ext4] /mnt/point

# 再次查看掛載的設備,就能夠發現咱們新掛載的
$ sudo mount


# 卸載:必定要加-fl。否則沒法卸載
$ sudo umount -fl /mnt/point

# 查看全部與文件相關聯的 loop 設備
$ losetup -a
# 卸載
$ losetup -d /dev/loop0

2.6 任務管理

一次性任務(at)

建立定時任務
$ sudo apt-get install at
$ at now+5 minutes
at>/bin/ls
at><EOL>    # 就是Ctrl+d
job 2 at Sum Oct 15 14:58:00 2017   # 結束的時候,告知執行時間
管理定時任務
$ atq  # 能夠查看當前還有那些定時任務,會顯示任務號

# 查看具體任務代碼
$ at -c <job_no>

# 刪除任務
$ atrm <job_no>

例行性任務(crontab)

參考如下文字

  1. 天天一個linux命令(50):crontab命令
  2. 鳥哥的私房菜

作個示例

# 檢查crond服務是否啓動
$ ps aux|grep crond

# 建立任務
$ crontab -e

# 輸入1 回車
# 任務是:天天凌晨3點備份日誌到/home/temp/目錄,文件名爲日期
# 跳到文件尾部輸入任務:* 3 * * * cp alternatives.lob /home/temp/$(date \%Y-\%m-\%d)。保存退出
# 注意%須要加\來轉義,否則會被當成換行使用

# 查看任務
$ crontab -l

# 刪除任務(當前用戶),固然也能夠指定用戶
$ crontab -r [-u user]

3、用戶/權限管理

3.1 用戶管理

建立用戶

【useradd和adduser區別】
useradd:只建立用戶,建立完了用 passwd lilei去設置新用戶的密碼。更像一種命令。

adduser:會建立用戶,建立目錄,建立密碼(提示你設置),作這一系列的操做。更像是一個程序,執行確認一系列操做。

刪除用戶

sudo deluser lilei --remove-home

切換用戶

su [user]   # 切換到其餘用戶,環境變量不變,仍是當前路徑,若是不指定user,就切換到root

su - [user]  # 切換到其餘用戶,環境變量也切換,路徑變爲user家目錄,若是不指定username,就切換到root,至關於使用user進行登陸

Ubuntu切換用戶

# 切換到root
$ sudo su

# 切換到普通用戶
$ su user

CentOS

$ su
$ su root
$ su -
$ su -root

$ su user
$ su -user

用戶組

1. 每一個用戶都至少屬於一個用戶組,建立的時候若是不指定,就和當前用戶的組同樣(root用戶組除外)。
2. 一個用戶能夠屬於多個用戶組。
# 查看所屬用戶組
$ groups [user]

UID/GID/組ID

# 顯示相關信息,如要查看root用戶的信息
id root

# 全部文件都保存在/etc/)asswd
vi /etc/passwd

管理用戶:查看用戶的UID和GID
管理密碼:Linux下/etc/shadow文件

添加sudo用戶組

【第一種方法】
在root下,visudo或者vi /etc/sudoers,找到root ALL=(ALL)的下一行添加一行,user ALL=(ALL),user是對應的用戶名

【第二種方法】
在root下,使用命令sudo usermod -G sudo user,將user加入sudo用戶組

sudo免密

當有些操做只有root用戶才能操做的時候,怎麼辦?
1.咱們須要切換到root用戶操做。

  1. 當前用戶屬於sudo組,可使用sudo [command]
  2. 使用sudo輸入一次密碼免密使用5分鐘。仍是太麻煩,能夠配置當前用戶免密執行sudo。

如何免密配置

vi /etc/sudoers.d/<user>

# 添加內容
# 若是要指定特定的命令不須要密碼的話,就把ALL替換成命令路徑,以下
# NOPASSWD: /sbin/mount, (root) NOPASSWD: /bin/umount
<user> ALL=(ALL) NOPASSWD:ALL
Defaults:shiyanlou !requiretty

# 有時候,雖然用戶設置免密了,可是仍是須要輸入密碼,是group覆蓋了,須要把group也設成免密。

參考資料:sudo免密

3.2 權限管理

更改文件全部者和所屬組

[sudo] chown 用戶組:用戶 文件/文件夾

# 以下只更改所屬用戶
[sudo] chowm 用戶 文件/文件夾

修改文件權限

文件權限有執行三種
分別對應數字4,2,1,也就是2^2,2^1,2^0

如何修改文件權限

【第一種方法】
chmod 777 文件

【第二種方法】:加減的方法
g、o 還有 u 分別表示 group、others 和 user,+ 和 - 分別表示增長和去掉相應的權限。

舉個例子
好比一個文件權限是:-wr-wr-wr-
chmod go-wr 文件

而後文件權限就變成:-wr-------

禁止修改、刪除、移動文件

chattr -ichattr +i

+ :在原有參數設定基礎上,追加參數。
- :在原有參數設定基礎上,移除參數。

命令:chattr [ -RV ] [ -v version ] [ mode ] files

A:   文件或目錄的 atime (access time)不可被修改(modified), 能夠有效預防例如手提電腦磁盤I/O錯誤的發生。
S:   硬盤I/O同步選項,功能相似sync。
a:   即append,設定該參數後,只能向文件中添加數據,而不能刪除,多用於服務器日誌文 件安全,只有root才能設定這個屬性。
c:   即compresse,設定文件是否經壓縮後再存儲。讀取時須要通過自動解壓操做。
d:   即no dump,設定文件不能成爲dump程序的備份目標。
i:   設定文件不能被刪除、更名、設定連接關係,同時不能寫入或新增內容。i參數對於文件 系統的安全設置有很大幫助。
j:   即journal,設定此參數使得當經過 mount參數:data=ordered 或者 data=writeback 掛 載的文件系統,文件在寫入時會先被記錄(在journal中)。若是filesystem被設定參數爲 data=journal,則該參數自動失效。
s:   保密性地刪除文件或目錄,即硬盤空間被所有收回。
u:   與s相反,當設定爲u時,數據內容其實還存在磁盤中,能夠用於undeletion.

4、網絡管理

iptables

命令格式

iptables [-t table] 命令 [chain] [rules] [-j target]

【參數解釋】
table     表名:filter、nat、mangle、raw,後二者不經常使用
命令      對鏈的操做命令
            -P或–policy   定義默認策略
            -L或–list     查看iptables規則列表
            -A或—append   在規則列表的最後增長1條規則
            -I或–insert   在指定的位置插入1條規則
            -D或–delete   從規則列表中刪除1條規則
            -R或–replace  替換規則列表中的某條規則
            -F或–flush    刪除表中全部規則
            -Z或–zero     將表中數據包計數器和流量計數器歸零
chain     鏈名:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTIN

rules     規則,能夠說是匹配規則。
          分爲
            1. 【通用匹配】
             -s:  指定做爲源地址匹配,必須是IP,取反,就加一個!
             -d:  表示匹配目標地址
             -p:  用於匹配協議的(這裏的協議一般有3種,TCP/UDP/ICMP)
             -i    eth0:從這塊網卡流入的數據,流入通常用在INPUT和PREROUTING上
             -o    eth0:從這塊網卡流出的數據,流出通常在OUTPUT和POSTROUTING上

            2. 【擴展匹配】
                -p tcp:       TCP協議的擴展。通常有三種擴展
                --dport:      指定目標端口,--dport 21或者 --dport 21-23 (此時表示21,22,23),不能表示非連續端口
                --sport:      指定源端口

                --tcp-fiags:  TCP的標誌位(SYN,ACK,FIN,PSH,RST,URG)
                    對於它,通常要跟兩個參數:
                    1.檢查的標誌位
                    2.必須爲1的標誌位
                    --tcpflags syn,ack,fin,rst syn   =    --syn
                    表示檢查這4個位,這4個位中syn必須爲1,其餘的必須爲0。因此這個意思就是用於檢測三次握手的第一次包的。對於這種專門匹配第一包的SYN爲1的包,還有一種簡寫方式,叫作--syn

                -p udp:       UDP協議的擴展
                    --dport
                    --sport

                -p icmp:      icmp數據報文的擴展
                    --icmp-type:
                    echo-request(請求回顯),      通常用8 來表示
                    echo-reply (響應的數據包)   通常用0來表示

參考文章

  1. ubuntu配置iptables
  2. netfilter/iptables全攻略
  3. iptables詳解

開放端口

# 在filter表裏添加規則
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8500 -j ACCEPT

# 重啓iptables
$ service iptables restart

# 監聽端口
$ nc -lp 8500 &

# 檢測是否開啓完成
$ netstat -tunl|grep 8500

端口轉發

# 按開放端口配置好後纔可轉發。
# 假設咱們如今要將36.250.x.x的8500端口轉發到192.168.2.55的80端口上

# filter表
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8500 -j ACCEPT

# nat表
-A PREROUTING -d 36.250.x.x -m tcp -p tcp --dport 8500 -j DNAT --to-destination 192.168.2.55:80

# 測試一下,在瀏覽器輸入 36.250.x.x:8500
# 就能夠看到咱們的內容了。

ip 命令

# ubuntu 臨時修改網絡,須要刷新一下
ip addr flush dev ens4

6、Shell命令

6.1 定時任務

命令執行順序控制

一、&&
方式:command1 && command2
若是command1執行成功,則執行command2

二、||
方式:command1 || command2
若是command1執行失敗,則執行command2

管道通訊

$ ps aux | grep mysqld

# 將ps aux獲得的結果傳給grep命令

nohup

通常在一終端或一個SSH鏈接運行一個軟件或服務,該軟件或服務的生命週期受終端/SSH鏈接影響,關閉後就自動也中止。
爲了將程序放在後臺運行,可使用nohup命令

$ nohup 程序路徑/程序名 &

alias

給經常使用的長命令取別名,變成短的,提升效率

# 查看現有別名
$ alias

# 添加別名
$ alias catgra='cat /var/lib/mysql/grastate.dat'

# 取消別名狀態
# 好比咱們的ll,系統默認給咱們加了別名,ll='ls -l --color=auto',也就是加上顏色效果
# 若是咱們不要顏色效果,能夠這樣使用轉義符,使用原生的命令
$ \ll somedir

column

一個很好用的命令,常常用於管道符後,進行文本展現

$ mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,size=3996196k,nr_inodes=999049,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)

# 使用後,t是按表格的形式展現,-s "@" 指定分割符
$ mount | column -t
sysfs                                on  /sys                        type  sysfs       (rw,nosuid,nodev,noexec,relatime)
proc                                 on  /proc                       type  proc        (rw,nosuid,nodev,noexec,relatime)
devtmpfs                             on  /dev                        type  devtmpfs    (rw,nosuid,size=3996196k,nr_inodes=999049,mode=755)
securityfs                           on  /sys/kernel/security        type  securityfs  (rw,nosuid,nodev,noexec,relatime)

重定向

>/dev/null 2>&1 &

分析下這個語句
command >/dev/null 2>&1 &
執行command後的標準輸出不在屏幕顯示,而是直接丟入/dev/null 垃圾桶,若是有錯誤輸出,則重定向到標準輸出。最後&表示在後臺運行。

7、業務相關

查看虛機的CPU是否支持虛擬化

egrep '(vmx|svm)' /proc/cpuinfo
# 若是有標紅的vmx(Intel)、svm(AMD)說明就支持,virtualbox不支持(坑)

# 或者直接查看
vi /proc/cpuinfo

查看模塊是否加載

lsmod | grep kvm

開啓服務

# CentOS 6
service xx start

# CentOS 7
systemctl start libvirtd

開機自啓動服務

CentOS 6
chkconfig acpid on

# CentOS 7
systemctl enable libvirtd

開啓shh登陸,修改端口等配置

vi /etc/ssh/sshd_config
-------------------------------------
Port 57891
PasswordAuthentication yes
ClientAliveInterval 60
ClientAliveCountMax 10

關閉防火牆

setenforce 0
service firewalld stop
chkconfig firewalld off

換yum源

yum install wget

mv /etc/yum.repos.d/CentOS-Base.repo /root/

# 下載yum源,這裏是CentOS6的,請下載對應版本
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo

yum clean all
yum makecache

推薦閱讀

相關文章
相關標籤/搜索