Linux實(shí)戰(zhàn)技巧

常用命令

adduser

$ adduser eagle
$ passwd eagle            # ur password for eagle user
# 賦予用戶(hù)可以 sudo的權(quán)限
$ chmod u+w /etc/sudoers
$ vim /etc/sudoers
  # 找到 `root ALL=(ALL) ALL`這行甜奄,并在下面添加 eagle用戶(hù)
  eagle    ALL=(ALL)    ALL
$ chmod u-w /etc/sudoers
# 切換到 eagle用戶(hù)
$ su - eagle

chown

# 軟鏈接
$ chown -h superset:superset superset
# 所有子目錄及文件
$ chown -R superset:superset superset-0.15.4

date

# 該時(shí)間戳格式為 13位毫秒級(jí)別
$ echo "`date -d '2017-04-21 10:00:00' +%s`000"

du

# 文件大小
$ du -h /home/ --max-depth=1
  3.1G  /home/eagle
  40.8G /home/
# 同理陷谱,使用 `ll -h`也可以得到文件的大小
$ ll -h
  總用量 546M
  -rw-rw-r-- 1 zookeeper zookeeper  41M 8月  31 10:08 zookeeper.log
  -rw-rw-r-- 1 zookeeper zookeeper 101M 8月  31 00:06 zookeeper.log.1
  -rw-rw-r-- 1 zookeeper zookeeper 101M 8月  29 11:39 zookeeper.log.2
  -rw-rw-r-- 1 zookeeper zookeeper 101M 8月  27 16:01 zookeeper.log.3
  -rw-rw-r-- 1 zookeeper zookeeper 101M 8月  25 20:38 zookeeper.log.4
  -rw-rw-r-- 1 zookeeper zookeeper 101M 8月  24 00:34 zookeeper.log.5
  -rw-rw-r-- 1 zookeeper zookeeper 4.2M 8月  31 09:35 zookeeper.out

grep

# 或操作
$ grep -E 'bin|etc'
$ egrep 'bin|etc'
$ awk '/bin|etc/'
# 與操作
$ grep bin | grep etc
# 不區(qū)分大小寫(xiě)
$ grep -i BIN       # (bin/sbin)
# 全詞匹配
$ grep -w bin       # (bin)
# 匹配催训,并指定顯示多少行上下文
$ grep -C 1 bin     # (bin/boot root/sbin/script)
# 過(guò)濾腳本輸出 (|& 相當(dāng)于 stdout + stderr )
$ zkServer.sh status |& grep Mode
  Mode: follower

lsof

# 系統(tǒng)級(jí) 監(jiān)控 & 診斷工具
# 指定進(jìn)程號(hào),可以查看該進(jìn)程打開(kāi)的文件
$ lsof -p <pid>

nmon

# 獲得幫助文檔
$ nmon_x86_64_centos6 -h
# 不同的操作系統(tǒng)乐严,可能 nmon命令不一樣
# -f 使得 xxx.nmon文件名包含文件創(chuàng)建的時(shí)間
# -N 指定需要對(duì) NFS活動(dòng)情況進(jìn)行監(jiān)控
# -m 指定生成的 xxx.nmon存放的目錄
# -s 指定相隔多少秒诈泼,做一次監(jiān)控
# -c 指定采集多少次監(jiān)控?cái)?shù)據(jù)膝迎,生成一個(gè) xxx.nmon文件
$ /nmon/nmon_x86_64_rhel6 -f -N -m /nmon -s 60 -c 1440
$ /nmon/nmon_x86_64_centos6 -f -N -m /nmon -s 60 -c 1440
# 轉(zhuǎn)換 .nmon文件為 .csv文件
$ sort yuzhouwan-prd3_170831_0001.nmon > yuzhouwan-prd3_170831_0001.csv
# 查看監(jiān)控?cái)?shù)據(jù)
# 在 https://www.ibm.com/developerworks/community/wikis/home?lang=en#!/wiki/Power%20Systems/page/nmon_analyser 頁(yè)面攘须,下載 nmon analyser v52_1.xlsm文件
# 打開(kāi)后,會(huì)提示"啟用宏定義"圣贸,點(diǎn)擊確定
# 一共會(huì)有 Analyser/Settings/Release Notes 三個(gè) sheet挚歧,跳轉(zhuǎn)到第一個(gè) Analyser里
# 點(diǎn)擊 "Analyze nmon data"按鈕,選擇 yuzhouwan-prd3_170831_0001.csv文件
# 會(huì)生成一個(gè) yuzhouwan-prd3_170831_0001.nmon.xlsx吁峻,并直接打開(kāi)
  • 系統(tǒng)資源實(shí)時(shí)監(jiān)控
