centos 基礎知識

1.查看當前網卡支持速率
ethtool eth1 | grep ‘supported link modes’
實際速率:Speed 100M/s
2.查看網卡驅動:
lspci -vvv or ethtool -i ethx
3.查看網卡型號:
lspci -vvv | grep Eth
4.有些時候,可能某些設備(一般是 CD-ROM)正忙或沒法響應。此時,大多數用戶的解決辦法是從新啓動計算機。咱們大可沒必要這麼作。例如,若是 umount /dev/hdc 失敗的話,您能夠試試「lazy」 umount。語法十分簡單:node

umount -l <掛載點|設備>


5.系統位數[root@localhost ~]# uname -m i686
系統版本[root@localhost ~]# uname -s Linux
內核版本[root@localhost ~]# uname -r 2.6.18-4-64

6.查看173.16.0.200在被ping時的實際鏈接,使用如下命令:
1. netstat -s |more
2.netstat = ss = cat /proc/net/tcpmysql


7.ps --no-header -C nginxlinux

ps -eo comm,pcpu | tail -n +2 # tail -n +2 用於剝除頭部的COMMAND和%CPU。nginx

-o 參數git


8.修改Linux系統時間 date -s time| clock -w(把系統時間寫入CMOS)

9.Linux系統語言設置:
目前大多數的linux distributions已經都是支持萬國碼(UTF-8),也都支持大部分國家的語言。
這主要是i18n文件。
可以使用locale -a命令查看linux系統支持多少語言。
可以使用locale命令查看當前系統的語言環境。
[root@nis1 ~]# locale
LANG=zh_CN.UTF-8  ##主語言環境
LC_CTYPE="zh_CN.UTF-8"  ##字符(文字)識別的編碼
LC_NUMERIC="zh_CN.UTF-8"  ##數字系統的顯示信息
LC_TIME="zh_CN.UTF-8"  ##時間系統的顯示數據
LC_COLLATE="zh_CN.UTF-8"  ##字符串的比較與排序等
LC_MONETARY="zh_CN.UTF-8"  ##貨幣格式顯示
LC_MESSAGES="zh_CN.UTF-8"  ##信息顯示的內容如菜單、錯誤信息等
LC_ALL=  ##總體語言環境
通常來講:設置LANG和LC_AL便可,其餘變量也會隨之而改變。
可以使用以下命令臨時調整系統字符集爲英語:
export LC_ALL=en_US-UTF-8
2.設置語言相關的幾個文件:
/usr/lib/locale/:目錄存放locale列出的語言文件。
/etc/sysconfig/i18n:是設置系統字符集的的文件。
無論你裝的是中文版,仍是英文版.刪掉原來的設置,把下面的拷貝過去。
便可將系統的語言設置爲簡體中GB18030字符集。
vi /etc/syscnfig/i18n
LANG="zh_CN.GB18030"
SUPPORTED="zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en"
SYSFONT="latarcyrheb-sun16"
注:
第一行設置當前系統語言環境
第二行代表系統預設了哪些語言支持,不在項目中的語言不能正常顯示
第三行定義控制檯終端字體,文本(tty終端)登陸的時候顯示的字體就是這個 latarcyrheb-

10.當前服務器系統的版本

cat /proc/version | grep -Eqi ‘centos | red hat | redhat’
lsb_release -a
cat /etc/issue

11.查看網卡速度:ethtool eth0

12.Linux系統啓動過程:

13.route -n 中metric是度量的意思即路由計跳數

14.在/var/lib/dhclient/裏面確認到了dhcp服務器的ip

15.在vim的命令模式下:set ff可看到dos或unix的字樣,若是的確是dos格式的, 那麼用set ff=unix把它強制爲unix格式的,,而後存盤退出後就可運行。

16.zip -r:遞歸處理,將指定目錄下的全部文件和子目錄一併處理;-q:不顯示指令執行過程;

