原文地址:http://hi.baidu.com/quanzhou722/item/f4a4f3c9eb37f02d46d5c0d9html
shell實例手冊node
0說明{
python
請使用"notepad++"打開此文檔,"alt+0"將函數摺疊後方便查閱
mysql
請勿刪除信息,轉載請說明出處,抵制不道德行爲。linux
錯誤在所不免,還望指正!ios
# shell實例手冊最新下載地址:程序員
http://hi.baidu.com/quanzhou722/item/f4a4f3c9eb37f02d46d5c0d9web
# LazyManage系統批量管理軟件下載(shell):sql
http://hi.baidu.com/quanzhou722/item/4ccf7e88a877eaccef083d1amongodb
# python實例手冊下載地址:
http://hi.baidu.com/quanzhou722/item/cf4471f8e23d3149932af2a7
}
1文件{
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
tail -f file # 查看結尾 監視日誌文件
file # 檢查文件類型
umask # 更改默認權限
uniq # 刪除重複的行
uniq -c # 重複的行出現次數
uniq -u # 只顯示不重複行
paste a b # 將兩個文件合併用tab鍵分隔開
paste -d'+' a b # 將兩個文件合併指定'+'符號隔開
paste -s a # 將多行數據合併到一行用tab鍵隔開
chattr +i /etc/passwd # 設置不可改變位
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 # 將幾個排序好的文件進行合併
+<起始欄位>-<結束欄位> # 以指定的欄位來排序,範圍由起始欄位到結束欄位的前一欄位。
-o # 將排序後的結果存入指定的文
n # 表示進行排序
r # 表示逆序
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 / -mtime +n # 文件內容改變時間在N天之前
find / -ctime +n # 文件狀態改變時間在N天前
find / -ctime -n # 文件狀態改變時間在N天內
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 -zcvf myfile.tar.gz /home/* /etc # 打包/home, /etc ,但排除 /home/dmtsai
tar -N "2005/06/01" -zcvf home.tar.gz /home # 在 /home 當中,比 2005/06/01 新的文件才備份
tar -zcvfh home.tar.gz /home # 打包目錄中包括鏈接目錄
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 export $Code$File ${SvnPath}src/$File # 導出個別文件
}
恢復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信息開始恢復目錄
}
}
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的簽名信息
}
yum{
yum list # 查找全部列表
yum install 包名 # 安裝包和依賴包
yum -y update # 升級全部包版本,依賴關係,系統版本內核都升級
yum -y update 軟件包名 # 升級指定的軟件包
yum -y upgrade # 不改變軟件設置更新軟件,系統版本升級,內核不改變
yum search mail # yum搜索相關包
yum grouplist # 軟件包組
yum -y groupinstall "Virtualization" # 安裝軟件包組
}
yum擴展源{
# 包下載地址:http://download.fedoraproject.org/pub/epel # 選擇版本
wget http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
rpm -Uvh epel-release-5-4.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 install # 安裝包
make clean # 清除編譯結果
}
perl程序編譯{
perl Makefile.PL
make
make test
make install
}
python程序編譯{
python file.py
}
編譯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系統當前單個共享內存段的最大值
lsof |grep /lib # 查看加載庫文件
ldconfig # 動態連接庫管理命令
dist-upgrade # 會改變配置文件,改變舊的依賴關係,改變系統版本
/boot/grub/grub.conf # grub啓動項配置
sysctl -p # 修改內核參數/etc/sysctl.conf,讓/etc/rc.d/rc.sysinit讀取生效
mkpasswd -l 8 -C 2 -c 2 -d 4 -s 0 # 隨機生成指定類型密碼
echo 1 > /proc/sys/net/ipv4/tcp_syncookies # 使TCP SYN Cookie 保護生效 # "SYN Attack"是一種拒絕服務的***方式
開機啓動腳本順序{
/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 aux |grep -v USER | sort -nk +4 | tail # 顯示消耗內存最多的10個運行中的進程,之內存使用量排序.cpu +3
top{
前五行是系統總體的統計信息。
第一行: 任務隊列信息,同 uptime 命令的執行結果。內容以下:
01:06:48 當前時間
up 1:22 系統運行時間,格式爲時:分
user 當前登陸用戶數
load average: 0.06, 0.60, 0.48 系統負載,即任務隊列的平均長度。
三個數值分別爲 1分鐘、5分鐘、15分鐘前到如今的平均值。
第2、三行:爲進程和CPU的信息。當有多個CPU時,這些內容可能會超過兩行。內容以下:
Tasks: 29 total 進程總數
running 正在運行的進程數
sleeping 睡眠的進程數
stopped 中止的進程數
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
第4、五行:爲內存信息。內容以下:
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
}
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 信號不能被忽略
}
}
日誌管理{
history # 歷時命令默認1000條
HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S " # 讓history命令顯示具體時間
history -c # 清除記錄命令
cat $HOME/.bash_history # 歷史命令記錄文件
last # 查看登錄過的用戶信息
who /var/log/wtmp # 查看登錄過的用戶信息
lastlog # 用戶最後登陸的時間
lastb -a # 列出登陸系統失敗的用戶相關信息
/var/log/btmp # 登陸失敗二進制日誌記錄文件
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 # 列出全部語系
hwclock # 查看時間
who # 當前在線用戶
w # 當前在線用戶
whoami # 查看當前用戶名
logname # 查看初始登錄用戶名
uptime # 查看服務器啓動時間
sar -n DEV 1 10 # 查看網卡網速流量
dmesg # 顯示開機信息
lsmod # 查看內核模塊
}
硬件信息{
more /proc/cpuinfo # 查看cpu信息
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c # 查看cpu型號和邏輯核心數
getconf LONG_BIT # cpu運行的位數
cat /proc/cpuinfo | grep physical | 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 # 查看網卡驅動版本
}
終端快捷鍵{
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{
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 +%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" # 格式化系統啓動時間(多少秒前)
}
最大鏈接數{
ulimit -SHn 65535 # 修改最大打開文件數(等同最大鏈接數)
ulimit -a # 查看
/etc/security/limits.conf # 進程最大打開文件數
# nofile 能夠被理解爲是文件句柄數 文件描述符 還有socket數
* soft nofile 65535
* hard nofile 65535
# 最大進程數
* soft nproc 65535
* hard nproc 65535
# 若是/etc/security/limits.d/有配置文件,將會覆蓋/etc/security/limits.conf裏的配置
# 即/etc/security/limits.d/的配置文件裏就不要有一樣的參量設置
/etc/security/limits.d/90-nproc.conf # centos6.3的最大進程數文件
* soft nproc 65535
* hard nproc 65535
}
sudo{
visudo # sudo命令權限添加
用戶 別名(可用all)=NOPASSWD:命令1,命令2
wangming linuxfan=NOPASSWD:/sbin/apache start,/sbin/apache restart
UserName ALL=(ALL) 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
# 容許已創建的或相關連的通行
iptables -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)
}
添加網段轉發{
# 例如經過***上網
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的機器映射端口
echo 1 > /proc/sys/net/ipv4/ip_forward # 在內核裏打開ip轉發功能
route add -net 10.10.20.0 netmask 255.255.255.0 gw 10.10.20.111 # 內網須要添加默認網關,而且網關開啓轉發
iptables -t nat -A PREROUTING -d 192.168.10.158 -p tcp --dport 9999 -j DNAT --to 10.10.20.55:22
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 [服務名稱] # 查看服務的狀態
}
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 能夠是:
一、用引號界定而且用空格分隔的模塊名列表 --enable-mods-shared='headers rewrite dav'
二、"most"(大多數模塊) --enable-mods-shared=most
三、"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
chgrp mysql mysql -R
chown mysql mysql/var -R
cp /usr/local/mysql/libexec/mysqld mysqld.old
ln -s /usr/local/mysql/bin/mysql /sbin/mysql
ln -s /usr/local/mysql/bin/mysqladmin /sbin/mysqladmin
ln -s -f /usr/local/mysql/bin/mysqld_safe /etc/rc.d/rc3.d/S15mysql5
ln -s -f /usr/local/mysql/bin/mysqld_safe /etc/rc.d/rc0.d/K15mysql5
}
mysql經常使用命令{
./mysql/bin/mysqld_safe --user=mysql & # 啓動mysql服務
./mysql/bin/mysqladmin -uroot -p -S ./mysql/data/mysql.sock shutdown # 中止mysql服務
mysqlcheck -uroot -p -S mysql.sock --optimize --databases account # 檢查、修復、優化MyISAM表
mysqlbinlog slave-relay-bin.000001 # 查看二進制日誌(報錯加絕對路徑)
mysqladmin -h myhost -u root -p create dbname # 建立數據庫
flush privileges; # 刷新
show databases; # 顯示全部數據庫
use dbname; # 打開數據庫
show tables; # 顯示選中數據庫中全部的表
desc tables; # 查看錶結構
drop database name; # 刪除數據庫
drop table name; # 刪除表
create database name; # 建立數據庫
select 列名稱 from 表名稱; # 查詢
show grants for repl; # 查看用戶權限
show processlist; # 查看mysql進程
select user(); # 查看全部用戶
show slave status\G; # 查看主從狀態
show variables; # 查看全部參數變量
show table status # 查看錶的引擎狀態
drop table if exists user # 表存在就刪除
create table if not exists user # 表不存在就建立
select host,user,password from user; # 查詢用戶權限 先use mysql
create table ka(ka_id varchar(6),qianshu int); # 建立表
SHOW VARIABLES LIKE 'character_set_%'; # 查看系統的字符集和排序方式的設定
show variables like '%timeout%'; # 查看超時(wait_timeout)
delete from user where user=''; # 刪除空用戶
delete from user where user='sss' and host='localhost' ; # 刪除用戶
ALTER TABLE mytable ENGINE = MyISAM ; # 改變現有的表使用的存儲引擎
SHOW TABLE STATUS from 庫名 where Name='表名'; # 查詢表引擎
CREATE TABLE innodb (id int, title char(20)) ENGINE = INNODB # 建立表指定存儲引擎的類型(MyISAM或INNODB)
grant replication slave on *.* to '用戶'@'%' identified by '密碼'; # 建立主從複製用戶
ALTER TABLE player ADD INDEX weekcredit_faction_index (weekcredit, faction); # 添加索引
alter table name add column accountid(列名) int(11) NOT NULL(字段不爲空); # 插入字段
update host set monitor_state='Y',hostname='xuesong' where ip='192.168.1.1'; # 更新數據
自增表{
create table oldBoy (id INTEGER PRIMARY KEY AUTO_INCREMENT, name CHAR(30) NOT NULL, age integer , sex CHAR(15) ); # 建立自增表
insert into oldBoy(name,age,sex) values(%s,%s,%s) # 自增插入數據
}
登陸mysql的命令{
# 格式: mysql -h 主機地址 -u 用戶名 -p 用戶密碼
mysql -h110.110.110.110 -P3306 -uroot -p
mysql -uroot -p -S /data1/mysql5/data/mysql.sock -A --default-character-set=GBK
}
shell執行mysql命令{
mysql -u$username -p$passwd -h$dbhost -P$dbport -A -e "
use $dbname;
delete from data where date=('$date1');
" # 執行多條mysql命令
mysql -uroot -p -S mysql.sock -e "use db;alter table gift add column accountid int(11) NOT NULL;flush privileges;" # 不登錄mysql插入字段
}
備份數據庫{
mysqldump -h host -u root -p --default-character-set=utf8 dbname >dbname_backup.sql # 不包括庫名,還原需先建立庫,在use
mysqldump -h host -u root -p --database --default-character-set=utf8 dbname >dbname_backup.sql # 包括庫名,還原不須要建立庫
/bin/mysqlhotcopy -u root -p # mysqlhotcopy只能備份MyISAM引擎
mysqldump -u root -p -S mysql.sock --default-character-set=utf8 dbname table1 table2 > /data/db.sql # 備份表
mysqldump -uroot -p123 -d database > database.sql # 備份數據庫結構
innobackupex --user=root --password="" --defaults-file=/data/mysql5/data/my_3306.cnf --socket=/data/mysql5/data/mysql.sock --slave-info --stream=tar --tmpdir=/data/dbbackup/temp /data/dbbackup/ 2>/data/dbbackup/dbbackup.log | gzip 1>/data/dbbackup/db50.tar.gz # xtrabackup備份需單獨安裝軟件 優勢: 速度快,壓力小,可直接恢復主從複製
}
還原數據庫{
mysql -h host -u root -p dbname < dbname_backup.sql
source 路徑.sql # 登錄mysql後還原sql文件
}
賦權限{
# 指定IP: $IP 本機: localhost 全部IP地址: % # 一般指定多條
grant all on zabbix.* to user@"$IP"; # 對現有帳號賦予權限
grant select on database.* to user@"%" Identified by "passwd"; # 賦予查詢權限(沒有用戶,直接建立)
grant all privileges on database.* to user@"$IP" identified by 'passwd'; # 賦予指定IP指定用戶全部權限(不容許對當前庫給其餘用戶賦權限)
grant all privileges on database.* to user@"localhost" identified by 'passwd' with grant option; # 賦予本機指定用戶全部權限(容許對當前庫給其餘用戶賦權限)
grant select, insert, update, delete on database.* to user@'ip'identified by "passwd"; # 開放管理操做指令
revoke all on *.* from user@localhost; # 回收權限
}
更改密碼{
update user set password=password('passwd') where user='root'
mysqladmin -u root password 'xuesong'
}
mysql忘記密碼後重置{
cd /data/mysql5
/data/mysql5/bin/mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
update user set password=password('123123') where user='root';
}
mysql主從複製失敗恢復{
slave stop;
reset slave;
change master to master_host='10.10.10.110',master_port=3306,master_user='repl',master_password='repl',master_log_file='master-bin.000010',master_log_pos=107,master_connect_retry=60;
slave start;
}
檢測mysql主從複製延遲{
一、在從庫定時執行更新主庫中的一個timeout數值
二、同時取出從庫中的timeout值對比判斷從庫與主庫的延遲
}
}
mongodb{
1、啓動{
# 不啓動認證
./mongod --port 27017 --fork --logpath=/opt/mongodb/mongodb.log --logappend --dbpath=/opt/mongodb/data/
# 啓動認證
./mongod --port 27017 --fork --logpath=/opt/mongodb/mongodb.log --logappend --dbpath=/opt/mongodb/data/ --auth
# 配置文件方式啓動
cat /opt/mongodb/mongodb.conf
port=27017 # 端口號
fork=true # 以守護進程的方式運行,建立服務器進程
auth=true # 開啓用戶認證
logappend=true # 日誌採用追加方式
logpath=/opt/mongodb/mongodb.log # 日誌輸出文件路徑
dbpath=/opt/mongodb/data/ # 數據庫路徑
shardsvr=true # 設置是否分片
maxConns=600 # 數據庫的最大鏈接數
./mongod -f /opt/mongodb/mongodb.conf
# 其餘參數
bind_ip # 綁定IP 使用mongo登陸須要指定對應IP
journal # 開啓日誌功能,下降單機故障的恢復時間,取代dur參數
syncdelay # 系統同步刷新磁盤的時間,默認60秒
directoryperdb # 每一個db單獨存放目錄,建議設置.與mysql獨立表空間相似
repairpath # 執行repair時的臨時目錄.若是沒開啓journal,出現異常重啓,必須執行repair操做
# mongodb沒有參數設置內存大小.使用os mmap機制緩存數據文件,在數據量不超過內存的狀況下,效率很是高.數據量超過系統可用內存會影響寫入性能
}
2、關閉{
# 方法一:登陸mongodb
./mongo
use admin
db.shutdownServer()
# 方法:kill傳遞信號 兩種皆可
kill -2 pid
kill -15 pid
}
3、開啓認證與用戶管理{
./mongo # 先登陸
use admin # 切換到admin庫
db.addUser("root","123456") # 建立用戶
db.addUser('zhansan','pass',true) # 若是用戶的readOnly爲true那麼這個用戶只能讀取數據,添加一個readOnly用戶zhansan
./mongo 127.0.0.1:27017/mydb -uroot -p123456 # 再次登陸,只能針對用戶所在庫登陸
#雖然是超級管理員,可是admin不能直接登陸其餘數據庫,不然報錯
#Fri Nov 22 15:03:21.886 Error: 18 { code: 18, ok: 0.0, errmsg: "auth fails" } at src/mongo/shell/db.js:228
show collections # 查看連接狀態 再次登陸使用以下命令,顯示錯誤未經受權
db.system.users.find(); # 查看建立用戶信息
db.system.users.remove({user:"zhansan"}) # 刪除用戶
#恢復密碼只須要重啓mongodb 不加--auth參數
}
4、登陸{
192.168.1.5:28017 # http登陸後可查看狀態
./mongo # 默認登陸後打開 test 庫
./mongo 192.168.1.5:27017/databaseName # 直接鏈接某個庫 不存在則建立 啓動認證須要指定對應庫纔可登陸
}
5、查看狀態{
#登陸後執行命令查看狀態
db.runCommand({"serverStatus":1})
globalLock # 表示全局寫入鎖佔用了服務器多少時間(微秒)
mem # 包含服務器內存映射了多少數據,服務器進程的虛擬內存和常駐內存的佔用狀況(MB)
indexCounters # 表示B樹在磁盤檢索(misses)和內存檢索(hits)的次數.若是這兩個比值開始上升,就要考慮添加內存了
backgroudFlushing # 表示後臺作了多少次fsync以及用了多少時間
opcounters # 包含每種主要擦撞的次數
asserts # 統計了斷言的次數
#狀態信息從服務器啓動開始計算,若是過大就會復位,發送復位,全部計數都會復位,asserts中的roolovers值增長
#mongodb自帶的命令
./mongostat
insert #每秒插入量
query #每秒查詢量
update #每秒更新量
delete #每秒刪除量
locked #鎖定量
qr|qw #客戶端查詢排隊長度(讀|寫)
ar|aw #活躍客戶端量(讀|寫)
conn #鏈接數
time #當前時間
}
6、經常使用命令{
db.listCommands() # 當前MongoDB支持的全部命令(一樣可經過運行命令db.runCommand({"listCommands" : `1})來查詢全部命令)
db.runCommand({"buildInfo" : 1}) # 返回MongoDB服務器的版本號和服務器OS的相關信息。
db.runCommand({"collStats" : 集合名}) # 返回該集合的統計信息,包括數據大小,已分配存儲空間大小,索引的大小等。
db.runCommand({"distinct" : 集合名, "key" : 鍵, "query" : 查詢文檔}) # 返回特定文檔全部符合查詢文檔指定條件的文檔的指定鍵的全部不一樣的值。
db.runCommand({"dropDatabase" : 1}) # 清空當前數據庫的信息,包括刪除全部的集合和索引。
db.runCommand({"isMaster" : 1}) # 檢查本服務器是主服務器仍是從服務器。
db.runCommand({"ping" : 1}) # 檢查服務器連接是否正常。即使服務器上鎖,該命令也會當即返回。
db.runCommand({"repaireDatabase" : 1}) # 對當前數據庫進行修復並壓縮,若是數據庫特別大,這個命令會很是耗時。
db.runCommand({"serverStatus" : 1}) # 查看這臺服務器的管理統計信息。
# 某些命令必須在admin數據庫下運行,以下兩個命令:
db.runCommand({"renameCollection" : 集合名, "to":集合名}) # 對集合重命名,注意兩個集合名都要是完整的集合命名空間,如foo.bar, 表示數據庫foo下的集合bar。
db.runCommand({"listDatabases" : 1}) # 列出服務器上全部的數據庫
}
7、進程控制{
db.currentOp() # 查看活動進程
db.$cmd.sys.inprog.findOne() # 查看活動進程 與上面同樣
opid # 操做進程號
op # 操做類型(查詢\更新)
ns # 命名空間,指操做的是哪一個對象
query # 若是操做類型是查詢,這裏將顯示具體的查詢內容
lockType # 鎖的類型,指明是讀鎖仍是寫鎖
db.killOp(opid值) # 結束進程
db.$cmd.sys.killop.findOne({op:opid值}) # 結束進程
}
8、備份還原{
./mongoexport -d test -c t1 -o t1.dat # 導出JSON格式
-c # 指明導出集合
-d # 使用庫
./mongoexport -d test -c t1 -csv -f num -o t1.dat # 導出csv格式
-csv # 指明導出csv格式
-f # 指明須要導出那些例
db.t1.drop() # 登陸後刪除數據
./mongoimport -d test -c t1 -file t1.dat # mongoimport還原JSON格式
./mongoimport -d test -c t1 -type csv --headerline -file t1.dat # mongoimport還原csv格式數據
--headerline # 指明不導入第一行 由於第一行是列名
./mongodump -d test -o /bak/mongodump # mongodump數據備份
./mongorestore -d test --drop /bak/mongodump/* # mongorestore恢復
--drop #恢復前先刪除
db.t1.find() #查看
# mongodump 雖然能不停機備份,但市區了獲取實時數據視圖的能力,使用fsync命令能在運行時複製數據目錄而且不會損壞數據
# fsync會強***務器將全部緩衝區的數據寫入磁盤.配合lock還阻止對數據庫的進一步寫入,知道釋放鎖爲止
# 備份在從庫上備份,不耽誤讀寫還能保證明時快照備份
db.runCommand({"fsync":1,"lock":1}) # 執行強制更新與寫入鎖
db.$cmd.sys.unlock.findOne() # 解鎖
db.currentOp() # 查看解鎖是否正常
}
9、修復{
# 當停電或其餘故障引發不正常關閉時,會形成部分數據損壞丟失
./mongod --repair # 修復操做:啓動時候加上 --repair
# 修復過程:將全部文檔導出,而後立刻導入,忽略無效文檔.完成後重建索引。時間較長,會丟棄損壞文檔
# 修復數據還能起到壓縮數據庫的做用
db.repairDatabase() # 運行中的mongodb可以使用 repairDatabase 修復當前使用的數據庫
{"repairDatabase":1} # 經過驅動程序
}
10、python使用mongodb{
原文: http://blog.nosqlfan.com/html/2989.html
easy_install pymongo # 安裝(python2.7+)
import pymongo
connection=pymongo.Connection('localhost',27017) # 建立鏈接
db = connection.test_database # 切換數據庫
collection = db.test_collection # 獲取collection
# db和collection都是延時建立的,在添加Document時才真正建立
文檔添加, _id自動建立
import datetime
post = {"author": "Mike",
"text": "My first blog post!",
"tags": ["mongodb", "python", "pymongo"],
"date": datetime.datetime.utcnow()}
posts = db.posts
posts.insert(post)
ObjectId('...')
批量插入
new_posts = [{"author": "Mike",
"text": "Another post!",
"tags": ["bulk", "insert"],
"date": datetime.datetime(2009, 11, 12, 11, 14)},
{"author": "Eliot",
"title": "MongoDB is fun",
"text": "and pretty easy too!",
"date": datetime.datetime(2009, 11, 10, 10, 45)}]
posts.insert(new_posts)
[ObjectId('...'), ObjectId('...')]
獲取全部collection
db.collection_names() # 至關於SQL的show tables
獲取單個文檔
posts.find_one()
查詢多個文檔
for post in posts.find():
post
加條件的查詢
posts.find_one({"author": "Mike"})
高級查詢
posts.find({"date": {"$lt": "d"}}).sort("author")
統計數量
posts.count()
加索引
from pymongo import ASCENDING, DESCENDING
posts.create_index([("date", DESCENDING), ("author", ASCENDING)])
查看查詢語句的性能
posts.find({"date": {"$lt": "d"}}).sort("author").explain()["cursor"]
posts.find({"date": {"$lt": "d"}}).sort("author").explain()["nscanned"]
}
}
JDK安裝{
chmod 744 jdk-1_5_0_14-linux-i586.bin
./jdk-1_5_0_14-linux-i586.bin
vi /etc/profile # 添加環境變量
export JAVA_HOME=/usr/local/jdk1.5.0_14
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
. /etc/profile
}
}
5網絡{
rz # 經過ssh上傳小文件
sz # 經過ssh下載小文件
ifconfig eth0 down # 禁用網卡
ifconfig eth0 up # 啓用網卡
ifup eth0:0 # 啓用網卡
mii-tool em1 # 查看網線是否鏈接
traceroute www.baidu.com # 測試跳數
vi /etc/resolv.conf # 設置DNS nameserver IP 定義DNS服務器的IP地址
nslookup www.moon.com # 解析域名IP
dig -x www.baidu.com # 解析域名IP
curl -I www.baidu.com # 查看網頁http頭
tcpdump tcp port 22 # 抓包
lynx # 文本上網
wget -P 路徑 http地址 # 下載 包名:wgetrc
curl -d "user=xuesong&pwd=123" http://www.abc.cn/Result # 提交web頁面表單 需查看錶單提交地址
rsync -avzP -e "ssh -p 22" /dir user@$IP:/dir # 同步目錄 # --delete 無差同步 刪除目錄下其它文件
ifconfig eth0:0 192.168.1.221 netmask 255.255.255.0 # 增長邏輯IP地址
mtr -r www.baidu.com # 測試網絡鏈路節點響應時間 # trace ping 結合
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all # 禁ping
ipcalc -m "$ip" -p "$num" # 根據IP和主機最大數計算掩碼
dig +short txt hacker.wp.dg.cx # 經過 DNS 來讀取 Wikipedia 的hacker詞條
host -t txt hacker.wp.dg.cx # 經過 DNS 來讀取 Wikipedia 的hacker詞條
net rpc shutdown -I IP_ADDRESS -U username%password # 遠程關掉一臺WINDOWS機器
wget --random-wait -r -p -e robots=off -U Mozilla www.example.com # 遞歸方式下載整個網站
netstat{
-a # 顯示全部鏈接中的Socket
-t # 顯示TCP鏈接
-u # 顯示UDP鏈接
-n # 顯示全部已創建的有效鏈接
netstat -anlp # 查看連接
netstat –r # 查看路由表
}
ssh{
ssh -p 22 user@192.168.1.209 # 從linux ssh登陸另外一臺linux
ssh -p 22 root@192.168.1.209 CMD # 利用ssh操做遠程主機
scp -P 22 文件 root@ip:/目錄 # 把本地文件拷貝到遠程主機
sshpass -p '密碼' ssh -n root@$IP "echo hello" # 指定密碼遠程操做
ssh -o StrictHostKeyChecking=no $IP # ssh鏈接不提示yes
ssh -t "su -" # 指定僞終端 客戶端以交互模式工做
scp root@192.168.1.209:遠程目錄 本地目錄 # 把遠程指定文件拷貝到本地
ssh -N -L2001:remotehost:80 user@somemachine # 用SSH建立端口轉發通道
ssh -t host_A ssh host_B # 嵌套使用SSH
ssh -t -p 22 $user@$Ip /bin/su - root -c {$Cmd}; # 遠程su執行命令 Cmd="\"/sbin/ifconfig eth0\""
ssh-keygen -t rsa # 生成密鑰
ssh-copy-id -i xuesong@10.10.10.133 # 傳送key
vi $HOME/.ssh/authorized_keys # 公鑰存放位置
sshfs name@server:/path/to/folder /path/to/mount/point # 經過ssh掛載遠程主機上的文件夾
fusermount -u /path/to/mount/point # 卸載ssh掛載的目錄
ssh user@host cat /path/to/remotefile | diff /path/to/localfile - # 用DIFF對比遠程文件跟本地文件
su - user -c "ssh user@192.168.1.1 \"echo -e aa |mail -s test mail@163.com\"" # 切換用戶登陸遠程發送郵件
}
網卡配置文件{
vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
BROADCAST=192.168.1.255
HWADDR=00:0C:29:3F:E1:EA
IPADDR=192.168.1.55
NETMASK=255.255.255.0
NETWORK=192.168.1.0
ONBOOT=yes
TYPE=Ethernet
GATEWAY=192.168.1.1
}
route {
route # 查看路由表
route add default gw 192.168.1.1 dev eth0 # 添加默認路由
route add -net 172.16.0.0 netmask 255.255.0.0 gw 10.39.111.254 # 添加靜態路由網關
route del -net 172.16.0.0 netmask 255.255.0.0 gw 10.39.111.254 # 刪除靜態路由網關
}
解決ssh連接慢{
sed -i 's/GSSAPIAuthentication yes/GSSAPIAuthentication no/' /etc/ssh/sshd_config
sed -i '/#UseDNS yes/a\UseDNS no' /etc/ssh/sshd_config
/etc/init.d/sshd restart
}
ftp上傳{
ftp -i -v -n $HOST <<END
user $USERNAME $PASSWORD
cd /ftp
mkdir data
cd data
mput *.tar.gz
bye
END
}
nmap{
nmap -PT 192.168.1.1-111 # 先ping在掃描主機開放端口
nmap -O 192.168.1.1 # 掃描出系統內核版本
nmap -sV 192.168.1.1-111 # 掃描端口的軟件版本
nmap -sS 192.168.1.1-111 # 半開掃描(一般不會記錄日誌)
nmap -P0 192.168.1.1-111 # 不ping直接掃描
nmap -d 192.168.1.1-111 # 詳細信息
nmap -D 192.168.1.1-111 # 沒法找出真正掃描主機(隱藏IP)
nmap -p 20-30,139,60000- # 端口範圍 表示:掃描20到30號端口,139號端口以及全部大於60000的端口
nmap -P0 -sV -O -v 192.168.30.251 # 組合掃描(不ping、軟件版本、內核版本、詳細信息)
# 不支持windows的掃描(可用於判斷是不是windows)
nmap -sF 192.168.1.1-111
nmap -sX 192.168.1.1-111
nmap -sN 192.168.1.1-111
}
流量切分線路{
# 程序判斷進入IP線路,設置服務器路由規則控制返回
vi /etc/iproute2/rt_tables
#添加一條策略
bgp2 #注意策略的序號順序
ip route add default via 第二個出口上線IP(非默認網關) dev eth1 table bgp2
ip route add from 本機第二個ip table bgp2
#查看
ip route list table 252
ip rule list
#成功後將語句添加開機啓動
}
snmp{
snmptranslate .1.3.6.1.2.1.1.3.0 # 查看映射關係
DISMAN-EVENT-MIB::sysUpTimeInstance
snmpdf -v 1 -c public localhost # SNMP監視遠程主機的磁盤空間
snmpnetstat -v 2c -c public -a 192.168.6.53 # SNMP獲取指定IP的全部開放端口狀態
snmpwalk -v 2c -c public 10.152.14.117 .1.3.6.1.2.1.1.3.0 # SNMP獲取主機啓動時間
# MIB安裝(ubuntu)
# sudo apt-get install snmp-mibs-downloader
# sudo download-mibs
snmpwalk -v 2c -c public 10.152.14.117 sysUpTimeInstance # SNMP經過MIB庫獲取主機啓動時間
}
}
6磁盤{
df -Ph # 查看硬盤容量
df -T # 查看磁盤分區格式
df -i # 查看inode節點 若是inode用滿後沒法建立文件
du -h 目錄 # 檢測目錄下全部文件大小
du -sh * # 顯示當前目錄中子目錄的大小
iostat -x # 查看磁盤io狀態
mount # 查看分區掛載狀況
fdisk -l # 查看磁盤分區狀態
fdisk /dev/hda3 # 分區
mkfs -t ext3 /dev/hda3 # 格式化分區
fsck -y /dev/sda6 # 對文件系統修復
lsof |grep delete # 釋放進程佔用磁盤空間 列出進程後,查看文件是否存在,不存在則kill掉此進程
tmpwatch -afv 3 # 刪除3小時內的臨時文件
cat /proc/filesystems # 查看當前系統支持文件系統
mount -o remount,rw / # 修改只讀文件系統爲讀寫
smartctl -H /dev/sda # 檢測硬盤狀態
smartctl -i /dev/sda # 檢測硬盤信息
smartctl -a /dev/sda # 檢測全部信息
e2label /dev/sda5 # 查看卷標
e2label /dev/sda5 new-label # 建立卷標
ntfslabel -v /dev/sda8 new-label # NTFS添加捲標
tune2fs -j /dev/sda # ext2分區轉ext3分區
mke2fs -b 2048 /dev/sda5 # 指定索引塊大小
dumpe2fs -h /dev/sda5 # 查看超級塊的信息
mount -t iso9660 /dev/dvd /mnt # 掛載光驅
mount -t ntfs-3g /dev/sdc1 /media/yidong # 掛載ntfs硬盤
mount -t nfs 10.0.0.3:/opt/p_w_picpaths/ /data/img # 掛載nfs
mount -o loop /software/rhel4.6.iso /mnt/ # 掛載鏡像文件
建立swap文件方法{
dd if=/dev/zero of=/swap bs=1024 count=4096000 # 建立一個足夠大的文件
# count的值等於1024 x 你想要的文件大小, 4096000是4G
mkswap /swap # 把這個文件變成swap文件
swapon /swap # 啓用這個swap文件
/swap swap swap defaults 0 0 # 在每次開機的時候自動加載swap文件, 須要在 /etc/fstab 文件中增長一行
cat /proc/swaps # 查看swap
swapoff -a # 關閉swap
swapon -a # 開啓swap
}
新硬盤掛載{
fdisk /dev/sdc
p # 打印分區
d # 刪除分區
n # 建立分區,(一塊硬盤最多4個主分區,擴展佔一個主分區位置。p主分區 e擴展)
w # 保存退出
mkfs -t ext3 -L 卷標 /dev/sdc1 # 格式化相應分區
mount /dev/sdc1 /mnt # 掛載
vi /etc/fstab # 添加開機掛載分區
LABEL=/data /data ext3 defaults 1 2 # 用卷標掛載
/dev/sdb1 /data4 ext3 defaults 1 2 # 用真實分區掛載
/dev/sdb2 /data4 ext3 noatime,defaults 1 2
第一個數字"1"該選項被"dump"命令使用來檢查一個文件系統應該以多快頻率進行轉儲,若不須要轉儲就設置該字段爲0
第二個數字"2"該字段被fsck命令用來決定在啓動時須要被掃描的文件系統的順序,根文件系統"/"對應該字段的值應該爲1,其餘文件系統應該爲2。若該文件系統無需在啓動時掃描則設置該字段爲0
當以 noatime 選項加載(mount)文件系統時,對文件的讀取不會更新文件屬性中的atime信息。設置noatime的重要性是消除了文件系統對文件的寫操做,文件只是簡單地被系統讀取。因爲寫操做相對讀來講要更消耗系統資源,因此這樣設置能夠明顯提升服務器的性能.wtime信息仍然有效,任什麼時候候文件被寫,該信息仍被更新。
}
raid原理與區別{
raid0至少2塊硬盤.吞吐量大,性能好,同時讀寫,但損壞一個就完蛋
raid1至少2塊硬盤.至關鏡像,一個存儲,一個備份.安全性比較高.可是性能比0弱
raid5至少3塊硬盤.分別存儲校驗信息和數據,壞了一個根據校驗信息能恢復
raid6至少4塊硬盤.兩個獨立的奇偶系統,可壞兩塊磁盤,寫性能很是差
}
}
7用戶{
users # 顯示全部的登陸用戶
groups # 列出當前用戶和他所屬的組
who -q # 顯示全部的登陸用戶
groupadd # 添加組
useradd user # 創建用戶
passwd 用戶 # 修改密碼
userdel -r # 刪除賬號及家目錄
chown -R user:group # 修改目錄擁有者(R遞歸)
chown y\.li:mysql # 修改全部者用戶中包含點"."
umask # 設置用戶文件和目錄的文件建立缺省屏蔽值
chgrp # 修改用戶組
finger # 查找用戶顯示信息
echo "xuesong" | passwd user --stdin # 非交互修改密碼
useradd -g www -M -s /sbin/nologin www # 指定組並不容許登陸的用戶,nologin容許使用服務
useradd -g www -M -s /bin/false www # 指定組並不容許登陸的用戶,false最爲嚴格
usermod -l 新用戶名 老用戶名 # 修改用戶名
usermod -g user group # 修改用戶所屬組
usermod -d 目錄 -m 用戶 # 修改用戶家目錄
usermod -G group user # 將用戶添加到附加組
gpasswd -d user group # 從組中刪除用戶
su - user -c " #命令1; " # 切換用戶執行
恢復密碼{
# 即進入單用戶模式: 在linux出現grub後,在安裝的系統上面按"e",而後出現grub的配置文件,按鍵盤移動光標到第二行"Ker……",再按"e",而後在這一行的結尾加上:空格 single或者空格1回車,而後按"b"重啓,就進入了"單用戶模式"
}
特殊權限{
s或 S (SUID):對應數值4
s或 S (SGID):對應數值2
t或 T :對應數值1
大S:表明擁有root權限,可是沒有執行權限
小s:擁有特權且擁有執行權限,這個文件能夠訪問系統任何root用戶能夠訪問的資源
T或T(Sticky):/tmp和 /var/tmp目錄供全部用戶暫時存取文件,亦即每位用戶皆擁有完整的權限進入該目錄,去瀏覽、刪除和移動文件
}
}