$ /nmon/nmon_x86_64_centos6
  # 常用組合:nml
  lnmonq14g---------------------Hostname=yuzhouwan-prd3-Refresh= 2secs ---11:04.35-----------|
  | CPU +-------------------------------------------------------------------------+        |
  |100%-|                                           |                                      |
  | 95%-|                                           |                                      | # 為節(jié)省空間 此處滑负,省去25%~90%
  | 20%-|                                           |                                      |
  | 15%-|                                           |                                      |
  | 10%-|              ss                           |                                      |
  |  5%-|UUUUsUUUUsUUsUUUUwUUssUssUUssUUUsUUsUUUUUsU|                                      |
  |     +--------------------User---------System----+----Wait---------------------+        |
  | Memory Stats --------------------------------------------------------------------------|
  |                RAM     High       Low     Swap    Page Size=4 KB                       |
  | Total MB    129013.3     -0.0     -0.0  10240.0                                        |
  | Free  MB     584.1     -0.0     -0.0  10240.0                                          |
  | Free Percent     0.5%   100.0%   100.0%   100.0%                                       |
  |             MB                  MB                  MB                                 |
  |                      Cached= 76656.7     Active= 54649.3                               |
  | Buffers=  4908.1 Swapcached=     0.0  Inactive = 68809.5                               |
  | Dirty  =   131.6 Writeback =     0.0  Mapped   =    75.1                               |
  | Slab   =  4059.3 Commit_AS = 47663.8 PageTables=    96.6                               |
  | Network I/O ---------------------------------------------------------------------------|
  |I/F Name Recv=KB/s Trans=KB/s packin packout insize outsize Peak->Recv Trans            |
  |      lo  1044.0  1044.0     335.5    335.5  3186.8 3186.8     8639.4  8639.4           |
  |    eth0  5262.7  1168.7    5999.0   2762.1   898.3  433.3    10531.6 43312.1           |
  |    eth1     0.0     0.0    0.0     0.0     0.0    0.0        0.0     0.0               |
  |---------Warning: Some Statistics may not shown-----------------------------------------|

make

$ make -j<thread_num>
# 查看 CPU核數(shù)
$ cat /proc/cpuinfo | grep processor | wc -l
# 如果是兩個(gè)處理器的話(huà),一般 `-j2`可以達(dá)到最高效率 (某些進(jìn)程主要耗時(shí)是在 I/O上用含,并不能充分利用單個(gè) cpu的時(shí)間矮慕,則可以考慮 -j4)
# 一般的,使用 `thread_num = number_of_cores + 1`公式來(lái)計(jì)算即可

tar

# 壓縮
$ tar zcvf gc.tar.gz gc
# 解壓
$ tar zxvf gc.tar.gz

top

# 查看進(jìn)程內(nèi)線(xiàn)程資源消耗
$ top -Hp <pid>

tree

$ yum install tree -y
$ tree -L 1 /
  /
  ├── bin
  ├── usr
  └── var

rpm

$ rpm -i --badreloc --relocate /usr/java=/home/eagle/software/java jdk-7u80-linux-x64.rpm

rsync

# 軟鏈接啄骇、隱藏文件 等特殊文件的復(fù)制痴鳄,需要用 `rsync`命令而不能用 `scp`
$ rsync -avuz -e ssh eagle/ root@eagle:/home/eagle

