乾貨!一篇文章集合所有Linux基礎命令,適合所有菜鳥學習和老手回顧!

来源:http://www.cnblogs.com/hehehe886/archive/2017/09/03/7455302.html
-Advertisement-
Play Games

1 文件{ ls -rtl # 按時間倒敘列出所有目錄和文件 ll -rt touch file # 創建空白文件 rm -rf 目錄名 # 不提示刪除非空目錄(-r:遞歸刪除 -f強制) dos2unix # windows文本轉linux文本 unix2dos # linux文本轉windows ...


1 文件{
ls -rtl # 按時間倒敘列出所有目錄和文件 ll -rt
touch file # 創建空白文件
rm -rf 目錄名 # 不提示刪除非空目錄(-r:遞歸刪除 -f強制)
dos2unix # windows文本轉linux文本
unix2dos # linux文本轉windows文本
enca filename # 查看編碼 安裝 yum install -y enca
md5sum # 查看md5值
ln 源文件 目標文件 # 硬鏈接
ln -s 源文件 目標文件 # 符號連接
readlink -f /data # 查看連接真實目錄
cat file | nl |less # 查看上下翻頁且顯示行號 q退出
head # 查看文件開頭內容
head -c 10m # 截取文件中10M內容
split -C 10M # 將文件切割大小為10M -C按行
tail -f file # 查看結尾 監視日誌文件
tail -F file # 監視日誌並重試, 針對文件被mv的情況可以持續讀取
file # 檢查文件類型
umask # 更改預設許可權
uniq # 刪除重覆的行
uniq -c # 重覆的行出現次數
uniq -u # 只顯示不重覆行
paste a b # 將兩個文件合併用tab鍵分隔開
paste -d'+' a b # 將兩個文件合併指定'+'符號隔開
paste -s a # 將多行數據合併到一行用tab鍵隔開
chattr +i /etc/passwd # 不得任意改變文件或目錄 -i去掉鎖 -R遞歸
more # 向下分面器
locate 字元串 # 搜索
wc -l file # 查看行數
cp filename{,.bak} # 快速備份一個文件
\cp a b # 拷貝不提示 既不使用別名 cp -i
rev # 將行中的字元逆序排列
comm -12 2 3 # 行和行比較匹配
iconv -f gbk -t utf8 原.txt > 新.txt # 轉換編碼
rename 原模式 目標模式 文件 # 重命名 可正則
watch -d -n 1 'df; ls -FlAt /path' # 實時某個目錄下查看最新改動過的文件
cp -v /dev/dvd /rhel4.6.iso9660 # 製作鏡像
diff suzu.c suzu2.c > sz.patch # 製作補丁
patch suzu.c < sz.patch # 安裝補丁

sort排序{

-t # 指定排序時所用的欄位分隔字元
-n # 依照數值的大小排序
-r # 以相反的順序來排序
-f # 排序時,將小寫字母視為大寫字母
-d # 排序時,處理英文字母、數字及空格字元外,忽略其他的字元
-c # 檢查文件是否已經按照順序排序
-b # 忽略每行前面開始處的空格字元
-M # 前面3個字母依照月份的縮寫進行排序
-k # 指定域
-m # 將幾個排序好的文件進行合併
-T # 指定臨時文件目錄,預設在/tmp
+<起始欄位>-<結束欄位> # 以指定的欄位來排序,範圍由起始欄位到結束欄位的前一欄位。
-o # 將排序後的結果存入指定的文

sort -n # 按數字排序
sort -nr # 按數字倒敘
sort -u # 過濾重覆行
sort -m a.txt c.txt # 將兩個文件內容整合到一起
sort -n -t' ' -k 2 -k 3 a.txt # 第二域相同,將從第三域進行升降處理
sort -n -t':' -k 3r a.txt # 以:為分割域的第三域進行倒敘排列
sort -k 1.3 a.txt # 從第三個字母起進行排序
sort -t" " -k 2n -u a.txt # 以第二域進行排序,如果遇到重覆的,就刪除

}

find查找{

# linux文件無創建時間
# Access 使用時間
# Modify 內容修改時間
# Change 狀態改變時間(許可權、屬主)
# 時間預設以24小時為單位,當前時間到向前24小時為0天,向前48-72小時為2天
# -and 且 匹配兩個條件 參數可以確定時間範圍 -mtime +2 -and -mtime -4
# -or 或 匹配任意一個條件

find /etc -name "*http*" # 按文件名查找
find . -type f # 查找某一類型文件
find / -perm # 按照文件許可權查找
find / -user # 按照文件屬主查找
find / -group # 按照文件所屬的組來查找文件
find / -atime -n # 文件使用時間在N天以內
find / -atime +n # 文件使用時間在N天以前
find / -mtime +n # 文件內容改變時間在N天以前
find / -ctime +n # 文件狀態改變時間在N天前
find / -mmin +30 # 按分鐘查找內容改變
find / -size +1000000c -print # 查找文件長度大於1M位元組的文件
find /etc -name "*passwd*" -exec grep "xuesong" {} \; # 按名字查找文件傳遞給-exec後命令
find . -name 't*' -exec basename {} \; # 查找文件名,不取路徑
find . -type f -name "err*" -exec rename err ERR {} \; # 批量改名(查找err 替換為 ERR {}文件
find 路徑 -name *name1* -or -name *name2* # 查找任意一個關鍵字

}

vim編輯器{

gconf-editor # 配置編輯器
/etc/vimrc # 配置文件路徑
vim +24 file # 打開文件定位到指定行
vim file1 file2 # 打開多個文件
vim -O2 file1 file2 # 垂直分屏
vim -on file1 file2 # 水平分屏
sp filename # 上下分割打開新文件
vsp filename # 左右分割打開新文件
Ctrl+W [操作] # 多個文件間操作 大寫W # 操作: 關閉當前視窗c 屏幕高度一樣= 增加高度+ 移動游標所在屏 右l 左h 上k 下j 中h 下一個w
:n # 編輯下一個文件
:2n # 編輯下二個文件
:N # 編輯前一個文件
:rew # 回到首文件
:set nu # 打開行號
:set nonu # 取消行號
200G # 跳轉到200
:nohl # 取消高亮
:set autoindent # 設置自動縮進
:set ff # 查看文本格式
:set binary # 改為unix格式
ctrl+ U # 向前翻頁
ctrl+ D # 向後翻頁
%s/字元1/字元2/g # 全部替換
X # 文檔加密

}

歸檔解壓縮{

tar zxvpf gz.tar.gz -C 放到指定目錄 包中的目錄 # 解包tar.gz 不指定目錄則全解壓
tar zcvpf /$path/gz.tar.gz * # 打包gz 註意*最好用相對路徑
tar zcf /$path/gz.tar.gz * # 打包正確不提示
tar ztvpf gz.tar.gz # 查看gz
tar xvf 1.tar -C 目錄 # 解包tar
tar -cvf 1.tar * # 打包tar
tar tvf 1.tar # 查看tar
tar -rvf 1.tar 文件名 # 給tar追加文件
tar --exclude=/home/dmtsai --exclude=*.tar -zcvf myfile.tar.gz /home /etc # 打包/home, /etc ,但排除 /home/dmtsai
tar -N "2015/06/01" -zcvf home.tar.gz /home # 在 /home 當中,比 2015/06/01 新的文件才備份
tar -zcvfh home.tar.gz /home # 打包目錄中包括連接目錄
tar zcf - ./ | ssh root@IP "tar zxf - -C /xxxx" # 一邊壓縮一邊解壓
zgrep 字元 1.gz # 查看壓縮包中文件字元行
bzip2 -dv 1.tar.bz2 # 解壓bzip2
bzip2 -v 1.tar # bzip2壓縮
bzcat # 查看bzip2
gzip A # 直接壓縮文件 # 壓縮後源文件消失
gunzip A.gz # 直接解壓文件 # 解壓後源文件消失
gzip -dv 1.tar.gz # 解壓gzip到tar
gzip -v 1.tar # 壓縮tar到gz
unzip zip.zip # 解壓zip
zip zip.zip * # 壓縮zip
# rar3.6下載: http://www.rarsoft.com/rar/rarlinux-3.6.0.tar.gz
rar a rar.rar *.jpg # 壓縮文件為rar包
unrar x rar.rar # 解壓rar包
7z a 7z.7z * # 7z壓縮
7z e 7z.7z # 7z解壓

}

文件ACL許可權控制{

getfacl 1.test # 查看文件ACL許可權
setfacl -R -m u:xuesong:rw- 1.test # 對文件增加用戶的讀寫許可權 -R 遞歸

}

svn更新代碼{

--force # 強制覆蓋
/usr/bin/svn --username user --password passwd co $Code ${SvnPath}src/ # 檢出整個項目
/usr/bin/svn --username user --password passwd up $Code ${SvnPath}src/ # 更新項目
/usr/bin/svn --username user --password passwd export $Code$File ${SvnPath}src/$File # 導出個別文件
/usr/bin/svn --username user --password passwd export -r 版本號 svn路徑 本地路徑 --force # 導出指定版本

}

git{

# 編譯安裝git-1.8.4.4
./configure --with-curl --with-expat
make
make install

git clone [email protected]:gittest.git ./gittest/ # 克隆項目到指定目錄
git pull # 更新項目 需要cd到項目目錄中
git add . # 更新所有文件
git commit -m "gittest up" # 提交操作並添加備註
git push # 正式提交到遠程git伺服器
git reset --hard # 本地恢復整個項目
git rm -r -n --cached ./img # -n執行命令時,不會刪除任何文件,而是展示此命令要刪除的文件列表預覽
git rm -r --cached ./img # 執行刪除命令 需要commit和push讓遠程生效
git init --bare smc-content-check.git # 初始化新git項目 需要手動創建此目錄並給git用戶許可權 chown -R git:git smc-content-check.git
git config --global credential.helper store # 記住密碼

}

恢復rm刪除的文件{

# debugfs針對 ext2 # ext3grep針對 ext3 # extundelete針對 ext4
df -T # 首先查看磁碟分區格式
umount /data/ # 卸載掛載,數據丟失請首先卸載掛載,或重新掛載只讀
ext3grep /dev/sdb1 --ls --inode 2 # 記錄信息繼續查找目錄下文件inode信息
ext3grep /dev/sdb1 --ls --inode 131081 # 此處是inode
ext3grep /dev/sdb1 --restore-inode 49153 # 記錄下inode信息開始恢複目錄

}

openssl{

openssl rand 15 -base64 # 口令生成
openssl sha1 filename # 哈希演算法校驗文件
openssl md5 filename # MD5校驗文件
openssl base64 filename.txt # base64編碼/解碼文件(發送郵件附件之類功能會可以使用)
openssl base64 -d filename.bin # base64編碼/解碼二進位文件
openssl enc -aes-128-cbc filename.aes-128-cbc # 加密文檔
# 推薦使用的加密演算法是bf(Blowfish)和-aes-128-cbc(運行在CBC模式的128位密匙AES加密演算法),加密強度有保障
openssl enc -d -aes-128-cbc -in filename.aes-128-cbc > filename # 解密文檔

}

}

2 軟體{

rpm{

rpm -ivh lynx # rpm安裝
rpm -e lynx # 卸載包
rpm -e lynx --nodeps # 強制卸載
rpm -qa # 查看所有安裝的rpm包
rpm -qa | grep lynx # 查找包是否安裝
rpm -ql # 軟體包路徑
rpm -Uvh # 升級包
rpm --test lynx # 測試
rpm -qc # 軟體包配置文檔
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 # 導入rpm的簽名信息
rpm --initdb # 初始化rpm 資料庫
rpm --rebuilddb # 重建rpm資料庫 在rpm和yum無響應的情況使用 先 rm -f /var/lib/rpm/__db.00* 在重建

}

yum{

yum list # 所有軟體列表
yum install 包名 # 安裝包和依賴包
yum -y update # 升級所有包版本,依賴關係,系統版本內核都升級
yum -y update 軟體包名 # 升級指定的軟體包
yum -y upgrade # 不改變軟體設置更新軟體,系統版本升級,內核不改變
yum search mail # yum搜索相關包
yum grouplist # 軟體包組
yum -y groupinstall "Virtualization" # 安裝軟體包組
repoquery -ql gstreamer # 不安裝軟體查看包含文件
yum clean all # 清除var下緩存

}

yum使用epel源{

# 包下載地址: http://download.fedoraproject.org/pub/epel # 選擇版本5\6\7
rpm -Uvh http://mirrors.hustunique.com/epel//6/x86_64/epel-release-6-8.noarch.rpm

}

自定義yum源{

find /etc/yum.repos.d -name "*.repo" -exec mv {} {}.bak \;

vim /etc/yum.repos.d/yum.repo
[yum]
#http
baseurl=http://10.0.0.1/centos5.5
#掛載iso
#mount -o loop CentOS-5.8-x86_64-bin-DVD-1of2.iso /data/iso/
#本地
#baseurl=file:///data/iso/
enable=1

#導入key
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

}

編譯{

源碼安裝{

./configure --help # 查看所有編譯參數
./configure --prefix=/usr/local/ # 配置參數
make # 編譯
# make -j 8 # 多線程編譯,速度較快,但有些軟體不支持
make install # 安裝包
make clean # 清除編譯結果

}

perl程式編譯{

perl Makefile.PL
make
make test
make install

}

python程式編譯{

python file.py

# 源碼包編譯安裝
python setup.py build
python setup.py install

}

編譯c程式{

gcc -g hello.c -o hello

}

}

}

3 系統{

wall     # 給其它用戶發消息
whereis ls # 查找命令的目錄
which # 查看當前要執行的命令所在的路徑
clear # 清空整個屏幕
reset # 重新初始化屏幕
cal # 顯示月曆
echo -n 123456 | md5sum # md5加密
mkpasswd # 隨機生成密碼 -l位數 -C大小 -c小寫 -d數字 -s特殊字元
netstat -anlp | grep port # 是否打開了某個埠
ntpdate stdtime.gov.hk # 同步時間
tzselect # 選擇時區 #+8=(5 9 1 1) # (TZ='Asia/Shanghai'; export TZ)括弧內寫入 /etc/profile
/sbin/hwclock -w # 時間保存到硬體
/etc/shadow # 賬戶影子文件
LANG=en # 修改語言
vim /etc/sysconfig/i18n # 修改編碼 LANG="en_US.UTF-8"
export LC_ALL=C # 強制字元集
vi /etc/hosts # 查詢靜態主機名
alias # 別名
watch uptime # 監測命令動態刷新
ipcs -a # 查看Linux系統當前單個共用記憶體段的最大值
ldconfig # 動態鏈接庫管理命令
ldd `which cmd` # 查看命令的依賴庫
dist-upgrade # 會改變配置文件,改變舊的依賴關係,改變系統版本
/boot/grub/grub.conf # grub啟動項配置
ps -mfL <PID> # 查看指定進程啟動的線程 線程數受 max user processes 限制
ps uxm |wc -l # 查看當前用戶占用的進程數 [包括線程] max user processes
top -p PID -H # 查看指定PID進程及線程
lsof |wc -l # 查看當前文件句柄數使用數量 open files
lsof |grep /lib # 查看載入庫文件
sysctl -a # 查看當前所有系統內核參數
sysctl -p # 修改內核參數/etc/sysctl.conf,讓/etc/rc.d/rc.sysinit讀取生效
strace -p pid # 跟蹤系統調用
ps -eo "%p %C %z %a"|sort -k3 -n # 把進程按記憶體使用大小排序
strace uptime 2>&1|grep open # 查看命令打開的相關文件
grep Hugepagesize /proc/meminfo # 記憶體分頁大小
mkpasswd -l 8 -C 2 -c 2 -d 4 -s 0 # 隨機生成指定類型密碼
echo 1 > /proc/sys/net/ipv4/tcp_syncookies # 使TCP SYN Cookie 保護生效 # "SYN Attack"是一種拒絕服務的攻擊方式
grep Swap /proc/25151/smaps |awk '{a+=$2}END{print a}' # 查詢某pid使用的swap大小

開機啟動腳本順序{

/etc/profile
/etc/profile.d/\*.sh
~/bash_profile
~/.bashrc
/etc/bashrc

}

進程管理{

ps -eaf # 查看所有進程
kill -9 PID # 強制終止某個PID進程
kill -15 PID # 安全退出 需程式內部處理信號
cmd & # 命令後臺運行
nohup cmd & # 後臺運行不受shell退出影響
ctrl+z # 將前臺放入後臺(暫停)
jobs # 查看後臺運行程式
bg 2 # 啟動後臺暫停進程
fg 2 # 調回後臺進程
pstree # 進程樹
vmstat 1 9 # 每隔一秒報告系統性能信息9次
sar # 查看cpu等狀態
lsof file # 顯示打開指定文件的所有進程
lsof -i:32768 # 查看埠的進程
renice +1 180 # 把180號進程的優先順序加1

ps{

ps aux |grep -v USER | sort -nk +4 | tail # 顯示消耗記憶體最多的10個運行中的進程,以記憶體使用量排序.cpu +3
# USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
%CPU # 進程的cpu占用率
%MEM # 進程的記憶體占用率
VSZ # 進程虛擬大小,單位K(即總占用記憶體大小,包括真實記憶體和虛擬記憶體)
RSS # 進程使用的駐留集大小即實際物理記憶體大小
START # 進程啟動時間和日期
占用的虛擬記憶體大小 = VSZ - RSS

ps -eo pid,lstart,etime,args # 查看進程啟動時間

}

top{

前五行是系統整體的統計信息。
第一行: 任務隊列信息,同 uptime 命令的執行結果。內容如下:
01:06:48 當前時間
up 1:22 系統運行時間,格式為時:分
1 user 當前登錄用戶數
load average: 0.06, 0.60, 0.48 系統負載,即任務隊列的平均長度。
三個數值分別為 1分鐘、5分鐘、15分鐘前到現在的平均值。

第二、三行:為進程和CPU的信息。當有多個CPU時,這些內容可能會超過兩行。內容如下:
Tasks: 29 total 進程總數
1 running 正在運行的進程數
28 sleeping 睡眠的進程數
0 stopped 停止的進程數
0 zombie 僵屍進程數
Cpu(s): 0.3% us 用戶空間占用CPU百分比
1.0% sy 內核空間占用CPU百分比
0.0% ni 用戶進程空間內改變過優先順序的進程占用CPU百分比
98.7% id 空閑CPU百分比
0.0% wa 等待輸入輸出的CPU時間百分比
0.0% hi
0.0% si

第四、五行:為記憶體信息。內容如下:
Mem: 191272k total 物理記憶體總量
173656k used 使用的物理記憶體總量
17616k free 空閑記憶體總量
22052k buffers 用作內核緩存的記憶體量
Swap: 192772k total 交換區總量
0k used 使用的交換區總量
192772k free 空閑交換區總量
123988k cached 緩衝的交換區總量。
記憶體中的內容被換出到交換區,而後又被換入到記憶體,但使用過的交換區尚未被覆蓋,
該數值即為這些內容已存在於記憶體中的交換區的大小。
相應的記憶體再次被換出時可不必再對交換區寫入。

進程信息區,各列的含義如下: # 顯示各個進程的詳細信息

序號 列名 含義
a PID 進程id
b PPID 父進程id
c RUSER Real user name
d UID 進程所有者的用戶id
e USER 進程所有者的用戶名
f GROUP 進程所有者的組名
g TTY 啟動進程的終端名。不是從終端啟動的進程則顯示為 ?
h PR 優先順序
i NI nice值。負值表示高優先順序,正值表示低優先順序
j P 最後使用的CPU,僅在多CPU環境下有意義
k %CPU 上次更新到現在的CPU時間占用百分比
l TIME 進程使用的CPU時間總計,單位秒
m TIME+ 進程使用的CPU時間總計,單位1/100秒
n %MEM 進程使用的物理記憶體百分比
o VIRT 進程使用的虛擬記憶體總量,單位kb。VIRT=SWAP+RES
p SWAP 進程使用的虛擬記憶體中,被換出的大小,單位kb。
q RES 進程使用的、未被換出的物理記憶體大小,單位kb。RES=CODE+DATA
r CODE 可執行代碼占用的物理記憶體大小,單位kb
s DATA 可執行代碼以外的部分(數據段+棧)占用的物理記憶體大小,單位kb
t SHR 共用記憶體大小,單位kb
u nFLT 頁面錯誤次數
v nDRT 最後一次寫入到現在,被修改過的頁面數。
w S 進程狀態。
D=不可中斷的睡眠狀態
R=運行
S=睡眠
T=跟蹤/停止
Z=僵屍進程 父進程在但並不等待子進程
x COMMAND 命令名/命令行
y WCHAN 若該進程在睡眠,則顯示睡眠中的系統函數名
z Flags 任務標誌,參考 sched.h

}

列出正在占用swap的進程{

#!/bin/bash
echo -e "PID\t\tSwap\t\tProc_Name"
# 拿出/proc目錄下所有以數字為名的目錄(進程名是數字才是進程,其他如sys,net等存放的是其他信息)
for pid in `ls -l /proc | grep ^d | awk '{ print $9 }'| grep -v [^0-9]`
do
# 讓進程釋放swap的方法只有一個:就是重啟該進程。或者等其自動釋放。放
# 如果進程會自動釋放,那麼我們就不會寫腳本來找他了,找他都是因為他沒有自動釋放。
# 所以我們要列出占用swap並需要重啟的進程,但是init這個進程是系統里所有進程的祖先進程
# 重啟init進程意味著重啟系統,這是萬萬不可以的,所以就不必檢測他了,以免對系統造成影響。
if [ $pid -eq 1 ];then continue;fi
grep -q "Swap" /proc/$pid/smaps 2>/dev/null
if [ $? -eq 0 ];then
swap=$(grep Swap /proc/$pid/smaps \
| gawk '{ sum+=$2;} END{ print sum }')
proc_name=$(ps aux | grep -w "$pid" | grep -v grep \
| awk '{ for(i=11;i<=NF;i++){ printf("%s ",$i); }}')
if [ $swap -gt 0 ];then
echo -e "${pid}\t${swap}\t${proc_name}"
fi
fi
done | sort -k2 -n | awk -F'\t' '{
pid[NR]=$1;
size[NR]=$2;
name[NR]=$3;
}
END{
for(id=1;id<=length(pid);id++)
{
if(size[id]<1024)
printf("%-10s\t%15sKB\t%s\n",pid[id],size[id],name[id]);
else if(size[id]<1048576)
printf("%-10s\t%15.2fMB\t%s\n",pid[id],size[id]/1024,name[id]);
else
printf("%-10s\t%15.2fGB\t%s\n",pid[id],size[id]/1048576,name[id]);
}
}'

}

linux操作系統提供的信號{

kill -l # 查看linux提供的信號
trap "echo aaa" 2 3 15 # shell使用 trap 捕捉退出信號

# 發送信號一般有兩種原因:
# 1(被動式) 內核檢測到一個系統事件.例如子進程退出會像父進程發送SIGCHLD信號.鍵盤按下control+c會發送SIGINT信號
# 2(主動式) 通過系統調用kill來向指定進程發送信號
# 進程結束信號 SIGTERM 和 SIGKILL 的區別: SIGTERM 比較友好,進程能捕捉這個信號,根據您的需要來關閉程式。在關閉程式之前,您可以結束打開的記錄文件和完成正在做的任務。在某些情況下,假如進程正在進行作業而且不能中斷,那麼進程可以忽略這個SIGTERM信號。
# 如果一個進程收到一個SIGUSR1信號,然後執行信號綁定函數,第二個SIGUSR2信號又來了,第一個信號沒有被處理完畢的話,第二個信號就會丟棄。

SIGHUP 1 A # 終端掛起或者控制進程終止
SIGINT 2 A # 鍵盤終端進程(如control+c)
SIGQUIT 3 C # 鍵盤的退出鍵被按下
SIGILL 4 C # 非法指令
SIGABRT 6 C # 由abort(3)發出的退出指令
SIGFPE 8 C # 浮點異常
SIGKILL 9 AEF # Kill信號 立刻停止
SIGSEGV 11 C # 無效的記憶體引用
SIGPIPE 13 A # 管道破裂: 寫一個沒有讀埠的管道
SIGALRM 14 A # 鬧鐘信號 由alarm(2)發出的信號
SIGTERM 15 A # 終止信號,可讓程式安全退出 kill -15
SIGUSR1 30,10,16 A # 用戶自定義信號1
SIGUSR2 31,12,17 A # 用戶自定義信號2
SIGCHLD 20,17,18 B # 子進程結束自動向父進程發送SIGCHLD信號
SIGCONT 19,18,25 # 進程繼續(曾被停止的進程)
SIGSTOP 17,19,23 DEF # 終止進程
SIGTSTP 18,20,24 D # 控制終端(tty)上按下停止鍵
SIGTTIN 21,21,26 D # 後臺進程企圖從控制終端讀
SIGTTOU 22,22,27 D # 後臺進程企圖從控制終端寫

預設處理動作一項中的字母含義如下:
A 預設的動作是終止進程
B 預設的動作是忽略此信號,將該信號丟棄,不做處理
C 預設的動作是終止進程併進行內核映像轉儲(dump core),內核映像轉儲是指將進程數據在記憶體的映像和進程在內核結構中的部分內容以一定格式轉儲到文件系統,並且進程退出執行,這樣做的好處是為程式員提供了方便,使得他們可以得到進程當時執行時的數據值,允許他們確定轉儲的原因,並且可以調試他們的程式。
D 預設的動作是停止進程,進入停止狀況以後還能重新進行下去,一般是在調試的過程中(例如ptrace系統調用)
E 信號不能被捕獲
F 信號不能被忽略
}

系統性能狀態{

vmstat 1 9

r # 等待執行的任務數。當這個值超過了cpu線程數,就會出現cpu瓶頸。
b # 等待IO的進程數量,表示阻塞的進程。
swpd # 虛擬記憶體已使用的大小,如大於0,表示機器物理記憶體不足,如不是程式記憶體泄露,那麼該升級記憶體。
free # 空閑的物理記憶體的大小
buff # 已用的buff大小,對塊設備的讀寫進行緩衝
cache # cache直接用來記憶我們打開的文件,給文件做緩衝,(把空閑的物理記憶體的一部分拿來做文件和目錄的緩存,是為了提高 程式執行的性能,當程式使用記憶體時,buffer/cached會很快地被使用。)
inact # 非活躍記憶體大小,即被標明可回收的記憶體,區別於free和active -a選項時顯示
active # 活躍的記憶體大小 -a選項時顯示
si # 每秒從磁碟讀入虛擬記憶體的大小,如果這個值大於0,表示物理記憶體不夠用或者記憶體泄露,要查找耗記憶體進程解決掉。
so # 每秒虛擬記憶體寫入磁碟的大小,如果這個值大於0,同上。
bi # 塊設備每秒接收的塊數量,這裡的塊設備是指系統上所有的磁碟和其他塊設備,預設塊大小是1024byte
bo # 塊設備每秒發送的塊數量,例如讀取文件,bo就要大於0。bi和bo一般都要接近0,不然就是IO過於頻繁,需要調整。
in # 每秒CPU的中斷次數,包括時間中斷。in和cs這兩個值越大,會看到由內核消耗的cpu時間會越多
cs # 每秒上下文切換次數,例如我們調用系統函數,就要進行上下文切換,線程的切換,也要進程上下文切換,這個值要越小越好,太大了,要考慮調低線程或者進程的數目,例如在apache和nginx這種web伺服器中,我們一般做性能測試時會進行幾千併發甚至幾萬併發的測試,選擇web伺服器的進程可以由進程或者線程的峰值一直下調,壓測,直到cs到一個比較小的值,這個進程和線程數就是比較合適的值了。系統調用也是,每次調用系統函數,我們的代碼就會進入內核空間,導致上下文切換,這個是很耗資源,也要儘量避免頻繁調用系統函數。上下文切換次數過多表示你的CPU大部分浪費在上下文切換,導致CPU乾正經事的時間少了,CPU沒有充分利用。
us # 用戶進程執行消耗cpu時間(user time) us的值比較高時,說明用戶進程消耗的cpu時間多,但是如果長期超過50%的使用,那麼我們就該考慮優化程式演算法或其他措施
sy # 系統CPU時間,如果太高,表示系統調用時間長,例如是IO操作頻繁。
id # 空閑 CPU時間,一般來說,id + us + sy = 100,一般認為id是空閑CPU使用率,us是用戶CPU使用率,sy是系統CPU使用率。
wt # 等待IOCPU時間。Wa過高時,說明io等待比較嚴重,這可能是由於磁碟大量隨機訪問造成的,也有可能是磁碟的帶寬出現瓶頸。

如果 r 經常大於4,且id經常少於40,表示cpu的負荷很重。
如果 pi po 長期不等於0,表示記憶體不足。
如果 b 隊列經常大於3,表示io性能不好。

}

}

日誌管理{

history # 歷時命令預設1000條
HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S " # 讓history命令顯示具體時間
history -c # 清除記錄命令
cat $HOME/.bash_history # 歷史命令記錄文件
lastb -a # 列出登錄系統失敗的用戶相關信息 清空二進位日誌記錄文件 echo > /var/log/btmp
last # 查看登陸過的用戶信息 清空二進位日誌記錄文件 echo > /var/log/wtmp 預設打開亂碼
who /var/log/wtmp # 查看登陸過的用戶信息
lastlog # 用戶最後登錄的時間
tail -f /var/log/messages # 系統日誌
tail -f /var/log/secure # ssh日誌

}

selinux{

sestatus -v # 查看selinux狀態
getenforce # 查看selinux模式
setenforce 0 # 設置selinux為寬容模式(可避免阻止一些操作)
semanage port -l # 查看selinux埠限制規則
semanage port -a -t http_port_t -p tcp 8000 # 在selinux中註冊埠類型
vi /etc/selinux/config # selinux配置文件
SELINUX=enfoceing # 關閉selinux 把其修改為 SELINUX=disabled

}

查看剩餘記憶體{

free -m
#-/+ buffers/cache: 6458 1649
#6458M為真實使用記憶體 1649M為真實剩餘記憶體(剩餘記憶體+緩存+緩衝器)
#linux會利用所有的剩餘記憶體作為緩存,所以要保證linux運行速度,就需要保證記憶體的緩存大小

}

系統信息{

uname -a # 查看Linux內核版本信息
cat /proc/version # 查看內核版本
cat /etc/issue # 查看系統版本
lsb_release -a # 查看系統版本 需安裝 centos-release
locale -a # 列出所有語系
locale # 當前環境變數中所有編碼
hwclock # 查看時間
who # 當前線上用戶
w # 當前線上用戶
whoami # 查看當前用戶名
logname # 查看初始登陸用戶名
uptime # 查看伺服器啟動時間
sar -n DEV 1 10 # 查看網卡網速流量
dmesg # 顯示開機信息
lsmod # 查看內核模塊

}

硬體信息{

more /proc/cpuinfo # 查看cpu信息
lscpu # 查看cpu信息
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c # 查看cpu型號和邏輯核心數
getconf LONG_BIT # cpu運行的位數
cat /proc/cpuinfo | grep 'physical id' |sort| uniq -c # 物理cpu個數
cat /proc/cpuinfo | grep flags | grep ' lm ' | wc -l # 結果大於0支持64位
cat /proc/cpuinfo|grep flags # 查看cpu是否支持虛擬化 pae支持半虛擬化 IntelVT 支持全虛擬化
more /proc/meminfo # 查看記憶體信息
dmidecode # 查看全面硬體信息
dmidecode | grep "Product Name" # 查看伺服器型號
dmidecode | grep -P -A5 "Memory\s+Device" | grep Size | grep -v Range # 查看記憶體插槽
cat /proc/mdstat # 查看軟raid信息
cat /proc/scsi/scsi # 查看Dell硬raid信息(IBM、HP需要官方檢測工具)
lspci # 查看硬體信息
lspci|grep RAID # 查看是否支持raid
lspci -vvv |grep Ethernet # 查看網卡型號
lspci -vvv |grep Kernel|grep driver # 查看驅動模塊
modinfo tg2 # 查看驅動版本(驅動模塊)
ethtool -i em1 # 查看網卡驅動版本
ethtool em1 # 查看網卡帶寬

}

終端快捷鍵{

Ctrl+A   # 行前
Ctrl+E   # 行尾
Ctrl+S   # 終端鎖屏
Ctrl+Q    # 解鎖屏
Ctrl+D    # 退出

}

開機啟動模式{

vi /etc/inittab
id:3:initdefault: # 3為多用戶命令
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now # 註釋此行 禁止 ctrl+alt+del 關閉電腦

}

終端提示顯示{

echo $PS1 # 環境變數控制提示顯示
PS1='[\u@ \H \w \A \@#]\$'
PS1='[\u@\h \W]\$'

}

定時任務{

at 5pm + 3 days /bin/ls # 單次定時任務 指定三天後下午5:00執行/bin/ls

crontab -e # 編輯周期任務
#分鐘 小時 天 月 星期 命令或腳本
1,30 1-3/2 * * * 命令或腳本 >> file.log 2>&1
echo "40 7 * * 2 /root/sh">>/var/spool/cron/root # 直接將命令寫入周期任務
crontab -l # 查看自動周期性任務
crontab -r # 刪除自動周期性任務
cron.deny和cron.allow # 禁止或允許用戶使用周期任務
service crond start|stop|restart # 啟動自動周期性服務

}

date{

星期日[SUN] 星期一[MON] 星期二[TUE] 星期三[WED] 星期四[THU] 星期五[FRI] 星期六[SAT]
一月[JAN] 二月[FEB] 三月[MAR] 四月[APR] 五月[MAY] 六月[JUN] 七月[JUL] 八月[AUG] 九月[SEP] 十月[OCT] 十一月[NOV] 十二月[DEC]

date -s 20091112 # 設日期
date -s 18:30:50 # 設時間
date -d "7 days ago" +%Y%m%d # 7天前日期
date -d "5 minute ago" +%H:%M # 5分鐘前時間
date -d "1 month ago" +%Y%m%d # 一個月前
date -d '1 days' +%Y-%m-%d # 一天後
date -d '1 hours' +%H:%M:%S # 一小時後
date +%Y-%m-%d -d '20110902' # 日期格式轉換
date +%Y-%m-%d_%X # 日期和時間
date +%N # 納秒
date -d "2012-08-13 14:00:23" +%s # 換算成秒計算(1970年至今的秒數)
date -d "@1363867952" +%Y-%m-%d-%T # 將時間戳換算成日期
date -d "1970-01-01 UTC 1363867952 seconds" +%Y-%m-%d-%T # 將時間戳換算成日期
date -d "`awk -F. '{print $1}' /proc/uptime` second ago" +"%Y-%m-%d %H:%M:%S" # 格式化系統啟動時間(多少秒前)

}

limits.conf{

ulimit -SHn 65535 # 臨時設置文件描述符大小 進程最大打開文件柄數 還有socket最大連接數, 等同配置 nofile
ulimit -SHu 65535 # 臨時設置用戶最大進程數
ulimit -a # 查看

/etc/security/limits.conf

# 文件描述符大小 open files
# lsof |wc -l 查看當前文件句柄數使用數量
* soft nofile 16384 # 設置太大,進程使用過多會把機器拖死
* hard nofile 32768

# 用戶最大進程數 max user processes
# echo $((`ps uxm |wc -l`-`ps ux |wc -l`)) 查看當前用戶占用的進程數 [包括線程]
user soft nproc 16384
user hard nproc 32768

# 如果/etc/security/limits.d/有配置文件,將會覆蓋/etc/security/limits.conf里的配置
# 即/etc/security/limits.d/的配置文件里就不要有同樣的參量設置
/etc/security/limits.d/90-nproc.conf # centos6.3的預設這個文件會覆蓋 limits.conf
user soft nproc 16384
user hard nproc 32768

sysctl -p # 修改配置文件後讓系統生效

}

百萬長鏈接設置{

# 記憶體消耗需要較大
vim /root/.bash_profile
# 添加如下2行,退出bash重新登陸
echo 20000500 > /proc/sys/fs/nr_open
ulimit -n 10000000

}

libc.so故障修複{

# 由於升級glibc導致libc.so不穩定,突然報錯,幸好還有未退出的終端
grep: error while loading shared libraries: /lib64/libc.so.6: ELF file OS ABI invalid

# 看看當前系統有多少版本 libc.so
ls /lib64/libc-[tab]

# 更改環境變數指向其他 libc.so 文件測試
export LD_PRELOAD=/lib64/libc-2.7.so # 如果不改變LD_PRELOAD變數,ln不能用,需要使用 /sbin/sln 命令做鏈接

# 當前如果好使了,在執行下麵強制替換軟鏈接。如不好使,測試其他版本的libc.so文件
ln -f -s /lib64/libc-2.7.so /lib64/libc.so.6

}

sudo{

echo myPassword | sudo -S ls /tmp # 直接輸入sudo的密碼非交互,從標準輸入讀取密碼而不是終端設備
visudo # sudo命令許可權添加 /etc/sudoers
用戶 別名(可用all)=NOPASSWD:命令1,命令2
user ALL=NOPASSWD:/bin/su # 免root密碼切換root身份
wangming linuxfan=NOPASSWD:/sbin/apache start,/sbin/apache restart
UserName ALL=(ALL) ALL
UserName ALL=(ALL) NOPASSWD: ALL
peterli ALL=(ALL) NOPASSWD:/sbin/service
Defaults requiretty # sudo不允許後臺運行,註釋此行既允許
Defaults !visiblepw # sudo不允許遠程,去掉!既允許

}

grub開機啟動項添加{

vim /etc/grub.conf
title ms-dos
rootnoverify (hd0,0)
chainloader +1

}

stty{

#stty時一個用來改變並列印終端行設置的常用命令

stty iuclc # 在命令行下禁止輸出大寫
stty -iuclc # 恢復輸出大寫
stty olcuc # 在命令行下禁止輸出小寫
stty -olcuc # 恢復輸出小寫
stty size # 列印出終端的行數和列數
stty eof "string" # 改變系統預設ctrl+D來表示文件的結束
stty -echo # 禁止回顯
stty echo # 打開回顯
stty -echo;read;stty echo;read # 測試禁止回顯
stty igncr # 忽略回車符
stty -igncr # 恢復回車符
stty erase '#' # 將#設置為退格字元
stty erase '^?' # 恢復退格字元

定時輸入{

timeout_read(){
timeout=$1
old_stty_settings=`stty -g`  # save current settings
stty -icanon min 0 time 100  # set 10seconds,not 100seconds
eval read varname   # =read $varname
stty "$old_stty_settings"   # recover settings
}

read -t 10 varname # 更簡單的方法就是利用read命令的-t選項

}

檢測用戶按鍵{

#!/bin/bash
old_tty_settings=$(stty -g) # 保存老的設置(為什麼?).
stty -icanon
Keypress=$(head -c1) # 或者使用$(dd bs=1 count=1 2> /dev/null)
echo "Key pressed was \""$Keypress"\"."
stty "$old_tty_settings" # 恢復老的設置.
exit 0

}

}

iptables{

內建三個表:nat mangle 和 filter
filter預設規則表,有INPUT、FORWARD 和 OUTPUT 三個規則鏈
vi /etc/sysconfig/iptables # 配置文件
INPUT # 進入
FORWARD # 轉發
OUTPUT # 出去
ACCEPT # 將封包放行
REJECT # 攔阻該封包
DROP # 丟棄封包不予處理
-A # 在所選擇的鏈(INPUT等)末添加一條或更多規則
-D # 刪除一條
-E # 修改
-p # tcp、udp、icmp 0相當於所有all !取反
-P # 設置預設策略(與所有鏈都不匹配強制使用此策略)
-s # IP/掩碼 (IP/24) 主機名、網路名和清楚的IP地址 !取反
-j # 目標跳轉,立即決定包的命運的專用內建目標
-i # 進入的(網路)介面 [名稱] eth0
-o # 輸出介面[名稱]
-m # 模塊
--sport # 源埠
--dport # 目標埠

iptables -F # 將防火牆中的規則條目清除掉 # 註意: iptables -P INPUT ACCEPT
iptables-restore < 規則文件 # 導入防火牆規則
/etc/init.d/iptables save # 保存防火牆設置
/etc/init.d/iptables restart # 重啟防火牆服務
iptables -L -n # 查看規則
iptables -t nat -nL # 查看轉發

iptables實例{

iptables -L INPUT # 列出某規則鏈中的所有規則
iptables -X allowed # 刪除某個規則鏈 ,不加規則鏈,清除所有非內建的
iptables -Z INPUT # 將封包計數器歸零
iptables -N allowed # 定義新的規則鏈
iptables -P INPUT DROP # 定義過濾政策
iptables -A INPUT -s 192.168.1.1 # 比對封包的來源IP # ! 192.168.0.0/24 ! 反向對比
iptables -A INPUT -d 192.168.1.1 # 比對封包的目的地IP
iptables -A INPUT -i eth0 # 比對封包是從哪片網卡進入
iptables -A FORWARD -o eth0 # 比對封包要從哪片網卡送出 eth+表示所有的網卡
iptables -A INPUT -p tcp # -p ! tcp 排除tcp以外的udp、icmp。-p all所有類型
iptables -D INPUT 8 # 從某個規則鏈中刪除一條規則
iptables -D INPUT --dport 80 -j DROP # 從某個規則鏈中刪除一條規則
iptables -R INPUT 8 -s 192.168.0.1 -j DROP # 取代現行規則
iptables -I INPUT 8 --dport 80 -j ACCEPT # 插入一條規則
iptables -A INPUT -i eth0 -j DROP # 其它情況不允許
iptables -A INPUT -p tcp -s IP -j DROP # 禁止指定IP訪問
iptables -A INPUT -p tcp -s IP --dport port -j DROP # 禁止指定IP訪問埠
iptables -A INPUT -s IP -p tcp --dport port -j ACCEPT # 允許在IP訪問指定埠
iptables -A INPUT -p tcp --dport 22 -j DROP # 禁止使用某埠
iptables -A INPUT -i eth0 -p icmp -m icmp --icmp-type 8 -j DROP # 禁止icmp埠
iptables -A INPUT -i eth0 -p icmp -j DROP # 禁止icmp埠
iptables -t filter -A INPUT -i eth0 -p tcp --syn -j DROP # 阻止所有沒有經過你系統授權的TCP連接
iptables -A INPUT -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT # IP包流量限制
iptables -A INPUT -i eth0 -s 192.168.62.1/32 -p icmp -m icmp --icmp-type 8 -j ACCEPT # 除192.168.62.1外,禁止其它人ping我的主機
iptables -A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -m recent --update --seconds 5 --hitcount 20 --rttl --name WEB --rsource -j DROP # 可防禦cc攻擊(未測試)

}

iptables配置實例文件{

# Generated by iptables-save v1.2.11 on Fri Feb 9 12:10:37 2007
*filter
:INPUT ACCEPT [637:58967]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [5091:1301533]
# 允許的IP或IP段訪問 建議多個
-A INPUT -s 127.0.0.1 -p tcp -j ACCEPT
-A INPUT -s 192.168.0.0/255.255.0.0 -p tcp -j ACCEPT
# 開放對外開放埠
-A INPUT -p tcp --dport 80 -j ACCEPT
# 指定某埠針對IP開放
-A INPUT -s 192.168.10.37 -p tcp --dport 22 -j ACCEPT
# 拒絕所有協議(INPUT允許)
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,URG RST -j DROP
# 允許已建立的或相關連的通行
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 拒絕ping
-A INPUT -p tcp -m tcp -j REJECT --reject-with icmp-port-unreachable
COMMIT
# Completed on Fri Feb 9 12:10:37 2007

}

iptables配置實例{

# 允許某段IP訪問任何埠
iptables -A INPUT -s 192.168.0.3/24 -p tcp -j ACCEPT
# 設定預設規則 (拒絕所有的數據包,再允許需要的,如只做WEB伺服器.還是推薦三個鏈都是DROP)
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# 註意: 直接設置這三條會掉線
# 開啟22埠
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 如果OUTPUT 設置成DROP的,要寫上下麵一條
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
# 註:不寫導致無法SSH.其他的埠一樣,OUTPUT設置成DROP的話,也要添加一條鏈
# 如果開啟了web伺服器,OUTPUT設置成DROP的話,同樣也要添加一條鏈
iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
# 做WEB伺服器,開啟80埠 ,其他同理
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 做郵件伺服器,開啟25,110埠
iptables -A INPUT -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
# 允許icmp包通過,允許ping
iptables -A OUTPUT -p icmp -j ACCEPT (OUTPUT設置成DROP的話)
iptables -A INPUT -p icmp -j ACCEPT (INPUT設置成DROP的話)
# 允許loopback!(不然會導致DNS無法正常關閉等問題)
IPTABLES -A INPUT -i lo -p all -j ACCEPT (如果是INPUT DROP)
IPTABLES -A OUTPUT -o lo -p all -j ACCEPT(如果是OUTPUT DROP)

}

centos6的iptables基本配置{
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -s 222.186.135.61 -p tcp -j ACCEPT
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,URG RST -j DROP
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
}

添加網段轉發{

# 例如通過vpn上網
echo 1 > /proc/sys/net/ipv4/ip_forward # 在內核里打開ip轉發功能
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE # 添加網段轉發
iptables -t nat -A POSTROUTING -s 10.0.0.0/255.0.0.0 -o eth0 -j SNAT --to 192.168.10.158 # 原IP網段經過哪個網卡IP出去
iptables -t nat -nL # 查看轉發

}

埠映射{

# 內網通過有外網IP的機器映射埠
# 內網主機添加路由
route add -net 10.10.20.0 netmask 255.255.255.0 gw 10.10.20.111 # 內網需要添加預設網關,並且網關開啟轉發
# 網關主機
echo 1 > /proc/sys/net/ipv4/ip_forward # 在內核里打開ip轉發功能
iptables -t nat -A PREROUTING -d 外網IP -p tcp --dport 9999 -j DNAT --to 10.10.20.55:22 # 進入
iptables -t nat -A POSTROUTING -s 10.10.20.0/24 -j SNAT --to 外網IP # 轉發回去
iptables -t nat -nL # 查看轉發

}

}

}

