我的Linux手冊

linux.jpg

原文鏈接

基礎(chǔ)安裝

# CentOS
sudo yum install epel-release

命令行Tips

進程及端口

# 查看端口占用情況
netstat -ap | grep 端口號   # 查看某一個端口
netstat -ntlp
top -p 進程ID:查看進程的實時情況,包括內(nèi)存大小,內(nèi)存占用率、CPU占用率,運行時間
cat /proc/進程ID/status:查看進程詳細信息,包括線程數(shù),線程名稱,線程狀態(tài),占用內(nèi)存大小
pstree -p 進程ID:查看線程的進程數(shù)以及進程ID
lsof -i :端口號   # 查看端口占用情況,不僅能看到哪個進程開啟的端口,還能查看誰在使用該端口
lsof -i -n -P | egrep ':8000.+ESTABLISHED'   # 查看8000端口的連接列表
lsof -i -n -P | egrep -c ':8000.+ESTABLISHED' # 查看8000端口的連接數(shù)字

# 結(jié)束進程
kill -s 9 進程ID

查找與統(tǒng)計

ls -lR | grep "^-" | wc -l # 遞歸統(tǒng)計文件夾下所有文件的個數(shù)
wc -l: 統(tǒng)計行數(shù)
grep -c "詞語"   # 統(tǒng)計出現(xiàn)的次數(shù)
grep 字符串 文件名  # 在文件中查找某個字符串
grep ^字符串 文件名 # 在文件中查找以某字符串開始的行
grep [0-9] 文件名  # 在文件中查找包含數(shù)字的行
grep 字符串 -r 目錄 # 在特定目錄及其子目錄中的文件查找str
fdupes:快速查找重復(fù)文件
find / -name filename   # 精確查找某個文件
find / -name '*.txt'    # 模糊查找某個文件
find / -mmin -60    # 查找60分鐘內(nèi)修改的文章
find / -type d -mtime -1 # 查找1天內(nèi)修改過的文件夾(好吧,我用了rm -rf / 命令才知道的)

文件操作

# 壓縮
tar -czvf 結(jié)果.tar.gz 目標/    # 打包并使用gzip壓縮
tar -cjvf 結(jié)果.tar.bz2 目標/   # 打包并使用bzip2壓縮
zip *.zip file          # 壓縮file為zip格式
zip -r *.zip file dir   # 壓縮文件或目錄一起為zip格式
zip -e 結(jié)果.zip 目標     # 壓縮并加密(OSX可用)

# 解壓
xz -d *.tar.xz
tar xvf *.tar
tar zxvf *.tgz
tar -xjf tar.bz2   # 解壓bz2文件
gunzip *.gz     # 解壓gz文件
tar -xzf *.tar.gz

# 復(fù)制
cp 文件1 文件2
cp -r 目錄1 目錄2  # 遞歸復(fù)制
cp -a 目錄1 目錄2  # 遞歸復(fù)制目錄,同時將文件屬性也復(fù)制過去

# 文件分割
split -b 1024m   # 文件分隔-b表示按大小分隔,-l表示按行數(shù)分隔

# 查看文件內(nèi)容
cat filename | more  # 表示分頁查看文件內(nèi)容

# 輸出內(nèi)容到文件
cat ./test.conf >> /etc/supervisord.conf
sudo bash -c 'cat ./test.conf >> /etc/supervisord.conf'  # 上一句如果出現(xiàn)權(quán)限問題可以嘗試使用這條命令

# 建立鏈接,最好都用絕對路徑
軟連接:ln -s 源 目的地
軟連接可以給目錄創(chuàng)建,如果刪除了對源文件不會有影響
硬連接:ln -d 源 目的地
硬連接不能給目錄創(chuàng)建,對連接做的更改會影響源文件,只能在同一文件系統(tǒng)中創(chuàng)建

# 文件創(chuàng)建
mkdir -p path/2 # 創(chuàng)建目錄樹
mkdir -pv path/{path1,path2} # 建立子目錄
mkdir -v a+wt path  # 創(chuàng)建一個粘滯模式的文件,其他用戶可以修改,但是只有該文件的owner才能進行刪除操作,這條命令即使把0755(rwxr-xr-x)改為1777(rwxrwxrwt)

# 找不同
diff 文件1 文件2   # 找出兩個文件的不同
sdiff 文件1 文件2  # 以對比的方式找文件的不同

# 批量轉(zhuǎn)換文件編碼
find *.txt -exec sh -c "iconv -f GBK -t UTF8 {} > change.{}" \; # 這里將GBK轉(zhuǎn)換為UTF8

遠程ssh

# 配置免密碼登錄
ssh-keygen -t dsa # 生成自己的ssh,然后將~/.ssh/id_dsa.pub的內(nèi)容添加到主機的~/.ssh/authorized_keys里面面去

