查看文件內(nèi)容的命令有很多:cat, tac, more, less, head, tail, nl。
cat由第一行開始顯示檔案內(nèi)容;tac從最后一行開始顯示,可以看出tac是cat的倒著寫;more一頁一頁的顯示檔案內(nèi)容;less與more類似,但是比more更好的是,它可以往前翻頁;head只看頭幾行;tail只看尾巴幾行;nl顯示的時(shí)候,順道輸出行號(hào);od以二進(jìn)制的方式讀取檔案……
關(guān)于linux的主要分支,linux分支的歷史這篇文章有簡單明了的概括。
這里吐槽下,我目前在看的這本《Linux就是這個(gè)范兒》,行文風(fēng)格并不對(duì)我口味,里面有很多網(wǎng)絡(luò)梗,想必是作者為了拉近和讀者的距離,故意為之,but感覺也沒有其它作用了;還有些生拉硬扯的,比如第3章開頭的席慕蓉的詩,實(shí)在沒有多大用處,我只能表示“我竟然看完了”;廢話太多,很多可以更加詳細(xì)說明的反而一筆帶過,比如在某些概念和設(shè)計(jì)理念上應(yīng)該能表述的更清晰更直接&更詳盡;更有一些語義歧義和行文缺陷。就書論書,如果您是新手,如果沒有強(qiáng)大的搜索引擎,閱讀此書(逐步掌握Linux)的效率會(huì)很低。
Shell是提供用戶與Unix/Linux操作系統(tǒng)之間交互的特殊程序,shell自身又是一個(gè)解釋型的程序設(shè)計(jì)語言。第一個(gè)主流的shell是Bourne shell,以發(fā)明者Steven Bourne的姓來命名,它在1979年隨Unix版本7發(fā)布并開始流行。在Unix系統(tǒng)里,Bourne shell的程序名為sh。Bash,即Bourne again shell,誕生于1988年,它是Bourne shell的超集,完全兼容后者并擁有更多的特性和功能。在Unix和Linux系統(tǒng)里,bash的程序名就是bash。在Unix系統(tǒng)里,程序sh與bash是不同的;而在Linux系統(tǒng)里,也有一個(gè)名字為sh的程序,但它不是真正的Bourne shell,它是一個(gè)指向程序bash的符號(hào)連接(軟連接),這個(gè)符號(hào)連接的設(shè)置是為了使Bourne shell腳本在Linux下不做修改就可運(yùn)行,在Linux下運(yùn)行sh時(shí),實(shí)際上運(yùn)行的是bash。
關(guān)于Linux下圖形界面相關(guān)概念解釋可參看——linux圖形界面基本知識(shí)(X、X11、Xfree86、Xorg、GNOME、KDE之間的關(guān)系)
Linux的文件組織確實(shí)讓我耳目一新,掛載式安裝感覺棒棒噠。發(fā)現(xiàn)微軟的一些改進(jìn)都是學(xué)習(xí)了Linux,比如.Net軟件的免安裝,拷貝即可用的特性。說到這,不得不說到經(jīng)(萬)典(惡)的注冊(cè)表。windows剛開始的時(shí)候是和unix一樣沒有注冊(cè)表的,它的程序信息在后綴為ini的文本文件中。后來Windows引入注冊(cè)表,從某方面來說還是先進(jìn)的,至少注冊(cè)表充當(dāng)了整個(gè)系統(tǒng)的核心數(shù)據(jù)庫,信息管理統(tǒng)一且開放了統(tǒng)一的編程API。它使得操作系統(tǒng)和應(yīng)用程序能共享信息,這在操作系統(tǒng)與軟件之間、軟件與軟件之間能夠協(xié)同工作。一個(gè)簡單的例子是一個(gè)應(yīng)用可以打開Word、Excel文檔,如果它把這個(gè)信息寫進(jìn)這個(gè)共享數(shù)據(jù)庫,那么系統(tǒng)和其他應(yīng)用要打開word、excel文檔時(shí)就可以找到它。Linux的各類配置主要在/etc和/home/用戶名 下,非注冊(cè)的配置方式,最大的好處就是“拷貝即安裝”,個(gè)人覺得就用戶體驗(yàn)來說,單這個(gè)優(yōu)點(diǎn)就可以秒殺注冊(cè)表了。不過如果能將兩者優(yōu)勢(shì)統(tǒng)一,即免注冊(cè)but又能統(tǒng)一管理,自是最好不過了,看幾代以后的操作系統(tǒng)能實(shí)現(xiàn)吧。
Linux下安裝軟件
首先嘗試使用源代碼安裝軟件,以安裝社區(qū)版MySQL為例。源碼包地址:http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.26.tar.gz。官網(wǎng)有較詳細(xì)的安裝指導(dǎo)和概念說明。
先指定要保存這個(gè)包的目錄,建議把所有下載的源碼包放到/usr/local/src/目錄下,這個(gè)并不是必須的,只是一個(gè)約定。
# cd /usr/local/src/
then 使用wget命令下載,# wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.26.tar.gz。
wget,用于[遞歸]下載網(wǎng)絡(luò)文件。
then 解壓源碼包 # tar -zxvf mysql-5.6.26.tar.gz
then 下一步是什么呢?通過 # more mysql-5.6.26/README 看下提示,說去官網(wǎng)看文檔,官網(wǎng)上說源碼安裝mysql,需要預(yù)安裝CMake、make、ANSI C++ compiler、Perl。
make,gcc(雖然官網(wǎng)只說安裝了gcc就可以了,但實(shí)踐證明還需要安裝g++,看下文),perl用 # rpm -qa XXX 查看都已經(jīng)安裝,且版本滿足需求,跳過。
cmake,本來打算還用wget下載安裝,無奈國情所致,連接國外網(wǎng)站的下載速度實(shí)在太慢,6M的文件要下半小時(shí),聽朋友建議,使用yum安裝 # yum install cmake。關(guān)于cmake的相關(guān)概念,可參看:Linux中的makefile文件,cmake和make區(qū)別。
man一下cmake,17k多行的黑白文字,還是英文的,表示已看暈在廁所。若要看cmake支持的命令選項(xiàng)集合的話還可參看MySQL Source-Configuration Options
我現(xiàn)在只要保證能安裝成功即可,那么多選項(xiàng)大概瀏覽一遍即可,so直接執(zhí)行cmake,果然出乎意料(矛盾修辭)的報(bào)錯(cuò):Curses library not found. Please install apPRopriate package……
Curses library又是個(gè)什么鬼,查了資料,貌似是將不同終端的同行為的差異化處理封裝成統(tǒng)一的接口。這在古老的非桌面系統(tǒng)上,能減輕和各類系統(tǒng)對(duì)接的軟件開發(fā)工作量,比如同樣的換行動(dòng)作,不同終端定義的輸入?yún)?shù)是不一樣的,而Curses library封裝了這些差異。更多的內(nèi)容可參看 http://heather.cs.ucdavis.edu/~matloff/UnixAndC/CLanguage/Curses.pdf。
仍然用yum分分鐘安裝了Curses library,then cmake,告訴我沒有指定CMAKE_CXX_COMPILER,擦,這玩意兒還需要顯式指定么,so,-DCMAKE_CXX_COMPILER=gcc,仍然報(bào)錯(cuò),大概意思是:/bin/gcc broken—— not able to compile a simple test program balabala。百試不得其解!后來仔細(xì)看了下輸出的錯(cuò)誤明細(xì),發(fā)現(xiàn)這么一句:gcc: error trying to exec 'cc1plus': execvp: No such file or directory。cc1plus看名字好像是和c++有點(diǎn)關(guān)系,難道gcc無法編譯c++么?博主毫無相關(guān)知識(shí)的積累,依著網(wǎng)上找線索試著安裝了g++,然后cmake(沒有指定CMAKE_CXX_COMPILER),這回沒有報(bào)錯(cuò),看著Generating done字樣出現(xiàn),博主的眼中泛出點(diǎn)點(diǎn)淚光。
到目前為止,我們只完成了Configure的步驟,接下去是Build,# make 即可,此過程持續(xù)了15分鐘左右,很順利;接下去是Install,# make install,也是很順利的樣子,半分鐘不到,沒報(bào)錯(cuò),也沒提示成功。如前所述,install對(duì)于Linux來說應(yīng)該就是一個(gè)文件掛載的過程,區(qū)別于windows的注冊(cè)安裝模式,maybe這便是安裝過程如此低調(diào)的原因:)。
配置并啟動(dòng)mysql
注意,為了方便,上述安裝過程是由root完成的。安全起見,我們須要給mysql分配一個(gè)專用賬號(hào),比如dber,可以鍵入 cat /etc/passwd | grep dber 查看用戶名是否已經(jīng)存在。沒有的話,就用useradd和passwd命令新建用戶和設(shè)置密碼,系統(tǒng)默認(rèn)會(huì)同時(shí)創(chuàng)建一個(gè)名為dber的用戶組,我們可以使用groupadd mysql 創(chuàng)建一個(gè)名為mysql用戶組,然后使用usermod -g mysql dber將dber的用戶組改為mysql,然后groupdel dber刪除dber用戶組。當(dāng)然可以在創(chuàng)建用戶的時(shí)候就指定用戶組。然后
# chown -R dber:mysql /usr/local/mysql
改變mysql目錄所屬的用戶和用戶組?,F(xiàn)在用 ls -ld /usr/local/mysql 查看mysql目錄的屬性和權(quán)限,顯示:drwxr-xr-x. 13 dber mysql 4096 Aug 23:18 mysql 。可以看到dber擁有rwx權(quán)限。使用 su dber - 將當(dāng)前用戶切換成dber。
執(zhí)行mysql_install_db。mysql_install_db initializes the MySQL data directory and creates the system tables that it contains。提示缺少perl模塊Data::Dumper,yum install perl-Data-Dumper即可。然后再執(zhí)行mysql_install_db,完畢后輸出提示信息說生成了一個(gè)配置文件,路徑/usr/local/mysql/my.cnf,而centos系統(tǒng)安裝時(shí)生成了的/etc/my.cnf配置文件會(huì)被優(yōu)先讀取,so,要么將后者移除(刪除或改名),要么在啟動(dòng)服務(wù)時(shí)另外指定。轉(zhuǎn)到bin目錄,./mysqld_safe --defaults-file=/usr/local/mysql/my.cnf 啟動(dòng)服務(wù),其中--defaults-file即指定要讀取的配置文件。
關(guān)于my.cnf的配置項(xiàng)詳細(xì)說明在http://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html
很不幸,屏幕上輸出一行什么日志記錄到XXX.err,然后又打出一行正在啟動(dòng),就沒下文了(后來發(fā)現(xiàn)此時(shí)mysql應(yīng)該就已經(jīng)成功啟動(dòng)了)??茨莻€(gè)err文件,看到提示:[Warning] TIMESTAMP with implicit DEFAULT value is deprecated.Please use -- explicit_defaults_for_timestamp server option。用vi編輯my.cnf,加上一行 explicit_defaults_for_timestamp=true。更多信息可參看MySQL 5.6 中 TIMESTAMP 的變化
開耍mysql
現(xiàn)在我們可以直接鍵入./mysql登錄mysql服務(wù),使用select user(); 查看當(dāng)前用戶發(fā)現(xiàn)是dber。show databases; use xxxdatabase; select * from xxxtable; 運(yùn)行順暢,哦了。
mysql有多種數(shù)據(jù)引擎可供選擇,ISAM、MyISAM、HEAP、InnoDB和Berkley(BDB)等——還能夠使用MySQL++來創(chuàng)建自己的數(shù)據(jù)庫引擎——適用場景各有不同,可以對(duì)不同表指定不同數(shù)據(jù)引擎,比如把那些需要用到事務(wù)處理的表設(shè)置成InnoDB,其它設(shè)置成MyISAM,盡量提升查詢性能。
vi的recording狀態(tài),是記錄按鍵狀態(tài)。在一般模式(命令模式)下打q沒有冒號(hào)時(shí),就會(huì)進(jìn)入這個(gè)狀態(tài)。按q之后,按的第一個(gè)字母或者數(shù)字就是這個(gè)按鍵宏的快捷鍵。使用的時(shí)候按@和你記錄時(shí)的第一個(gè)字母或數(shù)字,就可以執(zhí)行剛才編輯的按鍵宏了。進(jìn)入了記錄狀態(tài)(recording)不要慌,按esc,然后按q,就可以退出recording了。:wq 強(qiáng)制性寫入文件并退出(存盤并退出 write%quite)。即使文件沒有被修改也強(qiáng)制寫入,并更新文件的修改時(shí)間。:x 寫入文件并退出。僅當(dāng)文件被修改時(shí)才寫入,并更新文件修改時(shí)間;否則不會(huì)更新文件修改時(shí)間。
另外可有朋友知道,在文本模式下,使用什么命令連接到WiFi或設(shè)置網(wǎng)絡(luò)連接呢?每次連接到WiFi都要切換到圖形界面,感覺太low了!
其它參考資料:
CentOS 6.4下編譯安裝MySQL 5.6.14
轉(zhuǎn)載請(qǐng)注明本文出處:http://www.CUOXin.com/newton/p/4712213.html
以下可以不用看,和本文主題沒關(guān)系,以后會(huì)搬走!
插:一直以為頁面中有太多超連接不好,降低傳輸效率,其實(shí)這是不確切的。在Http1.0下固然如此,但是現(xiàn)在基本上用的都是Http1.1,在同域文件請(qǐng)求上,多個(gè)文件可以在一個(gè)HTTP連接傳送多個(gè)HTTP請(qǐng)求和響應(yīng);若把Connection設(shè)為“close”,那么效果就和Http1.0一樣了。還有個(gè)問題一直困擾著我:當(dāng)服務(wù)端尚未回傳,請(qǐng)求終止(比如點(diǎn)擊停止按鈕或關(guān)閉頁面關(guān)閉瀏覽器等),此時(shí)服務(wù)端應(yīng)該會(huì)繼續(xù)執(zhí)行未完成的業(yè)務(wù)邏輯,但是執(zhí)行完畢后,是否還會(huì)回傳結(jié)果呢?關(guān)鍵是不清楚請(qǐng)求終止時(shí)連接是否同時(shí)關(guān)閉,有知道的朋友請(qǐng)告之,感激不盡!
插:HTTP POST請(qǐng)求報(bào)文格式
插:.h文件是聲明文件,可以放類聲明及定義;.cpp文件是實(shí)現(xiàn)文件,可以放類的定義;一般情況下一個(gè).cpp的文件應(yīng)該包含一個(gè)同名的.h文件。
插:使用 NuGet 管理項(xiàng)目庫
插:C# 中參數(shù)驗(yàn)證方式的演變
新聞熱點(diǎn)
疑難解答
圖片精選