17.scp 源文件:指定要複製的源文件。 目標文件:目標文件。格式爲user@host:filename(文件名爲目標文件的名稱)
-r 目錄

18.查看設備UUID:ls -l /dev/disk/by-uuid/

19.(or type Control-D to continue):/etc/fstab與現有存儲不一直致使文件系統掛載問題
文件系統是隻讀模式,若須要修改/etc/fstab文件,則須要執行:mount -o remount rw /

20.while循環中執行效率最高,最經常使用的方法。
 
function while_read_LINE_bottm(){
 While read LINE
 do
echo $LINE
done  < $FILENAME
}
 
註釋:我習慣把這種方式叫作read釜底抽薪,由於這種方式在結束的時候須要執行文件,就好像是執行完的時候再把文件讀進去同樣。

21.iptables

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
2    ACCEPT     icmp --  anywhere             anywhere
3    ACCEPT     icmp --  anywhere             anywhere            limit: avg 1/sec burst 10
4    DROP       tcp  --  192.168.1.206        anywhere            tcp dpt:ssh #conn/32 > 2
5    ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh
6    DROP       all  --  anywhere             anywhere

由上而下,逐條匹配。
四、5對換,優先被5匹配到了,就直接執行容許了,沒有鏈接數限制正則表達式

-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
# 這兩條的意思是在INPUT表和FORWARD表中拒絕全部其餘不符合上述任何一條規則的數據包。而且發送一條host prohibited的消息給被拒絕的主機,通常放在末尾。

防火牆日誌開啓
vim /etc/rsyslog.conf
kern.* /var/log/iptables.log

 -m multiport --dports 1863,443,110,80,25
LOG --log-level INFO --log-prefix 「前綴」
-p icmp -m icmp --icmp-type echo-reply 迴應 我方ping其餘服務器接受來自其餘服務器的迴應
-p icmp -m icmp --icmp-type echo-request 請求 即別的機器向我方放送icmp請求,即其餘機器ping我方

22.tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap(1)tcp: ip icmp arp rarp 和 tcp、udp、icmp這些選項等都要放到第一個參數的位置,用來過濾數據報的類型
(2)-i eth1 : 只抓通過接口eth1的包
(3)-t : 不顯示時間戳
(4)-s 0 : 抓取數據包時默認抓取長度爲68字節。加上-S 0 後能夠抓到完整的數據包
(5)-c 100 : 只抓取100個數據包
(6)dst port ! 22 : 不抓取目標端口是22的數據包
(7)src net 192.168.1.0/24 : 數據包的源網絡地址爲192.168.1.0/24
(8)-w ./target.cap : 保存成cap文件,方便用ethereal(即wireshark)分析


23.vim中在命令模式下用?和/來查找內容,n(下一個)N(上一個)

23.組播地址:01-00-5e打頭
廣播幀:FF-FF-FF-FF-FF-FF

24.mysql鏈接方式:
1.socket
mv /var/lib/mysql/mysql.sock /var/lib/mysql.sock.bak
mysql -uroot -p1233456
ERROR Can't connect to local MYSQL server through socket

mysql -uroot -p123456 -h 127.0.0.1

2.TCP/IP


25.tar.xz包解壓縮,解包
xz -d **.tar.xz
tar -xv -f **.tar 或者 tar -Jxv -f **.tar.xz(大寫的J)

26.file /boot/initramfs
mv /boot/initramfs /tmp/initramfs.文件類型
再用相應的解壓命令

27.抓取ip地址
ifconfig | grep -i ‘bcast’ | awk -F ‘[ :]+’ ‘{print $4}’
bcast:表示廣播地址