# CentOS下的安裝
yum install openssh-clients

# 傳輸文件
scp 用戶名@地址:遠程路徑 本地路徑  # 獲取/下載遠程服務(wù)器的文件,目錄加-r參數(shù)
scp 本地路徑 用戶名@地址:遠程路徑  # 將本地文件上傳到遠程目錄,目錄加-r

# 僅允許SSH登錄,vim /etc/ssh/sshd_conf
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no

#保存,然后重啟ssh服務(wù)
service sshd restart

# 進制特定IP登錄,vim /etc/hosts.deny
sshd:IP

# 登錄shell和非登錄shell的區(qū)別: 加載的文件不同,登錄式shell加載/etc/profile、/.bash_profile和~/.profile,而非登錄式shell加載/etc/bashrc或者/etc/bash.bashrc、~/.bash_rc,所以在切換用戶是最好加上-,即su - haofly就切換到那個心的地方了

包管理

dpkg -i *.deb # 安裝deb包,但是它不會自動解決依賴,安裝完成后還要使用apt-get -f install這條命令來安裝沒有安裝好的依賴
apt-cache show 包名 # 顯示apt庫里面的軟件的版本號
sudo apt-get clean # 自動清理安裝程序時緩存的deb包
sudo apt-get autoclean  # 清理已卸載軟件的無用的依賴包
rpm -ql 包名  # 查詢已經(jīng)安裝的包的文件路徑

磁盤管理

sudo fdisk -lu   # 顯示硬盤及分區(qū)情況
sudo fdisk /dev/sdb # 對某一硬盤進行分區(qū)(千萬不要在當前硬盤進行分區(qū))
sudo mkfs -t ext4 /dev/sdb   # 將硬盤格式化為ext4文件系統(tǒng)
sudo df -lh   # 顯示硬盤掛載情況
sudo mount -t ext4 /dev/sdb /mydata  # 掛載某個分區(qū)文件為ext4
vim /etc/fstab中添加
UUID=硬盤的UUID  /掛載位置   ext4 defaults 0  0   # 在系統(tǒng)啟動時自動掛載硬盤blkid /dev/sda1  查看硬盤UUID用sudo blkid

sudo du -h -d 1 /path   # 獲取指定目錄下一級的各個目錄的大小

用戶管理

# 添加用戶
sudo useradd -s /bin/bash -d /home/username -m username

# 修改用戶密碼
sudo passwd username

# 給用戶添加sudo權(quán)限
vim /etc/sudoers 修改如下內(nèi)容
# User privilege specification  
root    ALL=(ALL:ALL) ALL      # 在這一行下面寫  
username1 ALL=(ALL:ALL) ALL????# 該用戶可以執(zhí)行所有sudo操作
username2 ALL=NOPASSWD:/usr/bin/git # 該用戶可以執(zhí)行'sudo git'的操作

# 查看所有用戶
cat /etc/passwd  

系統(tǒng)相關(guān)

lsb_release -a       // 查看系統(tǒng)信息
echo $HOSTTYPE     // 查看系統(tǒng)位數(shù)
cat /proc/cpuinfo    # 查看CPU信息
cat /etc/issue     // Debian系列查看系統(tǒng)版本
cat /etc/redhat-release // redhat系列查看系統(tǒng)版本

# 更新系統(tǒng)
sudo apt-get install update-manager-core
sudo do-release-upgrade

# 系統(tǒng)開關(guān)
shutdown -h now # 關(guān)機
shutdown -r now # 重啟

# 查看某個命令的系統(tǒng)調(diào)用
strace + 命令: 這條命令十分強大,可以定位你程序到底是哪個地方出了問題

# 增加虛擬內(nèi)存
sudo dd if=/dev/zero of=/swapfile bs=1024 count=500000  # 500MB,這兩行是連在一起的,我日
sudo mkswap /swapfile
sudo chown root:root /swapfile
sudo chmod 0600 /swapfile
sudo swapon /swapfile

防火墻

service iptables status     # 查詢防火墻狀態(tài)
vim /etc/sysconfig/iptables # 新增端口
service iptables restart    # 重啟防火墻

其它工具

supervisor

進程監(jiān)控工具,apt-get install supervisor進行安裝,默認的監(jiān)控配置都放在/etc/supervisor/conf.d里面,配置文件語法如下:

[group:fenzu]
programs:一個進程名,另一個進程名   # 這樣可以分組控制一批program