4 服務{

/etc/init.d/sendmail start # 啟動服務
/etc/init.d/sendmail stop # 關閉服務
/etc/init.d/sendmail status # 查看服務當前狀態
/date/mysql/bin/mysqld_safe --user=mysql & # 啟動mysql後臺運行
vi /etc/rc.d/rc.local # 開機啟動執行 可用於開機啟動腳本
/etc/rc.d/rc3.d/S55sshd # 開機啟動和關機關閉服務連接 # S開機start K關機stop 55級別 後跟服務名
ln -s -f /date/httpd/bin/apachectl /etc/rc.d/rc3.d/S15httpd # 將啟動程式腳本連接到開機啟動目錄
ipvsadm -ln # lvs查看後端負載機併發
ipvsadm -C # lvs清除規則
xm list # 查看xen虛擬主機列表
virsh # 虛擬化(xen\kvm)管理工具 yum groupinstall Virtual*
./bin/httpd -M # 查看httpd載入模塊
httpd -t -D DUMP_MODULES # rpm包httpd查看載入模塊
echo 內容| /bin/mail -s "標題" 收件箱 -f 發件人 # 發送郵件
"`echo "內容"|iconv -f utf8 -t gbk`" | /bin/mail -s "`echo "標題"|iconv -f utf8 -t gbk`" 收件箱 # 解決郵件亂碼
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg # 檢測nagios配置文件

chkconfig{

chkconfig 服務名 on|off|set # 設置非獨立服務啟狀態
chkconfig --level 35 httpd off # 讓服務不自動啟動
chkconfig --level 35 httpd on # 讓服務自動啟動 35指的是運行級別
chkconfig --list # 查看所有服務的啟動狀態
chkconfig --list |grep httpd # 查看某個服務的啟動狀態
chkconfig –-list [服務名稱] # 查看服務的狀態

}

nginx{

yum install -y make gcc openssl-devel pcre-devel bzip2-devel libxml2 libxml2-devel curl-devel libmcrypt-devel libjpeg libjpeg-devel libpng libpng-devel openssl

groupadd nginx
useradd nginx -g nginx -M -s /sbin/nologin

mkdir -p /opt/nginx-tmp

wget http://labs.frickle.com/files/ngx_cache_purge-1.6.tar.gz
tar fxz ngx_cache_purge-1.6.tar.gz
# ngx_cache_purge 清除指定url緩存
# 假設一個URL為 http://192.168.12.133/test.txt
# 通過訪問 http://192.168.12.133/purge/test.txt 就可以清除該URL的緩存。

tar zxvpf nginx-1.4.4.tar.gz
cd nginx-1.4.4

# ./configure --help
# --with # 預設不載入 需指定編譯此參數才使用
# --without # 預設載入,可用此參數禁用
# --add-module=path # 添加模塊的路徑
# --add-module=/opt/ngx_module_upstream_check \ # nginx 代理狀態頁面
# ngx_module_upstream_check 編譯前需要打對應版本補丁 patch -p1 < /opt/nginx_upstream_check_module/check_1.2.6+.patch
# --add-module=/opt/ngx_module_memc \ # 將請求頁面數據存放在 memcached中
# --add-module=/opt/ngx_module_lua \ # 支持lua腳本 yum install lua-devel lua

./configure \
--user=nginx \
--group=nginx \
--prefix=/usr/local/nginx \
--pid-path=/usr/local/nginx/nginx.pid \
--lock-path=/usr/local/nginx/nginx.lock \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--add-module=/opt/ngx_cache_purge-1.6 \
--http-client-body-temp-path=/opt/nginx-tmp/client \
--http-proxy-temp-path=/opt/nginx-tmp/proxy \
--http-fastcgi-temp-path=/opt/nginx-tmp/fastcgi \
--http-uwsgi-temp-path=/opt/nginx-tmp/uwsgi \
--http-scgi-temp-path=/opt/nginx-tmp/scgi

make && make install

/usr/local/nginx/sbin/nginx –t # 檢查Nginx配置文件 但並不執行
/usr/local/nginx/sbin/nginx -t -c /opt/nginx/conf/nginx.conf # 檢查Nginx配置文件
/usr/local/nginx/sbin/nginx # 啟動nginx
/usr/local/nginx/sbin/nginx -s reload # 重載配置
/usr/local/nginx/sbin/nginx -s stop # 關閉nginx服務

}

httpd{

編譯參數{

# so模塊用來提供DSO支持的apache核心模塊
# 如果編譯中包含任何DSO模塊,則mod_so會被自動包含進核心。
# 如果希望核心能夠裝載DSO,但不實際編譯任何DSO模塊,則需明確指定"--enable-so=static"

./configure --prefix=/usr/local/apache --enable-so --enable-mods-shared=most --enable-rewrite --enable-forward # 實例編譯

--with-mpm=worker # 已worker方式運行
--with-apxs=/usr/local/apache/bin/apxs # 製作apache的動態模塊DSO rpm包 httpd-devel #編譯模塊 apxs -i -a -c mod_foo.c
--enable-so # 讓Apache可以支持DSO模式
--enable-mods-shared=most # 告訴編譯器將所有標準模塊都動態編譯為DSO模塊
--enable-rewrite # 支持地址重寫功能
--enable-module=most # 用most可以將一些不常用的,不在預設常用模塊中的模塊編譯進來
--enable-mods-shared=all # 意思是動態載入所有模塊,如果去掉-shared話,是靜態載入所有模塊
--enable-expires # 可以添加文件過期的限制,有效減輕伺服器壓力,緩存在用戶端,有效期內不會再次訪問伺服器,除非按f5刷新,但也導致文件更新不及時
--enable-deflate # 壓縮功能,網頁可以達到40%的壓縮,節省帶寬成本,但會對cpu壓力有一點提高
--enable-headers # 文件頭信息改寫,壓縮功能需要
--disable-MODULE # 禁用MODULE模塊(僅用於基本模塊)
--enable-MODULE=shared # 將MODULE編譯為DSO(可用於所有模塊)
--enable-mods-shared=MODULE-LIST # 將MODULE-LIST中的所有模塊都編譯成DSO(可用於所有模塊)
--enable-modules=MODULE-LIST # 將MODULE-LIST靜態連接進核心(可用於所有模塊)

# 上述 MODULE-LIST 可以是:
1、用引號界定並且用空格分隔的模塊名列表 --enable-mods-shared='headers rewrite dav'
2、"most"(大多數模塊) --enable-mods-shared=most
3、"all"(所有模塊)

}

轉發{

#針對非80埠的請求處理
RewriteCond %{SERVER_PORT} !^80$
RewriteRule ^/(.*) http://fully.qualified.domain.name:%{SERVER_PORT}/$1 [L,R]

RewriteCond %{HTTP_HOST} ^ss.aa.com [NC]
RewriteRule ^(.*) http://www.aa.com/so/$1/0/p0? [L,R=301]
#RewriteRule 只對?前處理,所以會把?後的都保留下來
#在轉發後地址後加?即可取消RewriteRule保留的字元
#R的含義是redirect,即重定向,該請求不會再被apache交給後端處理,而是直接返回給瀏覽器進行重定向跳轉。301是返回的http狀態碼,具體可以參考http rfc文檔,跳轉都是3XX。
#L是last,即最後一個rewrite規則,如果請求被此規則命中,將不會繼續再向下匹配其他規則。

}

}

mysql源碼安裝{

groupadd mysql
useradd mysql -g mysql -M -s /bin/false
tar zxvf mysql-5.0.22.tar.gz
cd mysql-5.0.22
./configure --prefix=/usr/local/mysql \
--with-client-ldflags=-all-static \
--with-mysqld-ldflags=-all-static \
--with-mysqld-user=mysql \
--with-extra-charsets=all \
--with-unix-socket-path=/var/tmp/mysql.sock
make && make install
# 生成mysql用戶資料庫和表文件,在安裝包中輸入
scripts/mysql_install_db --user=mysql
vi ~/.bashrc
export PATH="$PATH: /usr/local/mysql/bin"
# 配置文件,有large,medium,small三個,根據機器性能選擇
cp support-files/my-medium.cnf /etc/my.cnf
cp support-files/mysql.server /etc/init.d/mysqld
chmod 700 /etc/init.d/mysqld
cd /usr/local
chmod 750 mysql -R
c

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 環境:ubuntu16.04 交叉編譯器版本號:4.8.3 在編譯之前要編譯以下其依賴的軟體或庫:freetype,libpng,libxml2,libtiff,libjpeg,zlib,graphviz zlib庫 1.tar xvf zlib-1.2.11.tar.xz 2.export CC= ...
  • 用途說明 在執行Linux命令時,我們可以把輸出重定向到文件中,比如 ls >a.txt,這時我們就不能看到輸出了,如果我們既想把輸出保存到文件中,又想在屏幕上看到輸出內容,就可以使用tee命令了。tee命令讀取標準輸入,把這些內容同時輸出到標準輸出和(多個)文件中。要註意的是:在使用管道線時,前一 ...
  • 本文就linux中的壓縮工具gzip、bzip2和xz以及打包工具tar做出介紹,基本上能夠滿足工作中的需求和日常的使用。 ...
  • 當在Windows刪除文件時出現找不到該項目或者顯示該文件不在磁碟中,可以嘗試以下方法: 在要刪除文件的同級目錄下 新建一文本文檔,將下列代碼複製到文檔中,將文檔保存為尾碼名為.bat的文檔(名字隨意), DEL /F /A /Q \\?\%1 RD /S /Q \\?\%1 把你想刪除的文件或文件 ...
  • Linux系統擴容方法彙總 相信很多朋友都有過這樣的經歷,本想裝個Ubantu玩玩,沒想到玩久了反而不習慣Windows了,然而開始裝系統的時候只分配了非常小的空間,那應該怎樣擴展我們的ubantu呢?下麵我為大家總結幾種方法(僅在ubantu下測試過) 一、通過系統整體遷移 首先:進入Window ...
  • Cobbler(補鞋匠)是通過將DHCP、TFTP、DNS、HTTP等服務進行集成,創建一個中央管理節點,其可以實現的功能有配置服務,創建存儲庫,解壓縮操作系統媒介,代理或集成一個配置管理系統,控制電源管理等。 Cobbler的最終目的是實現無需進行人工干預即可安裝機器。 pxe概述 預啟動執行環境 ...
  • boot分區是系統啟動中最重要的部分,如果伺服器由於病毒攻擊又或者被管理員誤刪除了boot分區。那麼就會存在潛在的風險。為什麼說是潛在的風險?因為boot分區被刪除後系統仍在繼續運行,看似無狀況但是在執行關機操作後就會無法啟動。 大致步驟 恢復過程 1.首先查看系統的磁碟情況,根目錄在邏輯捲,boo ...
  • 在windows系統中個,每個進程擁有自己獨立的虛擬地址空間(Virtual Address Space)。這一地址空間的大小與電腦硬體、操作系統以及應用程式都有關係。 對於32位程式來說,最多能使用2GB空間(0x00010000-0x7FFEFFFF)。為了獲得3GB的地址空間,在不同的win ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...