28.Linux下cpu的工做量度
命令:w或top或uptime
load average:1分鐘 5分鐘 15分鐘
load average若是小於或等於1, 那麼就意味着系統會立刻處理. 若是大於
1, 那麼就意味着進程須要排隊. 若是大於3, 那麼就意味着, 系統性能已經
顯著降低了.
一般咱們先看15分鐘load,若是load很高,再看1分鐘和5分鐘負載,查看是否有降低趨勢。(三個值的大小通常不能大於邏輯CPU的個數)
1分鐘負載值 > 1,那麼咱們不用擔憂,可是若是15分鐘負載都超過1,咱們要趕忙看看發生了什麼事情。因此咱們要根據實際狀況查看這三個值。


29.CPU個數,核數,邏輯數:
# 查看物理CPU個數
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l

# 查看每一個物理CPU中core的個數(即核數)
cat /proc/cpuinfo| grep "cpu cores"| uniq

# 查看邏輯CPU的個數=cpu個數*cpu核數 不等於的話,即CPU支持超線程。
top命令下輸入:1也可查看邏輯cpu個數
cat /proc/cpuinfo| grep "processor"| wc -l

30.內存
free

31.mv file.txt file1.txt inode不變

32.ping -c1 -w1 中-c1是指ping的包的個數,-w是指執行的最後期限(timeout),也就是執行的時間,單位爲秒

33.網卡型號:lspci | grep -i ether
查看網卡是否正常鏈接:mii-tool

34.主機名查詢靜態表:/etc/hosts
主機名修改:/etc/sysconfig/network
分爲三部分,用空格隔開
一ip 二 主機名或域名 三主機別名

35.查看服務器網絡鏈接狀態:
netstat -an | awk ‘/^tcp/{++S[$NF]}END{for (a in S)print a,S[a]}’

httpd佔用內存的平均數:
ps aux|grep -v grep|awk '/httpd/{sum+=$6;n++};END{print sum/n}'


36.ctrl+c 中斷前臺進程(kill -2)
kill -9 強制刪除程序
killall

37.永久添加靜態路由:/etc/sysconfig/network-scripts/route-eth0

38./etc/init.d/network 腳本會啓動ifcfg開頭的全部網絡文件配置
故ifcfg-eth1.bak也會啓動

39.traceroute www.baidu.com 能夠用來看默認網關設置是否生效;

40.修改最大文件打開數:
一 vim /etc/security/limits.conf
*soft nofile 32768
*hard nofile 65535

二 vim /etc/rc.local
ulimit -SHn 65535

41.sed a 在當前行添加至下一行
sed ‘na xxxx’ 在第n+1行下添加xxx

42.free 可用的內存:+cache/buffers
便可用的內存=free+cache+buffers

43. shift 2 這行有意思,有了這個就能夠實現腳本參數的功能,
shift 2 的意思是將輸入的參數左移2位,即$1,$2先清空,$3賦值給$1,$4賦值給$2。
shift n後,前n位參數都會被銷燬,故傳入參數個數能夠大於9

until [ -z 「$1」]
do
echo -n 「${1} 」
shift
done


44.每兩個小時 
0 */2 * * * echo "Have a break now." >> /tmp/test.txt  

45.sort
-r 倒序
-n 已數字進行排序
-t 指定分隔符
-k 指定要排序的列數

45.sed

n 輸出模式空間行,讀取下一行替換當前模式空間的行,執行下一條處理命令而非第一條命令。
N 讀入下一行,追加到模式空間行後面,此時模式空間有兩行。
h 把模式空間裏的行拷貝到暫存空間。
H 把模式空間裏的行追加到暫存空間。
g 用暫存空間的內容替換模式空間的行。
G 把暫存空間的內容追加到模式空間的行後。
x 將暫存空間的內容於模式空間裏的當前行互換。
D 表示清除模式空間中的從模式頭到第一個\n之間的內容(能夠簡單的理解爲清除模式空間中第一行),若是清除後模式空間仍有剩餘行,則執行D以前的命令(如以前有多個命令需依次執行),再執行D命令,如此循環直到不能往模式空間中追加新行爲止。注意D有循環的意思在裏面
d 清除模式空間全部匹配的行
P 打印模式空間中的從模式頭到第一個\n之間的內容