ps

# 查看進(jìn)程的 啟動(dòng)時(shí)間 和 已運(yùn)行時(shí)長(zhǎng)
$ ps -eo pid,lstart,etime | grep <pid>
# 查看進(jìn)程分配內(nèi)存大小
# RSS (Resident Set Size) 常駐內(nèi)存集,表示該進(jìn)程分配的內(nèi)存大小
$ ps -e -o pid,rss

uname

$ uname -a
  Linux yuzhouwan 2.6.32-504.3.3.el6.centos.plus.x86_64 #1 SMP Wed Dec 17 01:21:03 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
# kernel version
$ uname -r
  2.6.32-504.3.3.el6.centos.plus.x86_64
# 具體含義: <內(nèi)核主版本>.<偶數(shù):穩(wěn)定版本/奇數(shù):開(kāi)發(fā)中版本>.<錯(cuò)誤修補(bǔ)的次數(shù)>-<?>

標(biāo)準(zhǔn)I/O

# 只輸出 腳本執(zhí)行異常信息
$ ./commands.sh 1>/dev/null 2>./error.log
# 完全不作輸出
$ ./commands.sh 1>/dev/null 2>&1

--

Shell編程

dirname

# 跳轉(zhuǎn)到缸夹,當(dāng)前腳本的文件目錄
cd `dirname $0`

.bashrc

# 在執(zhí)行腳本開(kāi)始的時(shí)候痪寻,載入環(huán)境變量
source ~/.bash_profile

cut string

# 將 string的前后各刪除一個(gè)字符
arr="[leader, election, zookeeper]"
arr=`echo ${arr:1:${#arr}-2}`    # leader, election, zookeeper

command

# 通過(guò) `command`命令,可以在腳本開(kāi)始執(zhí)行前虽惭,對(duì)需要的命令進(jìn)行check
command -v nc >/dev/null 2>&1 || {
    echo >&2 "I require nc but it's not installed. Try install..."; exit 1;
}

for loop

arr="leader, election, zookeeper"
OLD_IFS="$IFS"
IFS=$", "
arr=(${arr})
for a in ${arr[@]}; do
    echo ${a}
done
IFS="$OLD_IFS"
# 設(shè)置IFS槽华,前面 "實(shí)戰(zhàn)技巧 - IFS設(shè)置" 已經(jīng)提到了
# 下面介紹一種 `fori`的遍歷方式
# 0 /election
# 0 /leader
# 2 /zookeeper
sorted_num=`echo ${sorted} | wc -l`
if [ ${sorted_num} -gt ${top_n} ]; then
    sorted_num=${top_n}
fi
json="{"
for (( i=1; i<=${sorted_num}; i++ )); do
    line=`echo "${sorted}" | sed -n "${i} p"`
    json="${json}`echo ${line} | awk '{print $1}'`: `echo ${line} | awk '{print $2}'`"
    if [ ${i} -lt ${sorted_num} ]; then
        json="${json}, "
    fi
done
json="${json}}"
# 當(dāng)然,也有其他的實(shí)現(xiàn)方法趟妥,比如下面 `seq`這種
# 但是,`seq`這種方式需要注意兩點(diǎn)
# 第一點(diǎn)佣蓉,$(seq 1 1 10)里面的 初始值披摄、步長(zhǎng)亲雪、最大值 都必須要是 Integer類(lèi)型的,如果是通過(guò) shell外部傳參進(jìn)來(lái)的疚膊,需要做類(lèi)型轉(zhuǎn)換
# 第二點(diǎn)义辕,`seq`方式在 console里面執(zhí)行沒(méi)問(wèn)題,但是寓盗,寫(xiě)在 shell腳本里面灌砖,可能會(huì)失效 (原因尚不明確)
for i in $(seq 1 2 10); do echo "skip by 2 step, value is $i"; done

readlink

# 獲取到文件
$ readlink -f logs/zookeeper.log
  /home/zookeeper/logs/zookeeper.log

sed

