阿銘linux筆記
2015-09-06虛擬機網絡設置.wmv:
curl 獲取在命令行顯示的網頁
dhclient 分配ip地址
ifdown eth0 關閉網卡eth0
ifup eh0 開啟網卡eth0
ifconfig -a 查看所有網卡設備
service network restart
dhclient 獲取ip命令
rout -n 查看網關
命令行光標移動快捷鍵:
Ctrl+a 移動光標到行首
Ctrl+e 移動光標到行尾
linux里面root為最高權限用戶
centos 進入命令行 ctrl+alt+f2
在命令行下 Ctrl+Alt+F2進入圖形界面
安裝php時缺少的庫:
yum install -y libxml2-devel openssl openssl-devel bzip2 bzip2-devel libpng libpng-devel freetype freetype-devel curl-devel libjpeg-devel
linux系統運行級別
命令:init[0123456]
運行級別
0:關機
1:單用戶
2:多用戶狀態沒有網絡服務
3:多用戶狀態有網絡服務
4:系統未使用保留給用戶
5:圖形界面
6:系統重啟
常用運行級別是3和5,要修改默認的運行級別可改文件/etc/inittab的id:5:initdefault:這一行中的數字
通過歷史記錄簡化操作:
?。?nbsp; 重復前一個命令
!字符 重復前一個以“字符”開頭的命令
?。縜bc 重復之前包含abc的命令
!-n 重復n個命令之前的那個命令
linux配置ip
vi /etc/sysconfig/network-scripts/ifcfg-eth0
配置如下內容
DEVICE=eth0
HWADDR=00:0C:29:16:08:DD
TYPE=Ethernet
UUID=0884c1cf-6613-4c57-9a81-fa27b9723fb1
ONBOOT=no
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.1.177
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=192.168.1.1
保存退出,service network restart 重啟網絡命令。
Centos普通用戶設置sudo權限
登陸root用戶執行visudo命令
找到 root ALL=(ALL) ALL下 在下面增加:
centos ALL=(ALL) ALL
查看centos版本
登陸root帳戶,輸入 cat /etc/redhat-release,即可顯示系統版本
輸入 uname -r ,可以查詢內核版本。
查看安裝的軟件包
輸入 cat -n /root/install.log,可顯示系統安裝時所安裝的軟件包列表。(需要root權限)
獲取搜狐源
wget
基本的語法是:wget [參數列表] URL
wget -r http://place.your.url/here
這個命令會按照遞歸的方法,下載服務器上所有的目錄和文件,實質就是下載整個網站。這個命令一定要小心使用,因為在下載的時候,被下載網站指向的所有地址 同樣會被下載,因此,如果這個網站引用了其他網站,那么被引用的網站也會被下載下來!基于這個原因,這個參數不常用。可以用-l number參數來指定下載的層次。例如只下載兩層,那么使用-l 2。
要是您想制作鏡像站點,那么可以使用-m參數,例如:wget -m http://place.your.url/here
這時wget會自動判斷合適的參數來制作鏡像站點。此時,wget會登錄到服務器上,讀入robots.txt并按robots.txt的規定來執行。
wget -c http://the.url.of/incomplete/file
使用斷點續傳要求服務器支持斷點續傳。-t參數表示重試次數,例如需要重試100次,那么就寫-t 100,如果設成-t 0,那么表示無窮次重試,直到連接成功。-T參數表示超時等待時間,例如-T 120,表示等待120秒連接不上就算超時。
3、批量下載。
如果有多個文件需要下載,那么可以生成一個文件,把每個文件的URL寫一行,例如生成文件download.txt,然后用命令:wget -i download.txt
如果有多個文件需要下載,那么可以生成一個文件,把每個文件的URL寫一行,例如生成文件download.txt,然后用命令:wget -i download.txt
這樣就會把download.txt里面列出的每個URL都下載下來。(如果列的是文件就下載文件,如果列的是網站,那么下載首頁)
經驗:執行系統服務時,需要使用root權限才能執行成功如:service network restart
搭建lamp環境
linux jobs
fg、bg、jobs、&、ctrl + z都是跟系統任務有關的,雖然現在基本上不怎么需要用到這些命令,但學會了也是很實用的
一。& 最經常被用到 這個用在一個命令的最后,可以把這個命令放到后臺執行
二。ctrl + z 可以將一個正在前臺執行的命令放到后臺,并且暫停
三。jobs 查看當前有多少在后臺運行的命令
四。fg 將后臺中的命令調至前臺繼續運行,如果后臺中有多個命令,可以用 fg %jobnumber將選中的命令調出,%jobnumber是通過jobs命令查到的后臺正在執行的命令的序號(不是pid)
五。bg 將一個在后臺暫停的命令,變成繼續執行,如果后臺中有多個命令,可以用bg %jobnumber將選中的命令調出,%jobnumber是通過jobs命令查到的后臺正在執行的命令的序號(不是pid)
jobs -l 查看后臺任務詳細信息
kill PIDnumber 殺掉進程
jobs命令執行的結果,+表示是一個當前的作業,減號表是是一個當前作業之后的一個作業,jobs -l選項可顯示所有任務的PID,jobs的狀態可以是running, stopped, Terminated,但是如果任務被終止了(kill),shell 從當前的shell環境已知的列表中刪除任務的進程標識;也就是說,jobs命令顯示的是當前shell環境中所起的后臺正在運行或者被掛起的任務信息;
進程的掛起
后臺進程的掛起:
在solaris中通過stop命令執行,通過jobs命令查看job號(假設為num),然后執行stop %num;
在redhat中,不存在stop命令,可通過執行命令kill -stop PID,將進程掛起;
當要重新執行當前被掛起的任務時,通過bg %num 即可將掛起的job的狀態由stopped改為running,仍在后臺執行;當需要改為在前臺執行時,執行命令fg %num即可;
前臺進程的掛起:ctrl+Z
進程的終止
后臺進程的終止:
方法一:
通過jobs命令查看job號(假設為num),然后執行kill %num
方法二:
通過ps命令查看job的進程號(PID,假設為pid),然后執行kill pid
前臺進程的終止:
ctrl+c
kill的其他作用
kill除了可以終止進程,還能給進程發送其它信號,使用kill -l 可以察看kill支持的信號。
SIGTERM是不帶參數時kill發送的信號,意思是要進程終止運行,但執行與否還得看進程是否支持。如果進程還沒有終止,可以使用kill -SIGKILL pid,這是由內核來終止進程,進程不能監聽這個信號。 kill -SIGKILL pid kill -SIGKILL pid kill -SIGKILL pid
一、linux系統初講
2.0單用戶模式
reboot 重啟 3秒后按任意鍵
e 移動光標,e鍵進入編輯模式
選中第二行 按e后,將光標移至最后添加 1 或s 或single。然后回車,最后按b啟動,就進入了單用戶模式
runlevel 輸入命令 runlevel顯示單用戶模式
passwd 修改root用戶密碼
reboot 重啟root密碼已修改
2.1救援模式
將虛擬機啟動設置為:虛擬機>電源>啟動時進入bios。保存退出
然后設置啟動順序 將boot 里cdrom 設為第一項
進入centos 啟動模式選擇第三項 rescue installed system 回車
選擇語言
選擇鍵盤模式 us默認
是否設置網絡
2.3ls命令
ls 查看當前目錄下的文件
ll 查看當前目錄下的文件詳細信息
ll -h 查看當前目錄下的文件詳細信息以M為單位顯示文件大小
二、系統精講
1.1創建和刪除目錄
mkdir -pv /tmp/1/2/3 創建父目錄 -p: parents 父目錄 -v: 可視化
rmdir 234 (非空目錄不能刪)
rmdir /tmp/1/2/3
tree /tmp/1 查看tmp/1 目錄的結構 tree查看目錄結構
rmdir -pv /tmp/1/2/3 刪除目錄(支持刪除子目錄非空的) -p: parents 父目錄 -v: 可視化
1.2rm命令
rm -f 強制 -i 安全位 提示 是否刪除 -r 刪除目錄加上-r(如果不加-r刪除目錄內有目錄,提示會略過目錄,不會刪目錄,只會刪目錄里的文件) -v可視化
常用 -i -r -f
rm -fr 123 刪除目錄沒有提示
rm -rfv 123 不會提示
1.3cp命令
cp 拷貝文件 (在同一目錄下需改變文件名)
cp -rv 111 222 (拷貝目錄加-r選項) -v:可視化
df -h 查看分區
1.4移動和重命名mv
rename 重命名
mv 123 -i:安全位 -v:可視化 沒有-r選項
1.5文件查看命令
cat 查看文件從頭開始內容 -A:查看文件中隱藏的符號
tac 從尾部開始讀取內容。
more 從頭開始顯示,一屏一屏的往下翻(空格鍵),一行一行的往下翻(Enter);但不可以往上翻
less 從頭開始顯示,一屏一屏的往下翻(空格鍵),一行一行的往下翻(Enter);按方向鍵可以一行一行往上往下翻,按pageup ,pagedn,可以一屏一屏往上或往下翻。小j鍵可以往下行翻。小k鍵可以往上行翻。Ctrl+b 往上翻屏 ,Ctrl+f 往下翻屏,小g最前一行,大G最后一行。/搜索關鍵詞 小n鍵往后跳,往前找大寫N。?搜索關鍵詞 小n往上跳,大N往下跳。
head 查看一個文件的前十行 -2:表示查看文件的前二行
tail 查看文件的末尾十行 -3:表示只看最后三行
tail -f 動態查看后十行 不退出,按Enter鍵往下行翻(當被查看文有變化時,動態的顯示出來)
1.6文件和目錄屬性
- 表示普通文件
d 表示目錄
c 字符設備
b 塊設備
l 軟連接(快捷方式)
s socket
p 管道
所有者,所屬組,其他人
rwx rwx rwx
421 421 421
ls -i 印出每個文件的 inode 號
第二字段 文件硬鏈接數或目錄子目錄數
第三個字段 文件所有者
第四個字段 文件所屬組
第五個字段 文件大?。ㄈ绻俏募A則表示文件夾大小)
第六字段 文件創建 月 日 時
第九字段 文件名
1.7chmod命令
chmod 更改文件權限
r=4 w=2 x=1
chmod u=rwx,g=r--,o=r-- 1.txt (分別代表所有者,所屬組,其他人)
chmod u-x 1.txt 將1.txt 文件的所有者執行權限去掉
chmod u+x,g+w,o-r 1.txt 將1.txt文件所有者加執行,所屬組加寫,其他去掉可讀
chmod a+r 1.txt 將1.txt的所有人加上可讀
chmod -R 700 111 -R:將111目錄下的所有子目錄子文件繼承111目錄的權限711
umask 用來規定默認文件的權限 0022 后三位表示 --- -w- -w-
新建目錄755
文檔 644
linux下的目錄必須有x權限;目錄為777權限,減umask得到目錄默認755權限;文檔沒有執行權限為666權限,減umask得到文檔默認為644權限。
計算權限![]()
1.8chown命令
chown 全稱 change owner。 更改文件的所有者或所屬組
chown ken 111.txt 更改111.txt所有者為ken
chown :users 111.txt 更改111.txt所屬組為users
chown ken:users 111.txt 更改111.txt所有者為ken,所屬組為users
chown ken.users 111.txt 更改111.txt所有者為ken,所屬組為users(和上面效果一樣)
chown -R ken:users 111/ 將當前目錄111下的所有的目錄和文件的所有者和所屬組改為ken users
1.9chattr文件隱藏屬性
lsattr 查看特殊屬性(特殊權限)
lsattr -R 可以把當前目錄下的子文件子目錄列出來,子目錄下的子文件子目錄都列出來(逐層查看文件的隱藏屬性)
lsattr -d 只查看目錄本身特殊屬性
chattr +a 12.txt +a:表示該文件只能追加,不能修改刪除,也不能更改文件名
chattr -a 12.txt -a:表示解除該12.txt文件的限制
chattr +i 12.txt 比+a更嚴謹,不能追加,不能修改刪除,也不能更改文件名 (不能做任何操作)
chattr -i 12.txt 解除該12.txt的限制
2.0特殊權限之suid
set_uid 限制于可二進制格式 可執行文件,注意給普通非二進制文件加setuid不起作用 命令:chmod u+s 可執行二進制文件名
which passwd
chmod u+s /tmp/ls 給普通用戶添加ls的臨時root 權限,
該文件user屬主對應的 rwx 有x權限 就顯示小s ,沒有x權限就顯示大S
2.1特殊權限之sgid
set_gid sgid可以讓執行該文件的用戶臨時以該文件屬組身份去執行,于set_uid不同是可作用于目錄與文件
set_uid=4 set_gid=2 stick_bit=1
2.2特殊權限之sticky
stick_bit 防刪除位
一個文件是否可更改,不在于文件本身的屬性,而在于文件的父目錄屬性是否可rwx
更改文件后,所屬組和所有者都改變為被更改者
當一個目錄的權限為其他人可讀可寫可執行的時候,那么其他人就可以刪除這個目錄下的任何文件,包括root
chmod o+t . 把當前目錄改為其他用戶不可刪除
小t的時候,其他用戶可讀可寫可執行,大T的時候其他用戶可讀可寫不可執行
2.3find搜索命令
which 搜索一個命令的位置
find /root/dir/ -name "ken" 在/root/dir/下搜索ken文件
find /root/dir/ -type f 在/root/dir/下搜索文件
find /root/dir/ -type d 在/root/dir/下搜索目錄
find /root/dir/ -type b 在/root/dir/下搜索Blok
find /root/dir/ -type c 在/root/dir/下搜索字符設備
find /tmp/ -mtime +10 大于十天 (單位是天)
find /tmp/ -mtime -10 小于十天
find /tmp/ -mtime -365 一年以內
find /tmp/ -mmin -5 5分鐘以內
find /tmp/ -mmin +5 大于五分鐘
find /tmp/ -atime
find /tmp/ ctime
find /tmp/ -type f -name ken 在/tmp/下查找文件ken
ls -li 查看文件inode
find / -inum inode_number 用inode號碼查找文件
find /var/log/ -type f -mtime +30 |xargs rm 將三十天以前的日志刪掉
find /tmp/ -type f |xargs -i mv {} {}.bak
2.4三個時間屬性
mtime 創建和修改時間
atime 訪問時間
ctime 更改文件所有者或所屬組時更改文件編號(inode改變這個時間就會變)
stat filename 可以查看文件的三個時間
touch filename 更新三個時間
當更改ctime時 atime 和mtime不一定會改變,
用vim修改了一下文件,那么三個time都會變(修改后要保存)
使用命令echo "111111" >> 1.txt 會更改1.txt ctime 和mtime、
2.5軟鏈接和硬鏈接
find /etc/ -type l
in -s 軟鏈接,目錄和文件都可以做,可跨分區
in 硬鏈接,inode號不變,不可跨分區(只能在同一各分區下做),目錄硬鏈接不可以做
實例1:給文件創建軟鏈接
命令:
ln -s log2013.log link2013
輸出:
[root@localhost test]# ll
[root@localhost test]# ln -s log2013.log link2013
[root@localhost test]# ll
說明:
為log2013.log文件創建軟鏈接link2013,如果log2013.log丟失,link2013將失效
2.6用戶名文件
cat /etc/passwd/
root:x:0:0:root:/root:/bin/bash 每字段代表: 用戶名 密碼 uid gid 說明 家目錄 shell
2.7密碼文件
cat /etc/shadow
root:$6$alMmEBkwlbfl2J/h$F/QEcBOuE0yjI4WV5Lw4BHJz8w0EoE9zh.MLx4dEg6yUGQKFCdaLBPf4C.8EBFqkVOM0QTZ3qrOiH3dp18gyB0:16719:0:99999:7:::
bin:*:15980:0:99999:7::: *:表示該用戶鎖定
sshd:!!:16719:::::: ?。。罕硎驹撡~戶還沒有密碼
每字段代表:
用戶名
密碼
上次更改密碼的天數(從1970年的1月1日到更改密碼時的那一天)
還需過幾天才可以改密碼 密碼要過多少天后到期(默認99999天)
密碼到期前多少天發警告
賬號的實效期限(到期后過多少天鎖定賬號 默認為空)
賬號的生命周期(賬號可以用多久)
保留值
2.8增加和刪除用戶組
groupadd ken 添加用戶組
tail /etc/group 查看組文件
ken:x:500: 每個字段表示: 組名 組密碼 組id
tail /etc/gshadow 查看組密碼
!!表示無密碼 (組默認沒密碼)
groupadd -g 512 ken 設置組id
groupdel 刪除組
2.9增加和刪除用戶
useradd ken
tail /etc/passwd
useradd -u 505 -g grp2 user1 創建用戶添加用戶id和組id
id user1 查看user1的用戶id,組id,
useradd -u 508 -g 500 -d /home/user3 -s /sbin/mologin user3 給用戶添加家目錄,和shell
useradd -M -s /sbin/nologin user3
userdel user3 刪除這個用戶的時候并不會刪除這個用戶的家目錄
userdel -r user1 刪除用戶并且刪除用戶家目錄
useradd -s /sbin/nologin mysql 創建用戶
linux在創建用戶是將用戶默認的shell指定為/sbin/nologin即可阻止用戶登錄,命令為
useradd user -s /sbin/nologin,其中-s指定用戶的默認shell
如果用戶已經存在于系統,用root身份修改/etc/passwd文件,將要阻止的用戶的shell改為/sbin/nologin,如下所示
user:x:502:502::/home/user:/sbin/nologin
3.0usermod修改用戶屬性
usermod 更改用戶組
usermod -g 512 ken 將ken的用戶組更改為512
useradd -u 506 -g 502 -G 512 user3 -G:指定用戶擴展組
usermod -L ken 鎖定用戶不讓登陸
usermod -U ken 解鎖用戶
3.1passwd修改用戶密碼
passwd root登陸時后面沒有參數為更改root密碼
passwd username 更改普通用戶密碼
yum install -y expect
mkpasswd 生成密碼隨機字符串
mkpasswd -l 12
passwd --stdin ken 更改ken的密碼
echo "1"|passwd --stdin ken 設定ken密碼
3.2su切換用戶
id 查看當前用戶
whomi 查看當前用戶
su 切換用戶
su ken 切換至ken ,環境變量并沒有切換
echo $PATH
su -ken 環境變量切換
su - 切換至root
su - -c "mkdir /tmp/321432" ken 臨時以ken的身份執行某個命令
su - -c "ls -ld /tmp/321432" ken
3.3sudo詳解
sudo 命令在權限不夠的情況下切換用戶
visudo 編輯可以執行sudo的用戶
sudo passwd 更改root密碼
3.4df命令
df 查看系統分區,-h:自動容量單位顯示,-K:以k為單位顯示,-m:以M為單位,-i:查看inode
free 查看交換分區
3.5du命令
du 查看目錄大小
du -m /etc
du -h /etc -h:自動容量單位顯示,-sh:查看一個文件的大小
du -sh filename 查看一個文件占用磁盤空間的大小
du -sh * 查看當前目錄所有文件大小
ls -lb filename 查看一個文件本身的大小
3.6fdisk命令
fdisk -l 查看磁盤所有分區狀況
fdisk 磁盤名 磁盤分區
一塊硬盤最多可分4個主分區,如果想分第五個區,可把其中一個主分區換成擴展分區,然后在擴展分區內建邏輯分區。擴展分區+主分區≤4
n 新建分區
w 保存退出
3.7磁盤格式化mke2fs
cat /etc/filesystems 查看文件系統
mkfs. 按Tab鍵補全
mkfs.ext4 /dev/sdb5 格式化sdb5為ext4文件系統
3.8磁盤掛載與卸載
mount /dev/sdb5 /mnt/ 掛載/dev/sdb5/到/mnt下
umount /home/
ls /home/
3.9分區表fstab
cat /etc/fstab
vi /etc/fstab
UUID 分區標識
blkid 獲取磁盤分區標識
defaults 掛載選項
/etc/rc.local 開機加載配置文件
mount -a 自動加載配置文件的所有配置
mount 查看掛載的選項
三、linux系統提高
1.1vim介紹
yum install -y vim-enhanced 安裝vim
vi與vim的區別:打開shell文件后vim顯示顏色區分,vi只是全黑色
sut nu 顯示行號
1.2vim一般模式下光標移動
vim 一般模式 編輯模式 命令模式
Ctrl+f 一屏一屏往下翻
Ctrl+b 一屏一屏往上翻
pgup
pgdn
gg 光標跳到文檔第一行
shift+g 光標跳到文檔最后一行
^ 光標跳到行首(或者數字0)
$ 光標跳到行尾(或者數字1)
number + G 將光標跳到指定行
number + 光標方向命令鍵 向指定方向移動number個位置
1.3vim一般模式下復制剪切粘貼
x 向后一個一個刪除
shift+x 向前一個一個刪除
number + x 向后刪number個字符
dd 刪除一行(剪切)
p 粘貼在光標的下面
shift+p 粘貼在光標的上面
u 撤銷(最多回退50次)
Ctrl+r 前進
yy 復制
v 可視
1.4vim編輯模式
i 在光標之前插入模式
I 光標到行首插入
a 在光標之后插入模式
A 光標到行尾插入
o 在光標下一行插入
O 在光標上一行插入
1.5vim命令行模式
:wq 保存退出
:w 保存
:q 退出
:q! 強制退出
:set nu 顯示行號
:set nonu 不顯示行號
:/ (?) 搜索關鍵詞
n 進入搜索后下(上)跳
N 進入搜索后上(下)跳
:/1,20s/IPTABLES/iptables/g g:全局替換
:/1,$s/IPTABLES/iptables/g 1-$:全文
:/%s/IPTABLES/iptables/g
:noh1 取消高亮顯示
1.6gzip講解
gzip filename 壓縮文件
du -sh filename 查看文件大小
gzip -1 壓縮級別,壓縮比例最小,壓縮速度最快
gzip -9 壓縮比例最大,壓縮最慢。(默認是gzip -6)
gzip -d filename.gz 解壓縮
zcat filename.gz 查看gzip壓縮文件內容
1.7bzip2講解
大多數情況下bzip2壓縮的文件更小些
bzip2 filename 壓縮文件bzip2
bzip2 filename.bz2 解壓bz2壓縮文件
gzip bzip2 都不能壓縮目錄
bzcat filename.bz2 查看bzip2壓縮文件內容
bzcat 默認壓縮級別是9
1.8zip和unzip
yum install zip unzip 安裝zip壓縮和解壓縮工具
yum install xz bzip2 gzip
zip filename 壓縮文件
unzip filename.zip 解壓文件(在壓縮后不會刪除原文件,可以同時壓縮多個目錄和文件)
zip -r 可以壓縮目錄
1.9xz壓縮和解壓縮
xz gzip bzip2 三者相差不大
xz filename 壓縮文件
xz -d filename.xz 解壓縮
xzcat filename.xz 查看xz壓縮文件內容
xz 壓縮級別和bzip2一樣(1-9)
2.0tar打包工具詳解
tar -cvf c:create創建;v:可視化 ;f:file
tar -cvf 1.tar 111 222 123.gz 打包多個文件(打包不會改變文件大?。?/div>
php錯誤日志輸出配置
此處,程序會在extension_dir中尋找curl.so文件,找不到會報錯
mysql連接數
查詢超過1s 記錄 mysql慢查詢Mysql調優帖子地址
du -sh 1.tar 查看文件大小
du -sh 111 222 123.gz 查看多個文件大小
tar -xvf 1.tar 解包
tar -C /tmp/ xvf 1.tar 解包到指定目錄
2.1tar打包和壓縮并用
tar 支持 gzip bzip2 xz 三種格式進行打包
tar -zcvf 1.tar.gz 111 222 打包并壓縮多個文件
du -sh 1.tar.gz 查看文件大小
tar -zxvf 1.tar.gz 解壓打包壓縮文件(壓縮包不會刪除)
tar -tf 1.tar.gz 查看打包壓縮文件列表
tar -C /tmp/ -zxvf 1.tar.gz 指定打包壓縮路徑
tar -jcvf 1.tar.bz2 111 222 打包使用bz2格式壓縮
tar -Jcvf 1.tar.xz 111 222 打包使用xz格式壓縮
tar -jxvf 1.tar.bz2 解包bz2壓縮格式
tar -Jxvf 1.tar.xz 解包xz壓縮格式
tar -tf 1.tar.bz2 查看打包bz2壓縮文件內容
tar -tJf 1.tar.xz 查看打包xz壓縮文件內容
tar --exclude 12.txt -cvf 111.tar 111 打包一個目錄下所有文件,排除單個文件(12.txt)
tar --exclude 12.txt --exclude aming -cvf 111.tar 111 打包一個目錄下所有文件,排除多個文件
2.2rpm安裝和卸載
rpm == RedHat package manager
mount /dev/cdrom /mnt/
cd /mnt/
ls
cd packages/
ls
包名 版本號1主版本,5次版本 el6:紅帽企業版6;i686:32位
noarch:表示不區分32位64位
rpm -ivh 包名 i:install v:可視化 h:進度
rpm -e 包名 卸載rpm
rpm -ivh --nodeps 包名 強制安裝RPM包(忽略依賴關系)
rpm -Uvh 包名 升級包
2.3rpm查詢
rpm -qa 查詢已安裝rpm包
rpm -q 包名 把一個包全部顯示出來(包名不可以簡寫)
rpm -qa |grep 'vim*' 查詢已安裝是否包含vim
rpm -qi 包名 i:info 查看一個包詳細信息
rpm -ql 包名 l:list 查看一個包安裝的文件列表
rpm -qf 文件路徑 f:file 查看一個文件是哪個rpm包安裝
which vim 查看vim是在哪個目錄
rpm -qf /usr/bin/vim 查看vim路徑是哪個包安裝的
rpm -qf `which vim` 反引號:顯示引號內執行的結果
rpm -ivh 'http://xxxxxx.xxxx.xxx' 遠程安裝rpm包
2.4yum工具詳解
yum list 列出yum源中的所有RPM包(網絡資源)
vim /etc/yum.repos.d/CentOS-Base.repo 修改源配置文件
yum list |grep vim 查詢yum倉庫中的vim包(搜索rpm包),已安裝過包前顯示@
yum list |grep -i mcrypt 查詢yum倉庫中的mcrypt包(-i:不區分大小寫),搜索yum擴展源epel
yum install 包名 使用yum安裝rpm包
yum search 'vim' 在yum源中搜索一個rpm包
yum install -y vim-enhanced 安裝vi省略問答默認是
yum remove vim-enhanced yum卸載rpm包
yum update 包名 yum升級rpm包
yum update;yum upgrade 升級系統中所有的rpm包
yum grouplist 列出已安裝過和未安裝套件
LANG=en 將語言設置成英文
LANG=zh_CN.UTF-8 將語言設置成中文
yum groupinstall 套件名
yum groupremove 套件名
2.5搭建本地yum倉庫
cp -r yum.repos.d/ yum.repos.d.bak 備份yum配置文件
cd yum.repos.d;ls
rm -rf Centos-Base.repo
yum list 顯示本地yum源
vim CentOS_Media.repo 做本地yum源
gpgcheck:是否檢測
enabled:是否生效
gpgkey:不要
2.6yum如何下載rpm包到本地
yum install -y yum-plugin-downloadonly 安裝yum下載rpm包工具
yum list |grep download 搜索
yum install vim-enhanced --downloadonly --downloaddir=/tmp/ (適用于未安裝過)
yum reinstall vim-enhanced --downloadonly --downloaddir=/tmp/ reinstall:重新安裝(適用于已安裝過)
首先查看本機安裝的yum包都有哪些?
[root@test~]# rpm -qa |grep yum
如果安裝了此包:yum-utils-1.1.30-14.el6.noarch
那么就可以執行yumdownloader
假如要下載samba安裝包,執行如下命令:
[root@localhost ~]# yumdownloader samba
2.7源碼編譯安裝
源碼包安裝時先看INSTALL 和 README
/usr/local/src/ 源碼包下載存放路徑
tar -jxvf http*.bz2
./configure --prefix=/usr/local/apache2 /usr/local/:常用安裝源碼包路徑
echo $?
make
echo $?
make install
ls /usr/local/apache/
apache下載地址 http://mirrors.cnnic.cn/apache/httpd/
四、Shell編程入門
1.1shell特性
history 命令歷史(默認只保存1000條)
echo $HISTSIZE 輸出1000(此變量為history保存條數)
!! 上一條命令
!$ 前一個命令歷史的參數
!c 命令歷史中以c開頭離得最近的命令
alias 查看取別名的命令
alias aaa='cat 1.txt'
unalias
wc 取行數
> 正向重定向(覆蓋寫)
>> 追加寫
< 反向重定向
2> 錯誤重定向,把錯誤信息重定向到文件里
2>> 追加錯誤重定向
Ctrl+z 暫停掉
jobs 查看運行的任務
+ 優先級高
fg 2(1)
bg 后臺
1.2shell變量
env 系統相關變量
set 系統環境變量(比env多,包含env)
`` 反引號:使用一個命令的結果
export 聲明全局變量
a=lskd
unset $a 銷毀變量
1.3系統和用戶的環境變量配置文件
/etc/profile 環境變量文件HOSTSIZE,HISTSIZE,PATH,HOME,SHELL (系統相關環境變量)
/etc/bashrc (系統相關環境變量)
/etc/profile.d/ (自定義環境變量腳本.sh存放位置)
用戶家目錄 家目錄環境變量配置文件
.bash_logout 用戶退出時執行腳本
.bash_profile 和/etc/profile 大致一樣,針對用戶自身定義的環境變量
.bashrc 定義命令別名,當用戶打開新bash或者登陸時執行的文件
export 全局聲明
vim /etc/profile.d/path.sh
/etc/bashrc
/etc/profile.d/path.sh
source /etc/profile 自動加載/etc/profile.d/下的所有.sh文件
1.4shell中的特殊符號
*| 通配符
# 注釋符
; 結束符
& 后臺運行
\[] 中括號[]:或 例:ls [12].txt ;ls [1-3].txt
1.5cut命令
cut -d: -f 3,4,5 /etc/passwd -d:指定分隔符 -f:取段
cut -c 1-10 /etc/passwd
cut -d: -f -c
1.6sort命令
sort filename 按照ascll碼表排序
sort -t: -k3 -n /etc/passwd -t:指定分隔符
sort -u filename 排序去重復
sort -n filename 按數字從小到大排序
sort -nr filename 按數字從大到小排序
sort -un filename 去重復且把多個字符串顯示一個(去掉-n選項后可全部顯示)
1.7wc命令
wc -l filename 查看一個文件的行數
wc -l filename filename 查看多個文件的行數
wc -w filename 統計單詞數,以空格為分隔符
wc -m filename 查看文件字符數
wc -l filename 查看文件的行數
1.8uniq和tee命令
uniq 去重復
uniq -c 可計算重復的次數
sort filename | uniq -c 先排序,再去重
| tee filename(空文件) 覆蓋重定向,并在屏幕輸出,需搭配管道命令使用
1.9tr和split命令
tr 替換字符
ls *.txt | tr 'a-z' 'A-Z' 將小寫文件后綴替換為大寫
echo 'dfsfsafsdf' |tr 'a-f' 'A-F' 將小寫轉換為大寫a-f A-F(tr后面替換的字符一 一對應)
split 切割大文件
split -b 50m filename 按大小分割文件(指定50m分割文件)
split -b 100 filename 按大小分割文件(指定100b分割文件,默認單位為b)
split -l 10 filename 按行數分割文件(指定10行分割文件)
split -b 100 filename word_ 為分割出的文件指定前綴
2.0shell中連接符(并且、和、或者)
ls a && ls b (邏輯與,如果前面的命令為真,才會執行后面命令,如為假,則不會執行后面的命令)
ls a || ls b (邏輯或,如果前面的命令為真,則不會執行后面的命令;如為假,才會執行后面的命令)
2.1grep過濾-1
grep egrep sed awk
grep 過濾除指定行
grep 'root' /etc/passwd
grep --color 'root' /etc/passwd 將查找字符以紅色標出
grep -c word filename 查詢所有行包含指定字符出現的行數
grep -v word filename 查詢所有行不包含指定字符出現的行數
grep -n word filename 顯示行號
grep -n -A 2 word filename 顯示匹配行,并顯示匹配行下指定行數(2行)
grep -n -B 2 word filename 顯示匹配行,并顯示匹配行上指定行數(2行)
grep -n -C 2 word filename 顯示匹配行,并顯示匹配行上下指定行數(2行)
grep -r word dirname 遍歷目錄文件查找指定字符
grep -rh word dirname 不顯示文件名,匹配文件
2.2grep過濾-2
grep '[aN]' filename 查找包含a或N的行
grep '[0-9]' filename 查找包含數字的行
grep -v '[a-zA-Z]' filename 查找不包含大小寫的行
grep '^[a-z]' filename 匹配小寫字母開頭的行
grep '[^a-z]' filename 匹配不包含字母的行
grep '[^$]' filename 匹配空行
grep -v '[^$]' filename 匹配空行以外的行
grep '[r.o]' filename 匹配r(任一字符 )o的行
grep '[r*o]' filename 匹配r(一個或多個)o的行
待補充(正則)
2.3grep過濾-3
grep -E === egrep
待補充(正則)
2.4sed命令-1
sed 比grep強大,但是不能顏色顯示
sed -n '10'p filename 打印第n行,p:print
sed -n '1-10'p filename 打印第一到10行
sed -n '/root/'p filename 打印包含'root'的行
sed -n '/r.o/'p filename 匹配r(任一字符 )o的行
sed -n '/r*o/'p filename 匹配r(一個或多個)o的行
2.5
2.6
2.7
2.8
五、linux平臺運維管理
1.1查看系統負載命令
w load average:1分鐘之內系統的平均負載(1分鐘進程數),5分鐘(5分鐘平均進程數),15分鐘內
uptime 獲取負載值
1.2vmstat詳解
vmstat -1 1s顯示一次
vmstat 1 5
1.3top動態查看負載
top 3s一次動態顯示出當前主機運行情況,前一行與vmstat一樣
pid 進程編號(ls /proc;此目錄里目錄名對應進程號)
user 用戶
PR
NI 進程優先級
VIRT 虛擬內存
top -bn1 一次性顯示出來(靜態顯示)
SHR 共享內存
top -d 1 -c 1s刷新一次,COMMAND顯示的更全點
1.4sar命令
sar -n DEV 查看網卡流量
sar -n DEV 1 10 1s顯示一次,一次顯示10次
yum install -y sysstat 安裝sar命令
ls /var/log/sa/ 查看網絡流量歷史(18天)
sar -n DEV -f /var/log/sa/sa22/ 查看具體某天的流量歷史文件
sar -q 查看系統歷史負載
sar -b 1 10 可以查看當前的磁盤io狀態
sar -p 1 10 可以查看cpu的使用情況
1.5free查看內存
free 查看內存狀況kb
free -m 以M為單位
buffers 數據將要寫到磁盤中去的,還在內存占用
cached 從磁盤取出放到內存,這部分空間
free第二行 = buffer + cached
1.6ps查看進程
VSZ 虛擬內存大小
RSS 實際內存大小(內存使用量)
TTY 啟動地方
STAT S:表示休眠;
s:表示主進程;
<:優先級高;N:表示次進程低優先級;+:前臺運行的進程;R:runing運行中;L:在內存鎖定;l:多線程進程;Z:僵尸進程;x已死掉進程;T:暫停進程;D:不能中斷的進程
START 啟動時間
TIME 占用cpu時間
CANMAND 進程名稱
1.7netstat查看端口
netstat -lnp 查看監聽端口
netstat -an tcpip,socket都顯示出來
netstat -an|grep -ic estab 查看某一時刻服務器的連接數(并發數)
1.8抓包工具tcpdump和tsshark
yum install tcpdump
tcpdump -nn
(待補充)
1.9防火墻selinux
cat /etc/selinux/config 查看selinux配置
(待補充)
2.0iptables詳解-1
netfilter----iptables
iptables -nvL 查看有那些規則
iptables -F 清除規則
表 列 規則
iptables -t filter -nvL 指定表名,filter表下的規則(filter[較常用],nat,mangle。三個表)
filter INPUT OUTPUT 列
iptables -t filter -I INPUT -p tcp --dport 80 -s 192.168.1.177 -j REJECT 插入規則不允許192.168.1.177訪問 (-I:在表上面增加)
iptables -t filter -nvL 在不指定標明的時候默認是filter表
iptables -t filter -D INPUT -p tcp --dport 80 -s 192.168.1.177 -j REJECT 刪除規則
iptables -t filter -A INPUT -p tcp --dport 80 -s 192.168.1.177 -j REJECT 添加規則(-A:在表下面增加)
相同規則的時候表上面的規則先生效
2.1iptables詳解-2
iptables -t filter -A INPUT -p tcp --dport 80 -s 192.168.1.177 -j DROP 不接收包
iptables -t filter -A INPUT -p tcp --dport 80 -s 192.168.1.177 -j ACCEPT
iptables -z 清空規則計數器
iptables -F 清空規則(只針對filter表)
iptables -t nat -nvL 查看nat下的所有表
iptables -t filter -A INPUT -p tcp --dport 80(端口號可省略) -s 192.168.1.177 -j REJECT
service iptables restart; 重啟iptables服務(重啟后新添加的iptables會失效)
service iptables save; 保存新添加的iptables
cat /etc/sysconfig/iptables; iptables配置保存路徑
iptables-save > 1.ipt 防火墻規則備份
iptables -F
service iptables save; 清空規則并保存
2.2iptables詳解-3
我們現在用的比較多個功能有3個:
1.filter 定義允許或者不允許的
2.nat 定義地址轉換的
3.mangle功能:修改報文原數據
這五個位置也被稱為五個鉤子函數(hook functions),也叫五個規則鏈。
1.PREROUTING (路由前)
2.INPUT (數據包流入口)
3.FORWARD (轉發管卡)
4.OUTPUT(數據包出口)
5.POSTROUTING(路由后)
這是NetFilter規定的五個規則鏈,任何一個數據包,只要經過本機,必將經過這五個鏈中的其中一個鏈。
對于filter來講一般只能做在3個鏈上:INPUT ,FORWARD ,OUTPUT
對于nat來講一般也只能做在3個鏈上:PREROUTING ,OUTPUT ,POSTROUTING
而mangle則是5個鏈都可以做:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
注意:規則的次序非常關鍵,誰的規則越嚴格,應該放的越靠前,而檢查規則的時候,是按照從上往下的方式進行檢查的。
input 進來
output 出去
FORWARD (轉發。iptables中有幾個表,分別針對不同的目的,有本地輸入、本地產生的輸出、轉發等。。。FORWARD這個表,用于控制轉發行為,也就是說根據定義的規則,決定對從外邊來到 另一個地方去的包是丟棄、PASS還是怎么處理。)
filter 指定來源ip拒絕
iptables -t filter -nvL 查看所有規則
nat 網絡地址轉換
iptables -t nat -nvL
PREROUTING 改變的是數據包過來的的時候目標ip地址
POSTROUTING 在數據包出去之前改變原ip(私網ip)
mangle 給數據包打標記
iptables -t mangle -nvL
2.3iptables詳解-4
filter 表 INPUT OUTPUT
iptables -A INPUT 增加input
iptables -D INPUT 刪除input
iptables -P -P的作用是定義鏈的默認規則
四:詳解COMMAND:
1.鏈管理命令(這都是立即生效的)
-P :設置默認策略的(設定默認門是關著的還是開著的)
默認策略一般只有兩種
iptables -P INPUT (DROP|ACCEPT) 默認是關的/默認是開的
比如:
iptables -P INPUT DROP 這就把默認規則給拒絕了。并且沒有定義哪個動作,所以關于外界連接的所有規則包括Xshell連接之類的,遠程連接都被拒絕了。
-F: FLASH,清空規則鏈的(注意每個鏈的管理權限)
iptables -t nat -F PREROUTING
iptables -t nat -F 清空nat表的所有鏈
-N:NEW 支持用戶新建一個鏈
iptables -N inbound_tcp_web 表示附在tcp表上用于檢查web的。
-X: 用于刪除用戶自定義的空鏈
使用方法跟-N相同,但是在刪除之前必須要將里面的鏈給清空昂了
-E:用來Rename chain主要是用來給用戶自定義的鏈重命名
-E oldname newname
-Z:清空鏈,及鏈中默認規則的計數器的(有兩個計數器,被匹配到多少個數據包,多少個字節)
iptables -Z :清空
2.規則管理命令
-A:追加,在當前鏈的最后新增一個規則
-I num : 插入,把當前規則插入為第幾條。
-I 3 :插入為第三條
-R num:Replays替換/修改第幾條規則
格式:iptables -R 3 …………
-D num:刪除,明確指定刪除第幾條規則
3.查看管理命令 “-L”
附加子命令
-n:以數字的方式顯示ip,它會將ip直接顯示出來,如果不加-n,則會將ip反向解析成主機名。
-v:顯示詳細信息
-vv
-vvv :越多越詳細
-x:在計數器上顯示精確值,不做單位換算
--line-numbers : 顯示規則的行號
-t nat:顯示所有的關卡的信息
五:詳解匹配標準
1.通用匹配:源地址目標地址的匹配
-s:指定作為源地址匹配,這里不能指定主機名稱,必須是IP
IP | IP/MASK | 0.0.0.0/0.0.0.0
而且地址可以取反,加一個“!”表示除了哪個IP之外
-d:表示匹配目標地址
-p:用于匹配協議的(這里的協議通常有3種,TCP/UDP/ICMP)
-i eth0:從這塊網卡流入的數據
流入一般用在INPUT和PREROUTING上
-o eth0:從這塊網卡流出的數據
流出一般在OUTPUT和POSTROUTING上
2.擴展匹配
2.1隱含擴展:對協議的擴展
-p tcp :TCP協議的擴展。一般有三種擴展
--dport XX-XX:指定目標端口,不能指定多個非連續端口,只能指定單個端口,比如
--dport 21 或者 --dport 21-23 (此時表示21,22,23)
--sport:指定源端口
--tcp-fiags:TCP的標志位(SYN,ACK,FIN,PSH,RST,URG)
對于它,一般要跟兩個參數:
1.檢查的標志位
2.必須為1的標志位
--tcpflags syn,ack,fin,rst syn = --syn
表示檢查這4個位,這4個位中syn必須為1,其他的必須為0。所以這個意思就是用于檢測三次握手的第一次包的。對于這種專門匹配第一包的SYN為1的包,還有一種簡寫方式,叫做--syn
-p udp:UDP協議的擴展
--dport
--sport
-p icmp:icmp數據報文的擴展
--icmp-type:
echo-request(請求回顯),一般用8 來表示
所以 --icmp-type 8 匹配請求回顯數據包
echo-reply (響應的數據包)一般用0來表示
2.2顯式擴展(-m)
擴展各種模塊
-m multiport:表示啟用多端口擴展
之后我們就可以啟用比如 --dports 21,23,80
六:詳解-j ACTION
常用的ACTION:
DROP:悄悄丟棄
一般我們多用DROP來隱藏我們的身份,以及隱藏我們的鏈表
REJECT:明示拒絕
ACCEPT:接受
custom_chain:轉向一個自定義的鏈
DNAT
SNAT
MASQUERADE:源地址偽裝
REDIRECT:重定向:主要用于實現端口重定向
MARK:打防火墻標記的
RETURN:返回
在自定義鏈執行完畢后使用返回,來返回原規則鏈。
(policy ACCEPT 804K packets,402M bytes) 接受的包數據量
ACCEPT (接受)
DROP (落下,丟下)
REJECT (拒絕,駁回)
iptables -P INPUT DROP (危險:請注意這條語句的參數,是-P ,-P的作用是定義鏈的默認規則,也就是通過所有規則后還沒有匹配到的數據包,將按照默認規則來執行。
-P DROP后,只有滿足定義了ACCEPT規則的包才能通行,其他的包都按照默認的DROP干掉了。)
2.4cron計劃任務
2.5系統服務
yum install -y ntsysv 安裝系統管理服務軟件
ntsysv 打開管理界面,設置完后需重啟系統才能生效
chkconfig --list 查看所有系統服務
chkconfig --
0-6 0:關機;1:單用戶模式;23;4:6重啟
chkconfig 服務名 off 關閉服務,控制級別2、3、、4、5
chkconfig 服務名 on 開啟服務,控制級別2、3、、4、5
chkconfig --level 34 服務名 on 將某服務的34級別開啟
chkconfig --add 添加系統服務
chkconfig --del 刪除系統服務
/etc/init.d 系統服務所在目錄
2.6linux日志
/var/log/messages
/etc/logrotate.conf 日志切割文件
kill pid 殺死進程
kill -9 強制殺死進程
dmesg 查看某個硬件出現問題
2.7xargs和exec詳解
find /var/log/ -type f -mtime +10 查看10天以前的日志
find /var/log/ -type f -mtime +10 -exec cp {} {}.bak \; 重命名一些文件以.bak后綴(-exec是find的一個選項)
find /var/log/ -type f -mtime +10 | xargs -i cp {} {}.1 重命名一些文件以.1后綴(使用管道達到效果)
2.8screen命令
nohup
yum install -y screen
screen 新窗口執行命令,ctrl+a+d(展示退出)(虛擬終端)
screen -ls 查看screen
screen -r screenid 進入screen某一進程
2.1curl命令
curl -I 網站地址 不看源代碼,查看狀態
curl -x 代理
curl -IV 網址 顯示詳細信息
curl -O 文件網址 下載文件 (文件名為下載的名稱)
curl -o 文件名 文件網址 下載文件需重命名
3.0rsync格式
rsync 拷貝數據(可增量拷貝)
rsync -av ip地址:/tmp/1.txt /tmp/ 將遠程文件拉到本地
rsync -av /tmp/1.txt ip:/tmp/ 將本地文件推到遠程
(待補充)
3.1rsync常用選項
rsync -a
3.2rsync選項詳解
六、LAMP架構搭建與優化
1.1Mysql安裝
cat /usr/local/mysql/bin/mysqlbug|grep configuore mysql查看編譯參數
1、安裝
查看有沒有安裝過:
yum list installed mysql*
rpm -qa | grep mysql*
查看有沒有安裝包:
yum list mysql*
安裝mysql客戶端:
yum install mysql
安裝mysql 服務器端:
yum install mysql-server mysql-devel
2、啟動&&停止
數據庫字符集設置
mysql配置文件/etc/my.cnf中加入default-character-set=utf8
啟動mysql服務:
service mysqld start或者/etc/init.d/mysqld start
開機啟動:
chkconfig -add mysqld,查看開機啟動設置是否成功chkconfig --list | grep mysql*
mysqld 0:關閉 1:關閉 2:啟用 3:啟用 4:啟用 5:啟用 6:關閉
停止:
service mysqld stop
3、登錄
創建root管理員:
mysqladmin -u root password 123456
如果root已經設置過密碼,采用如下方法
./mysqladmin -u root password oldpass ‘123456’
登錄:
mysql -u root -p輸入密碼即可。
忘記密碼:
service mysqld stop
mysqld_safe --user=root --skip-grant-tables
mysql -u root
use mysql
update user set password=password("new_pass") where user="root";
flush privileges;
4、遠程訪問
開放防火墻的端口號
mysql增加權限:mysql庫中的user表新增一條記錄host為“%”,user為“root”。
5、Linux MySQL的幾個重要目錄
數據庫目錄
/var/lib/mysql/
配置文件
/usr/share /mysql(mysql.server命令及配置文件)
相關命令
/usr/bin(mysqladmin mysqldump等命令)
啟動腳本
/etc/rc.d/init.d/(啟動腳本文件mysql的目錄)
編譯安裝二進制包安裝mysql
修改mysql的root用戶密碼,root初始密碼為空的:執行命令:./bin/mysqladmin -u root password '密碼'
1.2Apache編譯安裝
cat /usr/local/apache2/build/config.nice 查看apache編譯參數
apachectl -v 查看apache版本
apachectl -l 查看apache運行模式 q
tar jxf httpd-2.2.31.tar.bz2
./configure --prefix=/usr/local/apache2 --with-included-apr --enable-so --enable-deflate=shared --enable-expires=shared --enable-rewrite=shared --with-pcre (apache配置選項)
make
make install
配置參數詳解:
--with-included-apr (httpd軟件依賴的包,能夠跨平臺運作linux win unix mac)
--enable-so --enable-deflate=shared --enable-expires=shared --enable-rewrite=shared (動態共享的模式安裝)
--with-pcre (正則相關的庫)
/usr/local/apache2/bin/apachectl start 啟動apache
/usr/local/apache2/modules/ apache動態模塊加載路徑
/usr/local/apache2/bin/apachectl -M 查看apache加載模塊(動態和靜態模塊)
/usr/local/apache2/bin/apachectl -l 查看apache加載模塊(靜態)
/usr/local/apache2/bin/apachectl -t 查看apache配置文件有無錯誤
/usr/local/apache2/bin/apachectl graceful 重新加載配置文件
然后為Apache添加服務腳本:
# cp /usr/local/apache/bin/apachectl /etc/init.d/httpd
如果想把apache服務加入到開機自啟,可以修改服務啟動腳本:
# vim /etc/init.d/httpd
在第二行下添加:# chkconfig:235 85 15
# description: This is apache server!
編輯配置文件:
# vim /etc/httpd/httpd.conf
添加 ServerName localhost
安裝Apache2.4.7版本。
下載地址為:http://mirrors.sohu.com/apache/
tar zxvf httpd-2.4.7.tar.gz #解壓文件
cd httpd-2.4.7 #進入目錄
./configure --prefix=/usr/local/apache2/ --sysconfdir=/usr/local/apache2/etc --with-included-apr --enable-so --enable-deflate=shared --enable-expires=shared --enable-rewrite=shared #編譯參數
錯誤
configure: error:Bundled APR requested but not found at./srclib/.
tar zxvf apr-1.4.6.tar.gz #解壓apr包
tar -zxvf apr-util-1.4.1.tar.gz #解壓apr-util包
cp -r /lamp/apr-1.4.6 /lamp/httpd-2.4.7/srclib/apr
cp -r /lamp/apr-util-1.4.1 /lamp/httpd-2.4.7/srclib/apr-util # 然后把兩個包復制到httpd-2.4.7/srclib/ 里面并且取消版本號。
錯誤:
configure: error: in `/lamp/httpd-2.4.7/srclib/apr':
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details
configure failed for srclib/apr
yum -y install gcc-c++ #安裝 gcc
錯誤:
configure: error: pcre-config for libpcre not found. PCRE is required and available from http://pcre.org/
tar zxvf pcre-8.34.tar.gz
[root@localhost lamp]# cd pcre-8.34
[root@localhost pcre-8.34]# ./configure && make && make install
錯誤
checking whether to enable mod_deflate... configure: error: mod_deflate has been requested but can not be built due to prerequisite failures
yum -y install openssl-devel
把上面4個錯誤解決后。重新 ./configure 參數編譯 無問題就執行
make
make install
/usr/local/apache2/bin/apachectl start # 啟動apache
啟動完后用以下命令檢查apache是否正常啟動,
ps aux |grep httpd
netstat -an |grep :80
如果不能啟動 請清空防火墻規格。關閉selinux
iptables -F
service iptables save
通過瀏覽器輸入地址訪問:http://192.168.137.30 (我服務器的地址) 。若能顯示“It works”表明apache正常工作。
設置Apache系統開機是自動開啟。
vim /etc/rc.d/rc.local
增加一行 把下面增加進去。
/usr/local/apache2/bin/apachectl start
1.3 Apache的mpm工作模式
/usr/local/apache2/bin/apachectl -l
prefork.c 子進程 (進程模式,占用內存大,高并發異常時不影響其他進程)
worker 線程(線程模式,占用內存小,高并發異常時影響其他線程)
event 線程形式比worker好些 性能(線程模式,占用內存小,高并發異常時影響其他線程 )
ps aux|grep httpd 主進程 小寫s
./configgure --help | grep A3 'with-mpm' 查看apache編譯參數(mpm參數)
--with-mpm=worker 在配置安裝的時候指定apache,mpm為線程形式
1.4php編譯安裝-安裝順序在最后 ![]()
安裝php5.5版本。
tar zxvf php-5.5.9.tar.gz #解壓php安裝包
cd php-5.5.9 #進入php文件
./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs --with-config-file-path=/usr/local/php/etc --with-mysql=/usr/local/mysql --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-bz2 --with-openssl --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-mbstring --enable-sockets --enable-exif --disable-ipv6 --with-mcrypt=/usr/local/libmcrypt/ #編譯參數
錯誤configure: error: xml2-config not found. Please check your libxml2 installation.yum install -y libxml2-devel錯誤configure: error: Please reinstall the BZip2 distribution
yum install -y bzip2 bzip2-devel錯誤
configure: error: jpeglib.h not found.
yum install libjpeg-devel -y
錯誤
configure: error: png.h not found.
yum install libpng-devel -y
錯誤
configure: error: freetype-config not found.
yum install -y freetype freetype-devel
錯誤
configure: error: mcrypt.h not found. Please reinstall libmcrypt.
tar zxvf mcrypt-2.6.8.tar.gz #提示mcrypt包沒有安裝。安裝mcrypt包 又依賴依賴 libmcrypt, mhash 這兩個包。
1.首先編譯安裝 libmcrypt, mhash, mcrypt 二進制源碼包。
下載libmcrypt-2.5.8.tar.gz
tar zxvf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8
./configure --prefix=/usr/local/related/libmcrypt
make
make install
安裝 libltdl,也在libmcrypt源碼包里面
cd libmcrypt-2.5.8 /libltdl
./configure --enable-ltdl-install
make
make install
下載mhash-0.9.9.9.tar.gz
tar zxvf mhash-0.9.9.9
cd mhash-0.9.9.9
./configrue --prefix
make
make install
這兩個包安裝完。然后在安裝mcrypt包。
安裝mcrypt
tar zxvf mcrypt-2.6.8.tar.gz
LD_LIBRARY_PATH=/usr/local/libmcrypt/lib:/usr/local/lib ./configure --with-libmcrypt-prefix=/usr/local/libmcrypt #編譯參數
make
make install
#mcrypt 沒有安裝完成。這是php模塊。需要等php安裝完成之后。在繼續安裝。
把以上的依賴關系解決完了之后在繼續安裝PHP
./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs --with-config-file-path=/usr/local/php/etc --with-mysql=/usr/local/mysql --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-bz2 --with-openssl --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-mbstring --enable-sockets --enable-exif --disable-ipv6 --with-mcrypt=/usr/local/libmcrypt/
make
make install
生成php.ini
cp /lamp/php-5.5.9/php.ini-production /usr/local/php/etc/php.ini
apache結合php
Apache的主配置文件為 :/usr/local/apache2/etc/httpd.conf #參數編譯的時候指定到/usr/local/apache2/etc/ 這個目錄下。
vim /usr/local/apache2/etc/httpd.conf
找到AddType application/x-gzip .gz .tgz 這一行在下面增加
AddType application/x-httpd-php .php
找到:<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
將中間一樣的內容改為:DirectoryIndex index.html index.htm index.php
修改完成后保存退出。
啟動前檢測apache的配置文件是否正常。
/usr/local/apache2/bin/apachectl -t
如果顯示“Syntax OK” 表示正常。
啟動apache
/usr/local/apache2/bin/apachectl start
檢測是否啟動成功。
netstart -lnp |grep httpd
/usr/local/apache2/bin/apachectl graceful 加載apache配置文件 不用重啟
/usr/local/apache2/bin/apachectl -t 查看php配置文件是否正常
/usr/local/php/bin/php -i |more 能查看php安裝信息。。./configure 內容 等等
cat /usr/local/apache2/build/config.nice 查看apache 安裝的編譯代碼
cat /usr/local/mysql/bin/mysqlbug |grep -i confi 參看musql安裝的編譯參數
1.5測試php解析
Linux下查看Nginx、Napache、MySQL、PHP的編譯參數的命令如下:
1、nginx編譯參數:
#/usr/local/nginx/sbin/nginx -V
2、apache編譯參數:
# cat /usr/local/apache/build/config.nice
3、php編譯參數:
# /usr/local/php/bin/php -i |grep configure
4、mysql編譯參數:
#/usr/local/nginx/sbin/nginx -V
2、apache編譯參數:
# cat /usr/local/apache/build/config.nice
3、php編譯參數:
# /usr/local/php/bin/php -i |grep configure
4、mysql編譯參數:
# cat /usr/local/mysql/bin/mysqlbug|grep configure
1.6安裝Discuz
下載discuz-utf-8版本
編輯 vim /usr/local/apache2/conf/httpd.conf
編輯 vim/usr/local/apache2/conf/extra/httpd-vhosts.conf
ServerAdmin 管理員郵件
DocumentRoot 指定web目錄
ServerName 服務器名稱
ServerAlias 服務器別名
vim /etc/hosts
將 Deny from all改為Allow from all
ps aux |grep httpd 查看哪個用戶運行apache
更改discuz程序目錄所有者和所屬組
vim /etc/profile.d/path.sh
source 重新加載配置文件
create databases discuz 創建數據庫
grant all on discuz.* to 'ken'@'localhost' identified by 'ken'; 賦予用戶權限
1.登錄mysql
#mysql -u root -p
2.新增用戶
insert into mysql.user(Host,User,Password) values("localhost","xxx",password("***"));\
注釋:xxx為新建用戶名,***為用戶密碼
3.執行該句后,還需要刷新權限表
flush privileges;
4.賦予用戶權限
grant all on ttt.* to xxx@localhost identified by "***";
注意:ttt為數據庫名,當然你也可以填* 為所有數據庫
5.賦予權限,還需要再刷新權限表
flush privileges;
6.通過sql語句查詢出新增結果
select user,host,password from mysql.user;
7.mysql 查看所有用戶
select * from mysql.user
select * from mysql.user \G; 當表的列太多現實不正常時,\G橫項顯示
1.7apache用戶認證
|
用vim打開/usr/local/apache2/conf/extra/httpd-vhosts.conf文件
<Directory /data/www/abc/>
AllowoVerride Authconfig
Authname "ni hao xian sheng"
AuthType Basic
AuthUserfile /data/.htpasswd
Require valid-user
</Directory>
然后從新加載一下apache就可以le
1.## 這里設置的目錄為真實目錄,并非虛擬目錄
2. AllowOverride AuthConfig 為允許認證
3. AuthType 認證類型 Basic 由 mod_auth 提供
4. AuthName 這里定義的內容將在 web 彈出的登陸框中顯示
5. AuthUserFile 定義認證文件路徑 ,不要放在可能被下載到的地方
6. Require user 定義允許訪問的用戶
配置完這一步接下來建立驗證文件
Htpsswd -c /data/.htpasswd ken(如果要在添加一個用戶的話不加c選項)
New password:
Re-type new password:
|
1.8默認虛擬主機
配置默認虛擬主機
用vim打開/usr/local/apache2/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "/tmp/123"
ServerName www.23.com
#ServerAlias www.meiqianzenmeweihuganqing.com
#ErrorLog "logs/dummy-host.example.com-error_log"
#CustomLog "logs/dummy-host.example.com-access_log" common
</VirtualHost>
指定一個不存在的目錄DocumentRoot 在/tmp/下創建123 (防止起啟動的時候報錯) /tmp/然后在降低文件的的權限 chmod 600 /tmp/123這樣就不會訪問到的,其目的是為了安全、只允許指定的域名訪問。
<VirtualHost *:80>
DocumentRoot "/tmp/123"
serverName 234.com
</VirtualHost>
mkdir /tmp/123 創建空目錄
chmod 600 /tmp/123 更改目錄權限
apache 默認虛擬主機就是第一個
銘哥,看下我理解的對不對.\n視頻里演示禁止訪問虛擬主機; 在這個虛擬主機配置里寫入了兩個選項,第一個為默認的訪問,里面把指定的目錄/tmp/123權限設置為600,并且域名是隨便設置的.當windows端瀏覽器輸入的域名凡是指向到虛擬主機配置文件里默認訪問的都會因為deamon用戶沒有/tmp/123權限而出現403的訪問錯誤; 而在瀏覽器輸入的域名解析指向到配置文件里第二個訪問地址的, 因為deamon對指定目錄有足夠權限,所以能正常訪問.
位置在第一個的虛擬主機,為默認的主機,凡是域名指向過來,都會解析到這個來。所以,當有一個新的站點想在服務器上跑的時候,需要額外去配置一個新的虛擬主機配置段
1.9域名301跳轉
301域名跳轉的配置
用vim /usr/local/apache2/conf/extra/httpd-vhosts.conf中進行配置
<VirtualHost *:80>
ServerName www.xxx.com
ServerAlias www.yyy.com
DocumentRoot /var/www/html/aminglinux
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.aaa.com$(條件)
RewriteRule ^(.*)$ http://www.yyy.com$1 [R=permanent,L]或[R=301,L](規則)301永久從定向302臨時重定向L表示結束了
</IfModule>
</VirtualHost>
多域名時在條件后面加[OR]或者的意思
在linux中用curl進行測試命令格式 curl -xip 域名 -I
301 域名永久重定向跳轉時為了讓搜索引擎更快的找到
302 域名臨時重定向
2.0apache日志切割
將Errorlog 和Customlog 設為絕對路徑
按天分割apache訪問日志:CustomLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/test.com-access_%Y%m%d_log 86400" common
date -s "2016-01-03 01:01:00" 設置時間
2.1apache不記錄指定文件類型日志
SetEnvIf Request_URI ".*\.gif$" image-request
SetEnvIf Request_URI ".*\.jpg$" image-request
SetEnvIf Request_URI ".*\.png$" image-request
SetEnvIf Request_URI ".*\.bmp$" image-request
SetEnvIf Request_URI ".*\.swf$" image-request
SetEnvIf Request_URI ".*\.js$" image-request
SetEnvIf Request_URI ".*\.css$" image-request
CustomLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/oem.discuz.com-access_%Y%m%d.log 86400" combined
env=!image-request
2.2apache配置靜態緩存
curl -x127.0.0.0:80 'http://www.test.com/static/image/common/logo.png' -I
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault A86400
ExpiresByType image/x-icon A2592000
ExpiresByType application/x-javascript A2592000
ExpiresByType text/css A2592000
ExpiresByType image/gif A604800
ExpiresByType image/png A604800
ExpiresByType image/jpeg A604800
ExpiresByType text/plain A604800
ExpiresByType application/x-shockwave-flash A604800
ExpiresByType video/x-flv A604800
ExpiresByType application/pdf A604800
ExpiresByType text/html A900
</IfModule>
2.3apache配置防盜鏈
位置一般情況下在 /usr/local/apache/conf/httpd.conf
或者apache 2.2 的 /usr/local/apache2/conf/extra/httpd-vhost.conf
添加
SetEnvIfNoCase Referer "^http://www.ccvita.com" local_ref
SetEnvIfNoCase Referer "^http://ccvita.com" local_refSetEnvIfNoCase Referer "^$" local_ref
<filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif)">
Order Allow,Deny
Allow from env=local_ref
</filesmatch>
(Allow : 允許(白名單) Deny:拒絕 )
還一種寫法,是用正則的,這種寫法在各個版本的apache比較通用。
寫法是
SetEnvIfNoCase Referer "^http://.*\.yourdomin\.com" local_ref
SetEnvIfNoCase Referer ".*\.yourdomin\.com" local_ref
SetEnvIfNoCase Referer "^$" local_ref
<filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif)">
Order Allow,Deny
Allow from env=local_ref
</filesmatch>
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/qianling3439/archive/2009/02/05/3864248.aspx
2.4apache訪問控制
Order (排序:設置執行順序) 可以選擇 先執行allow 還是 deny
2.5apache禁止解析php
針對于 /data/www/data 目錄
1.將php引擎關閉
2.filesmatch 將所有ip禁止訪問,只允許127.0.0.1
2.6apache禁止指定user_agent、
設置禁止curl 和 chrome 訪問
用curl 設置user_agent模擬chrome訪問
2.7apache通過rewirte限制某個目錄
2.8php.ini配置文件詳解
php -i 可以查看php.ini文件所在路徑loaded Configuretion File => php.ini路徑
; php.ini 的作為注釋符號
# shell 的注釋符號
disable_function = (禁用的函數)
php錯誤級別:
open_basedir = /data/www/discuz:/tmp (防止入侵者訪問系統重要目錄,此處限制只能訪問/data/www/discuz或者/tmp)
在apache虛擬主機配置openbasedir (與直接在php.ini里修改的好處是:可以區分不同的虛擬主機)
2.9php擴展模塊如何安裝
php -i |grep php.ini
在php源碼包目錄下, 找到/usr/local/src/php-5.3.27/ext/gd ext目錄為存放動態加載模塊的安裝包
進入需要的包后如:cd gd
使用php工具/usr/local/php/bin/phpize 生成configure
此時在gd目錄生成了configure安裝文件
./configure --with-php-config=/usr/local/php/bin/php-config 固定配置
make
make install
php -m 查看php加載哪些模塊
extension_dir php動態模塊庫的存放路徑(在php.ini中可以指定extension_dir 所在目錄)
php -i |grep extension_dir 查看extension_dir目錄(擴展模塊目錄)
grep '^extension=' /usr/local/php/etc/php.ini 查看哪些模塊是動態加載的
在php.ini中添加動態模塊
3.0mysql配置講解
/etc/my.cnf mysql配置文件
Key_buffer_size = 256M 存儲緩沖區大小
Table_open_cache = 256 打開表的數量
3.1mysql的root密碼重置
mysqladmin -uroot -p(空可?。?password 'ken'
忘記密碼編輯配置文件:vim /etc/my.cnf 添加一行 skip-grant
直接登錄
使用mysql庫:use mysql
更新root用戶密碼: update user set password=password('ken') where user='root'
3.2mysql登陸
mysql -uroot -h192.168.1.177 -P3306 -p123456 mysql遠程登陸,-u用戶名 ,-h指定host,-P指定端口,-p密碼
3.3mysql常用操作-1
mysql -uroot -p123456;
show databases; 查看所有數據庫
use mysql 選擇數據庫(可不加分號,其他時候需加分號;)
select database() 查看自身所在哪個數據庫
select user(); 查看用戶
select version(); 查看版本號
show tables; 查看所有表
desc tablename; 查看表結構(字段,是否非空,主鍵)
show create table tablename\G; 查看某個表是如何創建的
insert into tablename values '' 插入表數據
delete from tablename where clonename='cloneid' 刪除表數據
truncate table tablename 清空表數據
drop table tablename 刪除表
3.5mysql備份與恢復
mysqldump mysql備份工具
mysqldump -uroot -pken mysql > /data/mysql.sql 選項依次是:用戶名 密碼 數據庫名 重定向文件名
mysql -uroot -pken discuz < /data/mysql.sql 利用反向重定向恢復數據庫
數據庫表文件默認對應在 /data/mysql/mysql/ 下的.frm .MYD .MYI myisam存儲引擎
mysqldump -uroot -pken mysql user > /data/user.sql 備份數據表
mysql -uroot -pken mysql < /data/user.sql 利用反向重定向恢復數據表(不需要加表名)
六、LNMP架構搭建與優化
1.1php編譯安裝
1.4nginx啟動腳本和配置文件
在/usr/local/conf/nginx/nginx.conf 目錄下寫入腳本文件,然后去掉server部分,添加外部引入語句: include vhost/*.conf;
保存退出在當前目錄下創建vhost文件夾,vhost目錄下創建default.conf,并將訪問目錄設置成一個(nginx用戶)不可訪問的目錄,作為默認虛擬主機,防止誤解析。去掉php解析部分代碼(設置默認虛擬主機后php解析沒有用了)
創建test.conf虛擬主機配置文件
注意第一個為默認虛擬主機 root:/tmp/www; deny all 做限制解析
1.5php-fpm配置文件
php-fpm.conf 和 php.ini 前者是php服務配置文件,后者是php全局配置文件
/usr/local/php/etc/php-fpm.conf
1.6常見502問題解決
Permission denied 不可讀
在php-fpm.conf文件中添加下面兩行
listen.owner = nobody
listen.group = nobody
php-fpm -t 查看配置是否正確
1.7nginx用戶認證
curl -x127.0.0.1:80 uken:1 www.test.com/admin.php 使用curl的用戶名密碼登陸訪問控制的文件,-u用戶名:后跟密碼,x指定ip
打紅線部分為nginx解析php的代碼
1.8nginx域名跳轉
直接在server_name 后添加如:![]()
301重定向語句
if ($host !='www.test.com')
{
rewite ^/(.*)$ http://www.test.com/$1 permanent;
}
1.9nginx不記錄指定文件類型日志
在nginx虛擬主機配置文件root /data/www 下一行添加訪問日志路徑: access_log /tmp/access.log combined_realip;
然后再添加不記錄指定文件類型日志如下:
2.0nginx日志切割
vim /usr/local/sbin/nginx_logrotate.sh
#!/bin/bash
d=`date -d "-1 day" +%F`
[-d /tmp/nginx_log] || mkdir /tmp/nginx_log
mv /tmp/access.log /tmp/nginx_log/$d.log
/etc/init.d/nginx reload > /dev/null
cd /tmp/nginx_log/
gzip -f $d.log
gzip -f 如果日志已經壓縮過,使用-f選項可以強制壓縮覆蓋不提醒
2.1nginx配置靜態文件過期時間
location ~ \.(js|css)
{
access_log off;
expires 2h;
}
2.2nginx配置防盜鏈
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|rar|zip|gz|bz2)$
{
access_log off;
expires 15d;
valid_referers none bloked *.test.com *.aaa.com;
if ($invalid_referer)
{
return 403;
}
}
測試:curl -e "http://baidu.com/erwds" -I -x192.168.1.178:80 'http://test.com/static/image/logo.png
curl -e選項可以指定referer
2.3nginx的訪問控制
location ~ .*admin\.php$ {
allow 127.0.0.1;
deny all;
include fastcgi_parems;
fastcgi_pass unix:/tmp/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/www$fastcgi_script_name;
}
curl -x192.168.1.178 指定來源ip
白名單和黑名單
2.4nginx禁止指定user_agent
if ($http_user_agent ~ 'curl|baidu|1111')
{
return 403;
}
測試curl -A "fsdjlksdfbaidu" -x192.168.1.178:80 test.com -I curl -A選項指定user_agent
2.5nginx代理詳解
vim proxy.conf
upstream ken {
server 61.135.169.125:80;
server 61.135.169.121:80;
}
server {
listen 80;
server_name baidu.com www.baidu.com;
location / {
proxy_pass http://ken/;
proxy_set_header Host $host;
}
}
(待整理)
七、linux常用服務部署與優化
1.1nfs部署和優化-1
NFS == network file system
yum install -y nfs-utils rpcbind 客戶端與服務端通信rpcbind
vim /etc/exports
寫入:/mnt 192.168.1.177(rw,sync) 選項rw可讀可寫,ro可讀
/etc/init.d/rpcbind start
/etc/init.d/nfs start
在客戶端安裝:yum install -y nfs-utils
showmount -e 192.168.1.178
mount -t nfs 192.168.1.178:/mnt /opt
df -h 查看磁盤使用情況
2.2nfs部署和優化-2
/mnt 192.168.1.177(rw,sync,all_squash,anonuid=500,anongid=500)
客戶端執行:umount /opt/ (出現:umount.nfs: /opt: device is busy 加上-l選項:umount -l /opt/ )
重新掛載:mount -t nfs -onolock,nfsvers=3 192.168.1.178:/mnt /opt (-o:不加鎖,nfsvers指定版本)
2.7mysql主從配置-1
replication 主從也叫AB復制(把主的日志復制到從上,從根據日志將數據復制,從而的達到兩個數據庫數據保持一致)。
需要把A操作的動作記錄下來,然后把數據推到從上去。![]()
rm rf /usr/local/mysql 刪除舊版本mysql
cd /usr/local/src 下載源碼包保存路徑
3.5iredmail安裝
iRedmail:postfix 發郵件 dovecot 收郵件 apache mysql openldap policyd amavisd
roundcube awstat fail2ban iRedAdmin
cd patches
sed -i 's/iredmail.org/106.187.51.47/g' get_all.sh
cd ..
sh iRedMail.sh

浙公網安備 33010602011771號