114.113.144.2:
19ms
19ms
19ms
36ms
22ms
19ms
18ms
218.61.204.73:
0ms
0ms
0ms
0ms
0ms
0ms
0ms


sed ‘/:$/{:a;N;/\n.*ms/s/\n/ /;ta;P;D}‘ file 

114.113.144.2: 19ms 19ms 19ms 36ms 22ms 19ms 18ms
218.61.204.73: 0ms 0ms 0ms 0ms 0ms 0ms 0ms

思路使用t標籤,有條件跳轉
匹配以:結尾的行,而後執行N命令讀入下一行
此時模式空間內容爲
114.113.114.2:\n19ms
假如匹配\n.*ms,就執行替換,將\n替換成空格
此時模式空間內容爲
114.113.114.2: 19ms
替換執行成功後,知足條件執行t標籤,跳到a出繼續執行
直到讀到218.61.204.73: 不知足匹配,也就不執行\n替換空格的命令了,執行後面的命令P;D



one 1 one 1
two 1 two 2
three 1 three 3
four 1 four 4

sed 「=」 filename | sed 「N;s/\n/ /;s/\(. \)\(.*\)\( *1)\/\2\1/」


46.運算符 | ^
(|)OR是或運算,A OR B的結果:當A、B中只要有一個或者兩個都爲1時,結果爲1,不然爲0
(^)XOR是異或運算,A XOR B的結果:當A、B兩個不一樣時結果爲1,不然爲0sql

  POSIX兼容的應用程序使用的即是字典中的字母排列順序,而不是用ASCII碼中的字符排列順序。shell

  字母排序:aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZvim

  故ls [A-Z]*會顯示小寫字母的文件名,可以使用POSIX字符類來達到所需效果ls [[:upper:]]。centos

可以使用export LANG=POSIX來改變系統支持的字符順序,永久性維持該變化vim ~.bashrc.

POXIS字符類