# 先后從 zk_con里面,將 ":"冒號(hào)后面 和 "/"斜線(xiàn)之前的 都刪掉
zk_con=" /192.168.1.1:35632[1](queued=0,recved=146,sent=146,sid=0x25dd0c02a0a02a7,lop=PING,est=1503994626336,to=40000,lcxid=0x0,lzxid=0xffffffffffffffff,lresp=1503996561355,llat=0,minlat=0,avglat=0,maxlat=3)"
zk_con=`echo $zk_con | sed 's/:.*//g' | sed 's/.*\///g'` # 192.168.1.1

sort

# 通過(guò) `-k1`指定 針對(duì)第一列進(jìn)行排序
# 通過(guò) `-n`指定 針對(duì)數(shù)字進(jìn)行排序傀蚌,避免 9排在了 10前面
# 當(dāng)然也可以通過(guò)增加 `-r`基显,使得排序變成降序
# 如果,列與列之間的分隔符不是默認(rèn)的 \t善炫,則需要通過(guò) `-t`參數(shù)進(jìn)行指定

# 0 /election
# 0 /leader
# 2 /zookeeper
sorted=`echo ${result} | sort -k1 -n`

uniq

# 計(jì)數(shù)
echo -e "1\n1\n0" | uniq -c
# 2 1
# 1 0

exit 0

# 養(yǎng)成一個(gè)撩幽,腳本結(jié)尾,添加 `exit 0`的好習(xí)慣
exit 0

實(shí)用技巧

IFS設(shè)置

Shell 腳本中 IFS變量全稱(chēng) Internal Field Seprator 箩艺,內(nèi)部域分隔符

$ echo $IFS
 
$ echo "$IFS" | od -b
0000000 040 011 012 012
0000004
# 遍歷多行文本之前窜醉,設(shè)置 IFS為 \n
pids=`ps -ef | grep "${PROCESS_NAME}" | grep -v grep | grep -v "${SELF_NAME}" | awk '{print $2}'`
IFS=$'\n' read -rd '' -a pids <<<"$pids"
echo "pids: ${pids}"
for pid in "${pids}"; do
    echo "kill -9 ${pid}"
    kill -9 "${pid}"
done

每秒執(zhí)行一次

$ while true; do sleep 1; <command>; done

Windows相關(guān)

  • Windows下執(zhí)行 shell腳本
# 安裝 git
$ doskey bash="%GIT_HOME%\bin\bash.exe" $*
$ doskey sh="%GIT_HOME%\bin\sh.exe" $*
$ bash shell.sh
# 類(lèi)似的可以設(shè)置 `np`為 `notepad++`的快捷啟動(dòng)命令
$ doskey np=D:\apps\Notepad++\notepad++.exe $*

  • Cmd設(shè)置 Proxy
$ set http_proxy=http://your_proxy:your_port
$ set http_proxy=http://username:password@your_proxy:your_port
$ set https_proxy=https://your_proxy:your_port
$ set https_proxy=https://username:password@your_proxy:your_port

優(yōu)化實(shí)戰(zhàn)

關(guān)閉Swappiness

$ cat /proc/sys/vm/swappiness
  # default: 60
  # memory first: 0
  # swap first: 100
# 使得 swappiness設(shè)置永久生效
$ vim /etc/sysctl.conf
  vm.swappiness=10
# 可以配合 JVM中的 `-XX:+AlwaysPreTouch`參數(shù),在進(jìn)程啟動(dòng)的時(shí)候艺谆,讓 jvm通過(guò) demand-zeroed方式將內(nèi)存一次分配到位榨惰,提高 daemon常駐進(jìn)程性能

控制Overcommit

$ cat /proc/sys/vm/overcommit_memory
  # 0: 表示內(nèi)核將檢查是否有足夠的可用內(nèi)存供應(yīng)用進(jìn)程使用
  #    如果有足夠的可用內(nèi)存,內(nèi)存申請(qǐng)?jiān)试S静汤;否則琅催,內(nèi)存申請(qǐng)失敗,并把錯(cuò)誤返回給應(yīng)用進(jìn)程
  # 1: 表示內(nèi)核允許分配所有的物理內(nèi)存撒妈,而不管當(dāng)前的內(nèi)存狀態(tài)如何
  # 2: 表示內(nèi)核允許分配超過(guò)所有物理內(nèi)存和交換空間總和的內(nèi)存