[program:去一個進程名稱]
process_name=%(program_name)s_%(process_num)02d # 當前進程的名稱
directory=/home/...     # 工作目錄,啟動程序前會切換到這個地方
command=python manage.py runserver ....   # 啟動命令
autostart=true              # 在supervisord啟動的時候自動啟動
autorestart=true            # 程序異常退出后自動重啟
startretries=3          # 啟動失敗自動重試次數(shù),默認是3
user=root                   # 用哪個用戶啟動
numprocs=8                  # 進程數(shù)
redirect_stderr=true        # 把stderr重定向到stdout,默認為false
stdout_logfile=/var/log/... # 日志文件位置,若該目錄不存在則無法正常啟動,需要手動創(chuàng)建目錄

常用操作

supervisord # 啟動所有監(jiān)控            

CURL

curl -o a.txt url   # 將文件下載到本地并命名為a.txt
curl -O url         # 將文件下載到本地用它本來的命名

FTP

Crontab定時任務(wù)

crontab -e # 直接打開定時任務(wù)文件進行編輯
格式如下:
第1列:分鐘
第2列:小時
第3列:日
第4列:月
第5列:星期
第6列:命令
其中,每一列可以逗號和小橫線表示特殊的意義,比如
3,15 8-11 * * * 命令   # 表示在上午8點到11點的第3和15分鐘執(zhí)行
* 23 * * * 命令           # 注意這個表示的是23點的每分鐘都執(zhí)行
0 */1 * * * 命令          # 每隔一小時
需要注意的是coontab是不會自動加載環(huán)境變量的喲,所以有時候發(fā)現(xiàn)命令沒有被執(zhí)行,可能是這個原因

# crontab日志,默認是關(guān)閉的,如果要打開可以在配置文件里面進行打開,vim /etc/rsyslog.d/50-defaullt.conf
cron.*  /var/log/cron.log   # 將cron前面的注釋去掉
service rsyslog restart     # 重啟rsyslog

其他命令

cd -: 返回上一次的目錄,真他媽實用
history:查看歷史命令,如果需要查看命令執(zhí)行時間,需要先export HISTTIMEFORMAT='\%F \%T '
tzselect:更改時區(qū)
# 命令命名,例如如果想通過python命令調(diào)用python3而不是默認的python2,那么可以這樣子:
alias python=python3
alias pip=pip3
alias run8000='python manage.py runserver 0.0.0.0:8000'

# yes命令:重復(fù)輸出字符串,不帶參數(shù)則默認輸出y。例如 `yes | apt-get install xxx`會默認輸出y

# 網(wǎng)絡(luò)相關(guān)
ifdown eth0 # 禁用eth網(wǎng)卡
ifup eth0

# 隨機數(shù)
echo $RANDOM

# 除法
echo $RANDOM / 28 | bc
echo $RANDOM % 28 | bc

Shell Script

數(shù)據(jù)結(jié)構(gòu)

VAR2=${VAR:-haofly} # 如果變量VAR不存在,后面就是它的默認值
VAR2=${VAR/.tar.gz} # 如果VAR的值為haofly.tar.gz,那么VAR2=haofly,一種替換
length=$(#array[@]}或者length=$(#array[*]} # 獲取數(shù)組長度

流程控制

if語句:
    -z:為空
    -n:不為空
    -gt:大于
    
# 判斷文件是否存在
if [ ! -f "$filename" ]; then
touch "$filename"
fi

# 判斷文件是否為空
if [[ ! -s filename ]]; then
echo 'a'
fi

特殊符號

[[]]:雙中括號,之間的字符不會發(fā)生文件名擴展或者單詞分割
(()):雙小括號,整數(shù)擴展,其中的變量可以不適用$符號前綴
$?:上一條命令的退出碼

日期處理

date +"%s"  # 按照時間戳來顯示
date +"%m-%d-%y"    # mm-dd-yy格式
date +"%T"  # 僅顯示時間,比如10:44:00

隨機數(shù)
$RANDOM # 生成一個隨機數(shù)

特殊操作
. /etc/*.conf # 導入配置文件,這樣配置文件里面的變量就可以直接使用了

find ./ -name "*.log" -mtime -1 | which read line; do tail -n 5 "$line" > ~/bak/"$line"; done # 查找,然后按行進行執(zhí)行
while read line do 語句 done  # 一行一行地進行處理,真正的處理

# awk:以行為單位將輸入進行處理,貌似這里的處理智能進行print
    -F 參數(shù)將行做分割,例如:ps | awk -F ' ' '\{print $1\}'  # 將ps的第二列輸出

# sed:同樣以行為單位將輸入進行處理
    -n 輸出第幾行,例如:ps | sed -n '1p'  # 將ps的第一行輸出

# xargs:將上一個管道的輸出直接作為這個管道的輸入
    ps | grep python | awk -F ' ' '\{print $1\}' | xargs kill

date+\%Y-\%m-\%d   # 獲取今天的日期
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容