[:alnum:]	字母字符和數字字符;在ASCII碼中,與[A-Za-z0-9]等效
[:word:]	基本與[:alnum:]同樣,只是多了一個下劃線字符(_)
[:alpha:]	字母字符;在ASCII中,等效於[A-Za-z]
[:blank:]	包括空格和製表符
[:cntrl:]	ASCII控制碼;包括ASCII字符0~31以及127
[:digit:]	數字0~9
[:graph:]	可見字符;在ASCII中,包括字符33~126
[:lower:]	小寫字母
[:punct:]	標點符號字符;在ASCII中,與[-!"#$%&'()*+,./:;<=>?@[\\\]_`{|}~]等效
[:print:]	可打印字符;包括[:graph:]中的全部字符再加上空格字符
[:space:]	空白字符如空格符、製表符、回車符、換行符、垂直製表符以及換頁符。在ASCII中,等效爲[ \t\r\n\v\f]
[:upper:]	大寫字母
[:xdigit:]	用於表示十六進制的字符;在ASCII中,與[0-9A-Fa-f]等效

元字符是一種Perl風格的正則表達式,只有一部分文本處理工具支持它,可是POSIX字符類以及普通的正則表達式都是被廣大支持的。

元字符:


47.awk
系統變量

賦值
1.awk script variable=value inputfile
2.-v BEGIN以前賦值

FS:定義字段分隔符(默認空格);
OFS:字段輸出分隔符
RS:記錄分隔符(默認換行符);
ORS:記錄輸出分隔符;
NF:表示輸入記錄的字段數($NF表示最後一個字段;NF==6{print $1,$6}只有具備6個字段的記錄才能被打印);
NR:記錄的編號(/^root/&&NR>=20,20行以後而且root開頭);


48.變量默認值
${parameter-default} 或 ${parameter:-default} 但parameter沒有被聲明就使用默認值
當parameter被賦null時:-和-纔會有區別

$_是一個特殊變量, 表明最後一個命令的最後一個參數.

49.a++ 的含義是先賦值後相加
++a的含義是先相加後賦值

50.單詞邊界
轉義的尖括號\<..\>用於匹配單詞的邊界
grep 「\<the\>」 file.txt 之匹配the,不匹配them等含the的單詞

51.tar -xvfp
-p 保證文件全部權和文件屬性
-f: 使用檔案名字,切記,這個參數是最後一個參數,後面只能接檔案名。
# tar -cf all.tar *.jpg 參數-f是必須的
這條命令是將全部.jpg的文件打成一個名爲all.tar的包。-c是表示產生新的包,-f指定包的文件名。

52.使用[[ ... ]]條件判斷結構, 而不是[ ... ], 可以防止腳本中的許多邏輯錯誤. 好比,
&&, ||, <, 和>操做符可以正常存在於[[ ]]條件判斷結構中, 可是若是出如今[ ]結構中
的話, 會報錯.如:if [[ $condition1 || $condition2 ]]。

53.在if後面也不必定非得是test命令或者是用於條件判斷的中括號結構( [ ] 或 [[ ]] ).
"if COMMAND"結構將會返回COMMAND的退出狀態碼。

54.
: ${HOSTNAME?}
echo $?
用來測試HOSTANAME這個環境變量是否已被賦值

: ${1?"Usage : $0 argument"}
若是沒有提供命令行參數的話, 那麼腳本就在這裏退出了

55.declare -r var 只讀
declare -i var 整數 被賦值爲非整數時變量值爲0
-a 數組(array)

若是把一個變量指定爲整型的話, 那麼即便沒有expr或者let命令, 也容許使用特定的算術運算.

56.a=b
c=d
b=$c
echo 「$b」
echo 「\「a\」 now」 ;eval echo \$$a

57.continue 跳過本次循環的剩餘命令
break 直接跳出整個循環

58.$IFS 內部域分隔符 一搬都會將 \n(換行符) 包含在它的空白字符集合中

59.echo 2222 | gawk --re-interval '/2{3}/'
2222

60.間接引用
變量變成命令

eval 將表達式中的參數, 或者表達式列表, 組合起來, 而後評價它們(譯者注: 一般用來執行).
killppp="eval kill -9 `ps ax | awk /ppp/ {print $1}`"
$killppp 如今killppp變成了一個命令

函數中的間接引用

func ()
{
echo "$1"
}

message=hello
hello=Goodbye

func "$message" #hello
func "${!message}" #Goodbye

61.source
多個腳本須要引用相同的數據, 或者須要使用函數庫的狀況下, 這個命令很是有用.

62.wait
使用wait命令來防止在後臺做業沒完成(這會產生一個孤兒進程)以前退出腳本

63./var/lock/subsys
不少程序須要判斷是否當前已經有一個實例在運行,這個目錄就是讓程序判斷是否有實例運行的標誌,好比說xinetd,若是存在這個文件,表示已經有xinetd在運行了,不然就是沒有,固然程序裏面還要有相應的判斷措施來真正肯定是否有實例在運行。


64.xargs -i kill {}
-i是替換字符串選項,替換爲大括號
-nx 每行x個字符

65.awk
substr(string,posittion,length) 返回在字符串string中從position開始的長度爲length的字符
index(string,char) 返回char在字符串string中的位置
在awk的腳本中沒必要加入'號
$0 所有字段

66.
使用$*不多是正確的選擇。$@可以處理空格參數,並且參數間的空格也能正確的處理。使用$@時應該用雙引號括起來,像」$@」這樣。

67.雙單引號
[root@test] a=55
[root@test] echo $a
55
[root@test] echo '$a'
$a
[root@test] echo ''$a'' #注意此處是兩個單引不是一個雙引
55

68.在以普通用戶打開的vim當中保存一個root用戶文件

:w !sudo tee %

這題目讀起來糾結,實際上是很常見的,經常忘記了sudo就直接用vim編輯/etc內的文件,(不過也不必定,vim發現保存的文件沒法保存時候會 提示)等編輯好了,保存時候才發現沒權限。曲線方法是先保存個臨時文件,退出後再sudo cp回去。不過實際上在vim裏面能夠直接完成這個過程的,命令就是如此。

查閱vim的文檔(輸入:help :w),會提到命令:w!{cmd},讓vim執行一個外部命令{cmd},而後把當前緩衝區的內容從stdin傳入。

tee是一個把stdin保存到文件的小工具。

而%,是vim當中一個只讀寄存器的名字,總保存着當前編輯文件的文件路徑。

因此執行這個命令,就至關於從vim外部修改了當前編輯的文件,好完工。

將製表符轉換爲空格:
cat text | tr '\t' ' '


69."$*"將全部的參數解釋成一個字符串,而"$@"是一個參數數組

70.建立-f的目錄
mkdir -f #不成功,由於-f會被mkdir看成選項來解析,這時就可使用
# mkdir -- -f 這樣-f就不會被做爲選項。

71.echo "$IFS"|od -b/-c
直接輸出IFS是看不到值的,轉化爲二進制或字符就能夠了

72.if condition
then
function1
fi

function1
在知足條件下函數function1纔會運行

73.[! -f "$file"]
文件存在返回false
文件不存在返回true
[! -f "$file"] || false才執行,即文件存在才執行
&& true才執行,即文件不存在才執行

74.後臺運行 &
當後臺運行的命令有stdout的時候,須要敲ENTER纔會結束掛起,在後臺運行命令後加上wait命令能夠解決這個問題,
將運行命令的輸出重定向到其餘文件也能夠解決這個問題。

#!/bin/bash
#test.sh
ls -l &
echo "Done"

ls -l &
wait
echo "Done"

ls -l > /dev/null &
echo "Done"

75.max-file 表示系統級別的可以打開的文件句柄的數量。是對整個系統的限制,並非針對用戶的。
# vim /etc/sysctl.conf
fs.file-max = 2000000
#vim /proc/sys/fs/file-max
794168
ulimit -n 控制進程級別可以打開的文件句柄的數量。提供對shell及其啓動的進程的可用文件句柄的控制。這是進程級別的。
# vim /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535

#echo "ulimit -n 65536" >> /etc/profile
#echo "ulimit -n 65536" >> /etc/profile

76.grep
查詢目錄下具備該詞彙的文件:grep -Hrn 「value」 。
-H 在顯示符合範本樣式的那一列以前,標示該列的文件名稱。
-r recurse 遞歸查詢。
-n 行號。

比較文本差別:grep -Fvx -f file1.txt file2.txt
-F 將範本樣式視爲固定字符串的列表。
-v 反轉查詢。
-x 只顯示全列符合的列。
-f<範本文件> 指定範本文件,其內容有一個或多個範本樣式,讓grep查找符合範本條件的文件內容,格式爲每一列的範本樣式。

grep與命令格式: grep -E "a.*b" file,ab條件同時成立,而grep或命令的格式爲:grep -E "a|b" file,ab兩個條件有一個成當即可。
 

77.代理上網

  vim /etc/profile

  添加下面內容

  http_proxy = http://username:password@yourproxy:8080/
  ftp_proxy = http://username:password@yourproxy:8080/
  export http_proxy
  export ftp_proxy

78.生成1-100的隨機數

declare -i number=$RANDOM*100/32767; echo $number

79.用vi/vim或sed -i 修改文件會致使文件的inode發生改變。

80.ssh -oBatchMode=yes -oConnectTimeout=5 -oStrictHostKeyChecking=no "command|command" 遠程批處理任務。

81.cat /proc/filesystems 查看服務器支持的文件系統。

相關文章
相關標籤/搜索