禁用透明巨頁(yè)

  • Page Size
$ getconf PAGE_SIZE
  4096
  • Huge Page Size
$ cat /proc/meminfo | grep Hugepagesize
  Hugepagesize:       2048 kB
  • Transparent Huge Pages
$ cat /sys/kernel/mm/transparent_hugepage/enabled
  [always] madvise never
$ echo never > /sys/kernel/mm/transparent_hugepage/enabled
$ echo never > /sys/kernel/mm/transparent_hugepage/defrag
# Redhat的相關(guān)目錄: /sys/kernel/mm/redhat_transparent_hugepage/
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末恢暖,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子狰右,更是在濱河造成了極大的恐慌孕豹,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件认轨,死亡現(xiàn)場(chǎng)離奇詭異璃诀,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)谷暮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén)蒿往,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人湿弦,你說(shuō)我怎么就攤上這事瓤漏。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵蔬充,是天一觀的道長(zhǎng)蝶俱。 經(jīng)常有香客問(wèn)我,道長(zhǎng)饥漫,這世上最難降的妖魔是什么榨呆? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮庸队,結(jié)果婚禮上积蜻,老公的妹妹穿的比我還像新娘。我一直安慰自己彻消,他們只是感情好竿拆,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著证膨,像睡著了一般如输。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上央勒,一...
    開(kāi)封第一講書(shū)人閱讀 49,166評(píng)論 1 284
  • 那天不见,我揣著相機(jī)與錄音,去河邊找鬼崔步。 笑死稳吮,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的井濒。 我是一名探鬼主播灶似,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼瑞你!你這毒婦竟也來(lái)了酪惭?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤者甲,失蹤者是張志新(化名)和其女友劉穎春感,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體虏缸,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鲫懒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了刽辙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片窥岩。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖宰缤,靈堂內(nèi)的尸體忽然破棺而出颂翼,到底是詐尸還是另有隱情晃洒,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布疚鲤,位于F島的核電站锥累,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏集歇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一语淘、第九天 我趴在偏房一處隱蔽的房頂上張望诲宇。 院中可真熱鬧,春花似錦惶翻、人聲如沸姑蓝。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)纺荧。三九已至,卻和暖如春颅筋,著一層夾襖步出監(jiān)牢的瞬間宙暇,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工议泵, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留占贫,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓先口,卻偏偏與公主長(zhǎng)得像型奥,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子碉京,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容

  • 命令行的藝術(shù) 前言 基礎(chǔ) 日常使用 文件及數(shù)據(jù)處理 系統(tǒng)調(diào)試 單行腳本 冷門(mén)但有用 僅限 OS X 系統(tǒng) 僅限 W...
    進(jìn)擊的諾基亞閱讀 3,840評(píng)論 0 19
  • linux資料總章2.1 1.0寫(xiě)的不好抱歉 但是2.0已經(jīng)改了很多 但是錯(cuò)誤還是無(wú)法避免 以后資料會(huì)慢慢更新 大...
    數(shù)據(jù)革命閱讀 12,135評(píng)論 2 34
  • 第1章 小試牛刀 $ 是普通用戶(hù)厢汹,# 表示管理員用戶(hù) root。 shebang:#!谐宙。sharp / hash ...
    巴喬書(shū)摘閱讀 6,326評(píng)論 1 4
  • 1.Linux下如何用命令查看實(shí)時(shí)日志(完整命令) tail -f 路徑.log查看前多少行 tai-200f 路...
    qianyewhy閱讀 2,252評(píng)論 0 11
  • http://www.cnblogs.com/yzadd/p/6437798.html
    AISpider閱讀 141評(píng)論 0 0