服務器搭建仍是須要一些Linux知識的,這節就聊點基礎的。php
Linux中每一個文件對每一個用戶來講都有對應的權限,在任一路徑中輸入ll
就能夠查看這些信息:git
root@ip-*** /usr/local # ll total 32K drwxr-xr-x 2 root root 4.0K Jan 14 17:00 bin drwxr-xr-x 2 root root 4.0K Jan 14 17:00 etc drwxr-xr-x 2 root root 4.0K Jan 14 17:00 games drwxr-xr-x 2 root root 4.0K Jan 14 17:00 include drwxr-xr-x 4 root root 4.0K Jan 14 17:08 lib lrwxrwxrwx 1 root root 9 Jan 14 17:00 man -> share/man drwxr-xr-x 2 root root 4.0K Jan 14 17:00 sbin drwxr-xr-x 7 root root 4.0K May 27 14:02 share drwxr-xr-x 2 root root 4.0K Jan 14 17:00 src
關於權限方面咱們主要關注第一、三、4列
咱們先來看第一列,第一列表示各用戶對該文件/目錄的操做權限,我把它斷成四個部分,d|rwx|r-x|r-x
分別表示類型|文件全部者權限|文件所屬用戶組權限|其餘人的權限
。類型咱們常常用到的有d-目錄
,--文件
,l-鏈接文件
,r(4)|w(2)|x(1)
分別對應讀|寫|可執行(進入目錄)
。
第三列和第四列分別表明文件全部者和文件所屬用戶組。sql
改變文件權限須要用到chmod
命令,上面我在rwx
中標註了四、二、1,表明的就是它們的對應值,須要哪些權限把它們相加就是了,來個示例:shell
root@ip-*** ~ # ll total 4.0K -rw-r--r-- 1 root root 25 Jun 8 02:33 dev.js
計算一下獲得文件dev.js
對各用戶的權限值是644,下面使用chmod
命令改變一下:vim
root@ip-*** ~ # chmod 761 dev.js root@ip-*** ~ # ll total 4.0K -rwxrw---x 1 root root 25 Jun 8 02:33 dev.js
這裏分別賦予文件全部者|文件所屬用戶組|其餘用戶
的權限是可讀可寫可執行|可讀可寫|可執行
segmentfault
另外,除了更改文件權限以外,還能夠更改文件全部者和所在用戶組,分別用到的命令是chown
、chgrp
,具體使用方式可使用man
命令查看。數組
通常在咱們購買服務器的時候咱們都會選擇安裝好一個Linux系統,分區啥的都已經配置好了,這方面對入門同窗來說並不須要掌握太多,主要注重查看。
查看磁盤使用df
命令,加上參數-h
使用以人類易讀的方式展現。bash
Linux中有不少軟件是下載一個壓縮包讓用戶本身解壓安裝的,這就須要咱們掌握必要的壓縮技能。使用比較普遍的有gzip
、bzip2
、tar
。服務器
gzip
應該說是目前Linux系統中使用最廣的壓縮命令了。它能夠解開*.z
、*.zip
、*.gz
等格式的壓縮文件,下面來看它的使用方式:ssh
root@ip-*** ~ # gzip -v dev.js dev.js: -8.0% -- replaced with dev.js.gz root@ip-*** ~ # ls dev.js.gz
這裏的-v
是爲了在壓縮結束後查看壓縮比,固然還有其餘參數:
-c 將壓縮的數據輸出 -d 解壓縮 -t 校驗壓縮文件 -1~-9 設置壓縮級別,-1最快,壓縮效果也最差,-9最慢,壓縮效果最好,默認-6,通常狀況下使用默認的就能夠了。
so,當咱們須要解壓縮文件的時候只要加上-d
參數就能夠了。
咱們知道cat
命令能夠用來查看純文本文件,那zcat
就是用來查看純文本被壓縮後的壓縮文件。
另外,須要注意的一點是使用gzip
壓縮後源文件就會被自動刪除。
bzip2
是比gzip
更優秀的壓縮工具,用法跟gzip
很是近似:
-c 將壓縮的數據輸出 -d 解壓縮 -k 保留原文件 -z 壓縮參數 -t 校驗壓縮文件 -1~-9 設置壓縮級別,-1最快,壓縮效果也最差,-9最慢,壓縮效果最好。
其壓縮文件以*.bz2
格式存在,bzcat
的做用與zcat
類似,再也不贅述。
上面咱們講到了壓縮命令,可是這裏的壓縮都是單文件的,要是我想把多個文件壓縮在同一個壓縮包中光用上面的命令是作不到的,有的同窗會說咱們能夠壓縮一個文件夾啊,想法很好,可是很差意思,你這麼作的話會相似這樣的提示:* is a directory -- ignored
。因此這裏咱們要用到另外一個工具tar
,把那些文件打包成一個文件合集再使用壓縮工具進行壓縮。
值得一提的是,tar
還能夠同時在參數中直接使用gzip/bzip2
。tar
的命令很是多,介紹幾個經常使用的:
-c 新建打包文件 -j/-z 使用bzip2/gzip壓縮,打包文件名一般應該是*.tar.bz2/*.tar.gz -t 查看打包文件內容,主要用來查看文件名 -x 解壓縮,一般搭配 -C 用於解壓到目標目錄 -v 查看壓縮/解壓過程當中,正在被處理的文件 -C 解壓到指定目錄,與 -x 一塊兒使用 -f 後面接被處理的文件名
下面是幾個經常使用的組合,通常狀況下足以應付大部分使用場景了。
壓縮(bzip2):tar -jcv -f target.tar.bz2 待壓縮的目錄 壓縮(gzip):tar -zcv -f target.tar.gz 待壓縮的目錄 查看包含文件(bzip2):tar -jt -f target.tar.gz/target.tar.bz2 查看包含文件(gzip):tar -zt -f target.tar.gz/target.tar.gz 解壓(bzip2):tar -jxv -f target.tar.bz2 -C 解壓到某處 解壓(gzip):tar -zxv -f target.tar.gz -C 解壓到某處
來個實例:
root@ip-*** ~ # ls -a . .config .zcompdump-ip-172-31-17-254-5.0.2 .. .oh-my-zsh .zsh-update .aptitude .profile .zsh_history .bash_history .ssh .zshrc .bashrc .viminfo dev.js .cloud-locale-test.skip .zcompdump test root@ip-*** ~ # tar -jcv -f test.tar.bz2 . ... ./.oh-my-zsh/lib/completion.zsh ./.oh-my-zsh/lib/diagnostics.zsh ./.profile ./.zsh_history ./.cloud-locale-test.skip ./.bashrc root@ip-*** ~ # ls -a . .oh-my-zsh .zsh_history .. .profile .zshrc .aptitude .ssh dev.js .bash_history .viminfo test .bashrc .zcompdump test.tar.bz2 .cloud-locale-test.skip .zcompdump-ip-172-31-17-254-5.0.2 .config .zsh-update
打包壓縮成功後,能夠看到最後多了一個test.tar.bz2
文件。另外,另外兩組組合能夠本身嘗試一下,另外,解壓強烈建議加上-C
命令,以避免覆蓋原來的文件。
shell腳本是可以在shell環境中執行的程序,它聽從shell語法,有了它,咱們能夠爲一些須要重複操做的系列連續性命令作一個合集,解放勞動力。
下面我先給個經常使用的git案例:
#!/bin/bash //聲明使用的shell環境 action="none" //變量賦值 echo "1: commit to dev and update test" //打印字符串 echo "2: merge branch to master" read -p "please input number to select next step: " -t 30 action //讀取用戶鍵盤輸入並賦給 action 變量,30秒內無輸入則跳過 case $action in //case語句,判斷條件爲 action 變量 1) read -p "please input commit content: " -t 30 commit if [ "$commit" == "" ]; then //if判斷語法 commit="default commit" //條件符合執行的操做 fi //if判斷語句結束 git add . git commit -m "$commit" //引用變量 git push origin dev exit 0 //退出shell ;; //知足 action 爲1的條件的語句結束 2) echo "1: cyc" echo "2: bingqichen" echo "3: dev" branch[1]="cyc" //數組賦值 branch[2]="bingqichen" branch[3]="dev" read -p "please input number to select the branch: " -t 30 branch_no if [ "$branch_no" == "1" ] || [ "$branch_no" == "2" ] || [ "$branch_no" == "3" ]; then //if條件判斷,|| 表示或關係 git checkout master git merge "${branch[$branch_no]}" //${branch[1]}爲數組的引值方法 git push origin master git checkout - else //另外還有 elif ,跟js中的 else if 相似,能夠繼續添加判斷條件 echo "sorry, this is an undefined branch!" fi exit 0 ;; *) //action爲其餘值的操做 echo "sorry, this is an undefined action!" exit 0 ;; esac //case語句結束
這段腳本就是我用來解決git提交和代碼合併的問題,你們能夠根據本身的使用場景改造。大部分語句仍是很簡單的,主要有幾個須要注意的點,好比條件判斷語句:
[ "$branch_no" == "1" ]
這裏面的每一個空格都不能夠省略!還有賦值語句不能加空格,慎用單引號等等。
Linux中安裝軟件的方法主要分爲使用包管理器安裝,和下載源代碼自行編譯安裝,前者相對簡單,可是有可能有些最新的軟件包未必會有,好比PHP7,這時候就須要咱們下載軟件源碼編譯成二進制文件才能使用。
先來看看編譯過程:
大體過程是這樣的,當咱們下載到軟件源碼後,通常會是一個壓縮包,解壓以後裏面會有一個用於創建Makefile
文件的config/configure
文件,使用config/configure
創建Makefile
後,執行make
命令將源代碼根據Makefile
文件的配置進行編譯,最後執行make install
命令,將編譯好的內容依據Makefile
中install
選項安裝到指定位置完成安裝。
這裏講講爲何要根據Makefile
進行編譯,其實GCC能夠直接編譯程序文件,可是一個軟件不可能只擁有一個程序文件,要是人工一個個去編譯每一個文件,會很是勞民傷財!因此藉助一個Makefile
咱們就能夠搞定了。
下面來演示一個PHP7的編譯安裝:
root@ip-*** ~ # wget http://cn2.php.net/get/php-7.0.0.tar.gz/from/this/mirror //下載源碼 root@ip-*** ~ # ls mirror root@ip-*** ~ # mv mirror php.tar.gz //重命名 root@ip-*** ~ # tar -zxv -f php.tar.gz //解壓縮源碼包 root@ip-*** ~ # ls php-7.0.0 php.tar.gz root@ip-*** ~ # cd php-7.0.0 //進入源文件目錄 root@ip-*** ~/php-7.0.0 # ls //裏面會有一些手冊,能夠用來作安裝參考 INSTALL README.md configure ... root@ip-*** ~/php-7.0.0 # ./configure //執行configure創建Makefile checking for grep that handles long lines and -e... /bin/grep checking for egrep... /bin/grep -E ... checking for xml2-config path... configure: error: xml2-config not found. Please check your libxml2 installation.
我在編譯到這一步報了一個錯誤,看起來是因爲libxml2
未安裝,在我嘗試安裝後發現已經存在這個軟件,在網上搜尋一片後發現還要安裝libxml2-dev
,這個我不是很懂。。。再次執行./configure
成功並自動創建了Makefile
文件,繼續:
root@ip-*** ~/php-7.0.0 # make //這個步驟視軟件大小和硬件性能執行時間會有差別 /bin/bash /root/php-7.0.0/libtool --silent --preserve-dup-deps --mode=compile cc -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -Iext/opcache/ -I/root/php-7.0.0/ext/opcache/ -DPHP_ATOM_INC -I/root/php-7.0.0/include -I/root/php-7.0.0/main -I/root/php-7.0.0 -I/root/php-7.0.0/ext/date/lib -I/usr/include/libxml2 -I/root/php-7.0.0/ext/sqlite3/libsqlite -I/root/php-7.0.0/TSRM -I/root/php-7.0.0/Zend -I/usr/include -g -O2 -fvisibility=hidden -c /root/php-7.0.0/ext/opcache/ZendAccelerator.c -o ext/opcache/ZendAccelerator.lo ... Build complete. Don't forget to run 'make test'.
編譯結束時,應該能看到上面的提示,make test
是非必要的,自行選擇,另外要注意的一點,若是你是二次編譯的話須要先清理以前的編譯出來的文件,即在make
以前執行一下make clean
到這裏咱們只要再執行一下make install
就能夠安裝結束了。
這只是最基礎的安裝,我在這過程當中省略了不少配置項,這樣安裝出來的軟件是很「簡陋」的,事實上在執行./configure
操做時,有不少可選項供咱們配置,可是不一樣軟件能夠添加的參數是不同的,怎麼看當前的軟件能夠添加哪些參數呢?在軟件源碼目錄執行./configure --help
就能夠了:
root@ip-*** ~/php-7.0.0 # ./configure --help ... Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [/usr/local] ... SAPI modules: --enable-fpm Enable building of the fpm SAPI executable ...
這裏只列舉了兩個,一個是目標安裝目錄,一個是啓用fpm,這些選項能夠根據須要自行添加。
其實,不少軟件經過添加軟件源的方式仍是能夠用包管理器安裝的,上面說的PHP7就是這樣,不要打我???
Linux的包管理器有不少種,Cent OS有yum
,Ubuntu有apt
,還有別的像aptitude
之類的,這裏有一篇很好的文章供參考點我查看
zsh
也是一個很是強大的shell
環境,能夠用它來代替Linux系統原有的bash
,這是一組zsh
的配置,它可讓zsh
更加好用,感興趣的能夠看個人另外一篇文章oh-my-zsh小記
這是一個運行在終端的用於查看系統資源使用狀況和管理進程的圖形化工具,使用yum
或者apt-get
等安裝便可,完成後直接輸入htop
就可使用了,比原生的top
更強大。