標籤:

如何Linux入門?

我是一所比較一般的211大學的本科,保送本校馬上讀研,電子與通信工程專碩方向,覺得電路設計、模擬集成電路啥的都不感興趣,想學習linux,包括linux嵌入式平台的開發與研究、linux內核的移植等,不知道如何入門。求推薦一些好書,嵌入式的linux開發板,包括需要安裝那些發行版本的linux和編譯環境。謝謝各位大拿!本人有C/C++基礎,通信原理、微機原理、電路方向的專業基礎,單片機嵌入式的理論入門。


  • GNU/Linux操作入門:鳥哥的 Linux 私房菜 -- 鳥哥的 Linux 私房菜 首頁
  • Linux內核源碼研究:Oldlinux.org -- 自由飛鴿Linux網站plinux
  • Linux編程好書:a、深入理解Linux內核(第三版)b、Unix環境高級編程 c、Programming Embedded Systems in C and C++
  • 開發環境:Ubuntu


只有學習操作系統原理才能入門,其餘的路徑不過是學學常見軟體的操作而已


剛剛學習linux兩個月不到,對於這個問題,我有自己切身學習的體會。如果按照樓上大多數人所說的學習linux僅僅單純學習工具,比如命令行,vim,僅僅為了用工具的來學習linux,linux學習起來枯燥乏味。以下是我兩個月來學習linux的一些感想,希望對樓主有幫助。


1、開始上手避免工具控,比如為了學習vim,就一直在練習vim的命令,我建議是根據問題來,可以自己要在linux下寫個小程序,然後在編碼過程中,有針對性的去尋找命令的用法,這樣做可以讓自己對命令牢記深刻,然後編譯程序,調試程序。在這個過程中你自然而然你會去學習gcc、gdb、makefile。這個過程很慢,但你走完一遍,你就會學到很多命令行和工具。

2、多在linux下寫程序,你的linux方面入門命令之類的基礎就有了。接著可以去看看linux相關的書籍,(鳥哥私房菜),反正就是過一遍這個系統基礎知識,過一遍是為了以後再用linux時出現問題能夠快速定位找答案。


3、接著你可以折騰一下自己,可以試著部署伺服器,試著去做點和應用有關的事情,從中發現問題,自己想辦法解決,逐漸的,linux 系統就熟悉起來。


4、如果你有一定的操作系統的基礎,演算法和數據結構基礎,可以嘗試著閱讀linux內核等知識,然後整個linux內核體系逐漸構建起來。


很多已經職業化的Linux運維工程師,對這種問題其實挺無奈的,一般會有如下回答:

裝個虛擬機,多裝幾個Linux系統,我就裝了兩個,蠻好玩的,學習Linux首先要掌握一些基本的命令,如果你不會命令那麼你就別學了,你也別操作Linux了因為他不同與Windows桌面系統,命令網上多的是,在網上一搜一大片,,本人習慣用google。共同進步!

但是我一般會問三個問題,其實就清楚為何入不了門了:

1.你從哪裡知道的linux?

2.你準備學Linux幹嘛?

3.你學Linux有多大決心?

一般情況下,大部分人接觸Linux的機會並不多,對Linux平台下的開發更是一無所知。而現在的發展趨勢卻越來越表明:無論是作為一個優秀的軟體開發人員,或是互聯網、IT行業的從業人員,掌握Linux是一種很重要的謀生資源與手段,很多跡象表明這是一個很好的加分項。

下來我將會結合自己的幾年的個人經驗,談談Linux的學習方法與學習中應該注意的一些事。

培養耐心,培養興趣

興趣是最好的老師,建議你去摸索下Linux有些什麼優點和特點,了解了這些可以提升你對Linux的好感,嘗試著去了解、學習這些優點,掌握一些初級的「黑魔法」,相信你的心會慢慢得被Linux所捕獲。

Linux入門其實是很簡單的,問題是你是否能有足夠的耐心,花相應的時間和精力來折騰,是否不排斥重裝系統這種枯燥且萬能的學習手段。如果不願意折騰可以說是學不好Linux的,要真正了解Linux的分區機制,對LVM使用相當熟練,沒有個20次以上的Linux裝機經驗是積累不起來的,所以一定不要怕折騰。

由於大家之前都使用Windows,所以我也儘可能照顧這些「菜鳥」。如果你第一次接觸Linux,那麼首先推薦在虛擬機中嘗試安裝、運行它,虛擬機Virtual Box、VMware Workstation ,前者開源且免費,而後者則是閉源的、收費的。我兩者都使用過,前者免費固然好,性能上不如後者,如果你的Money足夠多,可以嘗試下正版VMware Workstation 。另外Virtual Box的安裝包很小巧,Windows平台下安裝包在90MB左右,而VMware Workstation 一般600MB以上

關於學習什麼Linux發行版,其實Linux的基本命令都是通用的,你如果在一種平台上面學好了,在其他平台基本上並不需要花多少功夫來重學。另外我還是推薦一下,如果是軟體開發方向呢,Ubuntu是首選,它注重桌面用戶的體驗,界面絢麗、更新快、功能多,在版本選擇最好選擇LTS(Long Term Support)版本的。如果是伺服器運維方向,或者對性能要求高、穩定性好呢,就選擇CentOS和RedHat Enterprise Linux,在國內伺服器系統領域,這兩個Linux發行版算是份額很高的,具體他們的區別自己搜搜吧。

選一本書籍,吃透!

接下來,你需要選一本書,然後專心致志的讀完並吸收它,我見過很多初學者,一開始就買很多書籍,或者買很多視頻,一會看看這個,一會看看那個的。可是呢?技術卻絲毫看不見長進,因此初學者要謹記:「切忌這山望那山高,不一而終」。

是該選書籍呢,還是視頻呢?視頻的效率真的很低的,比起看書,我認為效率至少要低一半以上了,所以我建議直接看書,或者網上找比較好入門帖子也是可以的。總之,視頻不是首選,如果你時間多,也是可以的。

對於就算一本很普通的書籍,如果你吃透它,對初學者來說都會帶來很大的進步。因此,真的要選定一本,抱著這本不學完、不看完就不繼續另一本的決心。關於Linux的書籍,我推薦《鳥哥私房菜》,這本書從最基礎的安裝Linux系統到高級服務部署,並且內容完全100%的覆蓋了紅帽RHCSA+RHCE認證考試範圍,這樣對想取得證書的朋友,也是非常有利的。它對Linux方面的知識進行了提煉,為初學者節省了很多的時間,可以少走很多彎路。你可以先百度一下這本書,看看這本書目錄,再確定要不要用這本。我相信不會讓你失望的,如果你不喜歡也可以選自己喜歡的,但是請堅持吃透它。

三人行,必有我師!

選兩三個Linux群,加進去。平時對群友問題認真對待的群友,可以加上,當你有問題的時候可以請教他,另外你在問問題的時候,請自己先試著解決,百度|谷歌一下。最後實在解決不了再問,這樣:

一是可以提高你解決問題的能力;

二是培養獨立解決問題的習慣。關於如何提問,這也是一門學問,不要逮著就亂問一通,你的把你這個問題詳細描述一下,你在什麼環境遇到什麼問題?什麼版本?自己做了怎樣的嘗試,還是不能解決,系統給的提示是什麼?這才算是一個完整、高效的提問。有時候你提問不是人家不願意你,而是你提問的水平太低了,想回答你吧,還得先問你幾個問題確認一些情況,多麼浪費人家的時間。每個人的時間都是寶貴的,誰都沒有義務回答你的問題,因此,提問的時候需要考慮幫助你的人的感受。

學習,就是修心

無論是什麼技術,如果沒有一定的興趣,天天面對著軟體界面、命令行,時間長了就會變得非常的枯燥、乏味,這也是為什麼把興趣放在文首了。一段時間後,你也許是步入佳境,也許是想放棄,我想對那些想放棄的人說:學習,本來就是一種修行。人們往往偏向於選擇內心感到舒適的事物,此時想放棄,是因為你內心覺得枯燥得難以忍受,此時從了你的內心,那麼你將被自己打敗。人在成長的過程中,每一次成長都是你決絕了那個舒適的選擇,遠離舒適區就會讓你成長,在工作中,老是做得心應手的工作,你並不會成長,如果你做高於你能力一點點的工作,你才會得到成長,不斷的「一點點」積累,終究一日你會發現你的積累是十分巨大的,這也是數學中的「複利」。

相信那些能讓自己拒絕待在舒適區的朋友,會在這一條學習路上不停的前進,相信你們學習Linux能獲得的收穫,但是,前提依然是:耐心、堅持、從一而終。

你想更深入了解學習Linux知識體系,你可以看一下我們花費了一個多月整理了上百小時的幾百個知識點體系內容:

【超全整理】《Linux雲計算從入門到精通》系列實戰筆記全放送


謝邀。

首先我不得不承認,我是BSD陣營的。linux 的經驗還是來自很多年前體驗 RedHat 以及後來安裝過幾次Fedora……對你說的方面更是沒什麼經驗了。

從我自己對 Linux 的感覺說起來,你需要做的第一件事情就是把英文練得好好的;其次,就是找一兩本你感興趣的 Linux 書籍,然後從自己感興趣的方面讀一讀,無需通讀研究整本書。然後,就是要善於找問題,問問題。到相關方面的郵件列表上參與大家的討論等等。最後就是實踐了,早早的開始去做一個實際的項目,在交流和學習中進步。

最後, good luck!


分享一篇文章。

一、Arm-Linux程序開發平台簡要介紹... 3

1.1程序開發所需系統及開發語言... 3

1.2系統平台搭建方式... 4

二、Linux開發平台搭建... 5

2.1安裝虛擬工作站... 5

2.2安裝Linux虛擬機... 5

2.3虛擬機的一些基本配置... 7

2.3.1建立共享目錄... 8

2.3.2調整桌面解析度... 9

2.4安裝軟體... 11

三、Fedora-linux系統... 11

3.1控制終端的基本操作命令... 12

3.2編程工具簡介... 12

3.2.1 Fedora-Eclipse CDT. 13

3.2.2 Qt庫及Qt界面設計軟體... 14

四、使用Eclipse CDT開發Linux程序... 15

4.1建立控制台程序... 15

4.2建立Linux窗口程序... 16

五、使用Eclipse開發Arm-linux程序... 19

5.1 Arm-linux硬體平台... 19

5.2開發控制台程序... 20

5.2.1使用Eclipse CDT編寫代碼... 20

5.2.2建立交叉編譯環境... 20

5.2.3編譯並運行程序... 22

5.3一些常用的軟體介紹... 23

5.4開發arm-linux窗口程序... 24

5.4.1建立Qt交叉編譯環境... 25

5.4.2編譯生成可執行窗體程序... 26

六、高級Linux程序設計... 28

6.1多文件控制台項目... 29

6.2多文件Qt項目... 29

6.2.1使用Qt Designer設置界面... 29

6.2.2多文件Qt開發時的一些經典錯誤... 31

6.3關於makefile. 32

七、學習資料... 32

前言:本文記錄了自己從一個完全不懂Linux的人如何一步步學會Linux程序開發的過程。當然也希望本文能夠達到它的目的,讓那些和我一樣沒有任何基礎的人也能快速入門Linux程序開發。

一、Arm-Linux程序開發平台簡要介紹

Arm-Linux程序的開發並不像我們以前接觸的Windows程序開發那樣,關於平台的搭建就繁瑣很多,所以在正式進入程序開發之前先對這種開發模式進行簡要介紹,讓一個即使沒有任何Linux開發經驗的程序員也能夠看懂後面的內容。

1.1程序開發所需系統及開發語言

開發arm-linux程序至少需要三種系統:

Windows系統

主要用來文件傳送和一些簡單的文本文件編輯。這個系統其實並非必需,只是因為目前PC機上最流行的系統仍然是Windows系統,我們的很多關於PC的文件和數據的操作習慣都是在Windows系統上養成的,已經對其形成了嚴重的依賴,所以Windows系統扮演著的「輔助開發系統」的角色。

PC-Linux系統

在此系統上安裝arm-Linux交叉編譯器後,就可以對代碼文本文件進行編譯,生成可在arm-Linux系統中運行可執行程序。此系統被稱為「Linux宿主機」,我們對Linux程序的開發工作(包括代碼編寫、調試和編譯生成可執行文件)基本上就是在此系統上進行的。

Arm-Linux系統

Arm-Linux程序運行的平台。此系統的硬體載體是一塊小型的嵌入式arm板,我們在Linux宿主機上開發好程序並編譯生成arm-linux可執行程序後,將可執行程序文件傳送到嵌入式arm板中,然後就可以在arm板上直接運行此程序了。

三種系統的職能和聯繫如下圖:

「三系統」職能和關聯圖

關於每個系統的職能及操作還有文件如何傳送交流都在後面詳細介紹。

關於開發語言,因為目前購買的Arm-Linux嵌入式板提供的編譯庫都是C/C++的,所以一般選擇C/C++進行程序設計。

1.2系統平台搭建方式

關於「三系統」的搭建方式,有兩種方法:三台分立的單系統機器組合或者一台雙系統PC機和一台單系統Arm板機器。但是不管採用哪種組合方式,各種系統的職能都是一樣的,而且都是通過FTP、Telnet或者SSH等網路協議進行文件傳輸交流。

「三機器」組合模式。將三個系統分別安裝在三台機器上並將三台機器組建區域網。

「兩機器」組合模式。在PC機上利用虛擬工作站可以同時運行兩個系統,虛擬機上的Linux系統基本可以完成所有的實體PC-Linux機器的所有任務,當然也能夠組建區域網。

「三機器」組合模式圖

「兩機器」組合模式圖

如果開發人員對機器性能要求比較高,那麼建議採用「三機器」組合模式。因為「兩機器」組合模式要求一台機器運行雙系統,每個系統都需要分配一定的硬體資源,可能會對每個系統運行的流暢程序都造成影響。

如果開發人員只進行一些簡單的程序開發,則建議採用「兩機器」組合模式。這樣可以節省硬體設備的投資,而且開發環境的搭建、開發的流程等等都會簡單一些。而且下面的內容都是基於這種「兩機器」組合的開發模式。

二、Linux開發平台搭建

2.1安裝虛擬工作站

目前比較流行的虛擬工作站比較多,推薦使用VM-ware WorkStation。建立虛擬工作站的目的就是為了使一台機器同時運行多個不同類型的系統,方便開發人員進行跨平台開發應用程序。

(關於VMware,可以到網上搜索到詳細介紹和使用方法,在此不再贅述)

2.2安裝Linux虛擬機

安裝虛擬機的過程和安裝實體機一樣,唯一的區別是,虛擬機安裝是從VMware中打開並安裝的。先準備Linux安裝文件,一般可以到網上下載到Linux的iso安裝文件,然後從VMware中安裝此系統。

(關於虛擬機安裝,在網上可以搜索到詳細的步驟,在此不再贅述)

幾點建議:

1.安裝Fedora-10並選擇完全安裝,即把所以的包和選項都勾上。這樣在安裝完畢後,系統就自帶了很多開發工具和相關的庫,避免自己去重新進行煩瑣的基本開發平台搭建。

2.在VMware中為虛擬系統配置硬體資源。建議分配硬碟空間16G,內存1G以上。因為今後主要的Linux程序開發工作是在虛擬機上進行了,所以為了保證虛擬機流暢運行,需要分配比較豐富的硬體資源。

在第一次從ISO文件中安裝完畢虛擬機後,在安裝目錄下面會生成一系列的文件,將這些文件進行備份後,在其它機器上安裝虛擬機的時候就花幾個小時去從ISO中安裝了,將這個目錄下的文件複製到相應的目錄下面(在第一次從ISO中安裝的時候設定的目錄相同),然後只需要從VMware中打開此目錄下的文件就行了。

執行VMware Workstation中的【View】--【Home】,調出Home視圖,然後打開虛擬工作站系統文件。

打開後,就可以看到一個虛擬機的硬體資源配置了。這些參數有一部分是在只能在初次使用iso安裝的時候配置的,比如硬碟大小。另外一些參數比如內存大小、共享目錄等等可以在後期隨時人工更改的。

詳細設置內容,到網上可以找到很多相關內容,在此不再贅述

兩種方法的區別就是WinXp的安裝盤和Ghost盤的區別吧。

安裝完畢Fedora後,就可以從虛擬工作站中啟動Fedora Linux系統了。系統桌面如下:

2.3虛擬機的一些基本配置

在第一次安裝完畢虛擬機後開啟虛擬機,默認的解析度是800*600,同時沒有全能共享目錄。為了獲得比較好的操作界面,同時方便文件共享和轉移,需要進行一些基本的配置。

2.3.1建立共享目錄

在同一個硬體PC機上運行的兩個系統。Windows實體系統用來做一般的用途,比如聯網,處理文檔等等;Fedora Linux虛擬系統則用來開發Linux程序並進行編譯生成可執行文件。

先需要安裝vmware tools

在VMware上面,選擇菜單【VM】--【Install VM tools】,然後在Linux虛擬機上會生成目錄/media,同時裡面產生一個rpm文件。

然後打開控制終端並su登錄超級用戶:

cd /media

rpm –ivh VMwareTools-7.8.5-156735.i386.rpm

cd /usr/bin

然後在/usr/bin下面看到wmware-config-tools.pl

再在Teminal中輸入wmware-config-tools.pl

然後一路回車下去。然後今後就可以建立共享目錄。

詳細過程也可以在網上搜索相關內容

共享目錄的好處是可以將這些文件在Windows系統中提取出來,然後可以通過我們熟悉的windows系統進行網路傳輸和一些其它命令操作。這個設置在後面程序開發的時候會提到其使用方法。

在VMware中建立共享目錄,執行菜單命令【VM】--【Settings…】

然後在Linux虛擬機文件系統中可以找到對應的共享目錄:/mnt/hgfs/xplinux

建立共享目錄可以方便虛擬機和實體機進行文件交流。例如,我們可以將在Linux機器上編譯生成好執行文件放置到共享目錄中,然後可以通過Windows機器提取出來並通過網路傳送到arm-linux嵌入式板上。

2.3.2調整桌面解析度

在VMware工作站中調整虛擬機桌面解析度。一般默認是800*600,而且現在的顯示器,一般是1024*768甚至更高,以我目前使用的電腦顯示器為例,解析度是1440*900。需要將虛擬機桌面解析度進行適當調整,然後全屏,那麼就可以獲得比較友好的操作界面。

在VMware中啟動虛擬機,虛擬機啟動後的登錄界面如下:

然後登錄系統,設置解析度,系統菜單:

【System】--【Preferences】--【Hardware】--【Screen Resolution】

設置好解析度後,就可以在獲得全屏狀態的Linux操作界面了。

2.3.2其它設置

比如設置桌面背景,系統字體,還有資源管理器的模式等等,這些可以自己去實地操作並進行熟悉。

2.4安裝軟體

雖然Fedora已經自帶了一些必要的軟體,如Open Office辦公軟體,gedit記事本軟體,Firefox網頁瀏覽器等等。但是既然是操作系統,我們也可以安裝一些我們需要的軟體。比如中文輸入法(如:小企鵝輸入法),聊天工具(如QQ)等等。

注意:在Terminal終端中安裝程序的時候需要啟用su超級用戶許可權。

三、Fedora-linux系統

Fedora-linux虛擬機安裝完畢並進行基本設置後,就可以開始了程序開發環節了。在正式開始程序開發時,還需要對Linux的一些基本編程工具進行簡要介紹,當然如果已經有此基礎的,可以直接略過這一章。

3.1控制終端的基本操作命令

執行系統菜單命令【Applications】--【System Tools】--【Terminal】,打開Terminal終端:

熟悉Windows系統的DOS操作界面的人肯定也會對此操作終端也不會陌生。通過在Terminal中輸入命令,用戶可以很方便地完成Linux下的一系列操作,在正式進入自主程序設計之前,用戶有必要對下面一些最基本命令進行熟悉(其它的命令在項目需要的時候再到網上查找相關資料)。

雖然目前Fedora為用戶提供了比較良好的操作界面,但是Linux最初是從命令行的操作系統發展起來的,很多強大的功能都是需要依靠Terminal控制終端來實現的,所以作為開發人員有必要先對這些基本命令進行熟悉並熟練操作。

3.2編程工具簡介

如果在安裝Fedora的時候,選擇的是完全安裝,系統會自帶很多開發工具。其中Fedora -Eclipse CDT和Qt庫及相關設計器Qt Designer是我們今後開發的主要工具。

當然,如果用戶沒有選擇安全安裝,則可以到網上下載到各類開發工具的安裝文件,並自己進行安裝。

3.2.1 Fedora-Eclipse CDT

在Fedora中執行系統菜單【Application】--【Programming】--【Eclipse】

然後就可以看到Fedora Eclipse的啟動畫面

然後就是下面就是Eclispe的IDE環境了,有過Windows下的Java編程經驗的人來說,這個界面是再熟悉不過了,完全可以直接過渡到Linux下的C/C++程序開發上來,這樣就極大地減少了程序員的學習周期。

Eclipse的好處,第一就是開源,第二就是免費,第三就跨平台。

因為開源,所以可擴展性很強,Eclipse實際上就是一個萬能的程序開發環境,只需要在設置中對相關語言的庫進行引用並連接相應的編譯器,就可以對基於任何語言的程序進行開發;因為免費,所以省去了註冊軟體等等瑣事。因為跨平台,所以當用戶進行跨平台程序設計的時候,可以極大減少學習周期。

Eclispe在Windows平台下一般都是作為Java的開發環境,用來開發Java桌面應用程序和Jsp網頁應用程序甚至目前比較流行的Android手機終端軟體。在Linux下面對C/C++的庫編譯器進行了連接後,則成為Linux下的C/C++開發環境,在Linux下安裝JDK後則可以進行Linux下的Java程序設計,如果給Linux系統安裝tomcat網頁伺服器,則可以進行Linux下的網頁應用程序開發,如果給Linux安裝mysql資料庫服務,則可以進行資料庫連接操作等等(因為目前我們的目標主要是arm-linux窗口程序開發,所以主要對C/C++進行研究)。

3.2.2 Qt庫及Qt界面設計軟體

如果只是編寫C/C++控制台軟體,則只需要Eclipse CDT就完全可以解決。但是如果要進行窗體化編程,就需要引用一些開源的界面庫。例如目前比較流行的Qt庫。

Qt是諾基亞開發的一個跨平台的C++圖形用戶界面應用程序框架。它提供給應用程序開發者建立藝術級的圖形用戶界面所需的所用功能。Qt是完全面向對象的,很容易擴展,並且允許真正地組件編程。基本上,Qt 同 X Window 上的 Motif,Openwin,GTK 等圖形界 面庫和 Windows 平台上的 MFC,OWL,VCL,ATL 是同類型的東西,但Qt具有優良的跨平台特性、面向對象 、豐富的API、大量的開發文檔等優點。

在Eclipse中對項目Build選項進行設置,對Qt庫進行連接,然後就可以進行Linux下的Qt程序進行開發了。

因為Eclipse沒有提供可視化的窗體程序設計器,所以需要藉助第三方工具,QtDesigner可以很好的解決Qt的UI設計問題並編譯生成對應的*.h和*.cpp文件(具體的操作步驟將在下面的內容中詳細介紹)。

所謂「工欲善其事,必先利其器」,前面花了大量篇幅來介紹,都是為了「磨刀」,現在開始進入「砍柴」環節。下面將以Eclipse CDT作為開發環境來介紹Linux和arm-linux程序開發的一般方法。

四、使用Eclipse CDT開發Linux程序

4.1建立控制台程序

用Eclipse CDT建立基於C++的「Hello World」控制台程序。

打開Eclipse開發環境。執行【File】--【New】--【C++ Project】

然後進入到C++ Project嚮導,有C++的Hello World模板

點擊Finish,然後Eclispe就會建立一個基於C++的HelloWorld項目,運行程序後,能夠在控制台中輸出「Hello World」:

說明:如果是開發控制台程序,則不需要進行任何其它設計,只需要直接編寫C++代碼即可,不用對編譯庫和編譯器進行設置,Eclipse已經為我們自動完成了這些內容。

4.2建立Linux窗口程序

就像在Window環境下,如果要用C++開發窗口程序,我們一般需要使用Windows API或者MFC。同樣,在Linux環境下,我們可能在C++項目中引用Qt庫來進行Linux下的窗口程序開發。

在完整版的Fedora中,自帶了Qt的庫,在目錄/usr/lib下面:

系統默認自帶有兩個版本的Qt庫qt-3.3和qt4,一般我們用qt-3.3。

編寫窗口程序,我們只需要在建立了C++ Project的情況下,對C/C++ Build路徑進行設置,指向qt-3.3的庫即可。主要開發流程如下:

第一步:使用Eclipse CDT建立C++ Project。

第二步:設置Build路徑指向Qt。在項目管理器中右擊項目文件設置項目屬性,在C/C++ Build的Settings的Tool Settings中進行設置。

【GCC C++ Compiler】--【Directories】添加包含的文件路徑:/usr/lib/qt-3.3/include。這個是C++的編譯器包含的頭文件路徑,因為是建立的C++ Project,所以一定要設置。

【GCC C Compiler】--【Directories】添加包含的文件路徑:/usr/lib/qt-3.3/include。這個是設置C語言編譯器包含的頭文件路徑,因為有時候C++中會考慮到兼容一些C語言的語法和關鍵字,所以最好也進行相關設置。

【GCC C++ Linker】--【Libraries】添加編譯時引用的庫路徑:/usr/lib/qt-3.3/lib(注意:不要寫成include了)。並設置庫搜索命令參數:qt-mt。

第三步:編寫引用了Qt庫的C++程序。

第四步:運行程序。

程序運行效果如下圖:

總結:通過上面對Linux下面的控制台程序及窗口程序的介紹,我們已經對Linux系統下的簡單程序開發流程有了簡單了解。下面開始介紹arm-Linux程序的開發。

五、使用Eclipse開發Arm-linux程序

5.1 Arm-linux硬體平台

Arm-Linux機器採用的是飛凌嵌入式技術公司的FL2440開發板。在飛凌公司購買開發板的時候,會隨開發板一起贈送的相關入門教程《飛凌開發板配套教程》並附有一張光碟,裡面有各種寫FL2440相關的開發資源。

在正式進入程序開發之前,先對FL2440開發板及arm-linux系統進行熟悉。

Fl2440開發板:熟悉Bootloader的使用方法、學會燒寫內核、燒寫文件系統等等。

Arm-linux系統:熟悉利用一些文件系統和網路設置相關的命令。如果你對Linux命令已經有了一定了解,那麼arm-linux上的命令也基本一樣。

詳細操作過程請參考《飛凌開發板配套教程》一書

5.2開發控制台程序

主要開發流程圖如下:

在早期的開發環境方式中,是先用文本編輯器編寫c或者cpp文件,然後再直接在Linux機器上通過交叉編譯命令,編譯代碼文本文件並生成可執行程序,然後將可執行程序傳送到arm-linux板上,然後就可以在arm-linux機器上運行程序了。

現在的開發模式和早期的開發模式一樣,只是在編寫代碼的工具上進行了改進。早期編寫代碼的工具只要是能編輯文本的軟體就可以,甚至在Linux中通過終端的vi命令就可以搞定,Linux機器的職能僅僅是編寫代碼和編譯代碼。現在則使用Eclipse CDT,可以在Linux機器上編寫C/C++代碼並進行調試,Linux機器基本上可以模擬arm-linux系統上除了一些硬體相關度高的應用程序(如驅動程序)之外的絕大部分其它程序的運行環境。

5.2.1使用Eclipse CDT編寫代碼

其實和用Eclipse CDT編寫Linux環境下的控制台程序是完全一樣。除了在一些特別的場合,比如編寫驅動程序,需要注意差別外,其餘的功能的實現方法基本上一樣。

這方面屬於程序設計的基本功,需要長期學習和積累,所以在此不再多述。

5.2.2建立交叉編譯環境

雖然生成程序的源碼是一樣的,但是在Linux機器上編譯生成的可執行文件是不能在arm-linux系統上運行的,需要用arm-linux專用的編譯器進行編譯後,才能生成可在arm-linux系統上運行的可執行文件,當然此時應用程序又顯然不能在Linux系統上運行了。

將交叉編譯工具cross-2.95.3.tar.bz2(可以到網上下載,也可以到開發板附帶的光碟資源中找到)通過共享目錄傳送到Linux系統中,然後在Linux系統終端中先進入其文件目錄,然後執行解壓命令:

tar xjvf cross-2.95.3.tar.bz2

然後在/usr/local/arm文件目錄下可以看到解壓後的2.95.3的庫了,或者如果你解壓的是cross-3.4.1.tar.bz2的版本,那麼將會在對應目錄下生成3.4.1的目錄。

然後設置環境變數。因為Linux機器上存在不止一種編譯器,為了避免環境變數衝突,最好新建一個賬號,比如新建賬號arm-linux-gcc,然後在對應的賬號目錄中找到.bash_profile文件,設置環境變數,編輯.bash_profile,在最後一行增加路徑(vi打開文本文件,按i表示insert修改文本文件,然後Esc退出insert模式,再shift zz表示保存退出文件,詳細的命令介紹可以到網上查閱相關資料):

export PATH=/usr/local/arm/2.95.3/bin:$PATH

可以通過echo $PATH來查看環境變數是否設置成功:

5.2.3編譯並運行程序

在編輯好了代碼文件並建立好了交叉編譯環境後,就開始編譯代碼生成可執行程序,並移植到arm板上運行程序。

在Linux系統的終端中通過輸入arm-linux-gcc/arm-linux-g++來編譯C/C++文件。例如,我們對前面編寫的最簡單的CppHelloWorld.cpp文件進行編譯:

arm-linux-g++ CppHelloWorld.cpp –o CppHello

然後在對應目錄下會生成一個可在arm-linux系統上運行的應用程序CppHello。

然後通過SSH服務和FTP服務,將可執行文件從Linux文件系統網路傳送到arm-linux文件系統(在此用到了兩個小軟體SSH Secure和LeapFTP,在後面再對軟體的功能進行一下簡要介紹)。

然後在Windows機器上遠程登錄arm-linux系統開發板,並控制程序運行

注意:需要先通過chmod +x CppHello來告訴系統此文件是可執行文件,然後再通過./CppHello來運行程序。

我們可以看到程序運行的結果:在屏幕上列印出一行字「Hello World」

5.3一些常用的軟體介紹

在上面介紹的一些操作中,在進行文件傳送的時候用到了一些軟體,在此進行簡要介紹。

三系統之間的主要網路架構如下:

注意:

1.如果arm-linux系統的ftp和telnet連接不上,一般情況下是arm-linux默認沒有開啟相應的服務或者默認ip和windows機器不在同一網段。可以通過串口線將arm板連接到電腦上,然後打開超級終端,輸入命令vsftpd開啟ftp服務,輸入命令telnetd開啟telnet服務,ifconfig eth0 192.168.1.16設置IP到同一網段。

2.如果Linux系統的SSH連接不上,則一般情況下是Linux系統開啟了SSH的防火牆,則只需要在Linux系統中對防火牆進行相關設置,關閉針對SSH的防火牆。【System】--【Administration】--【Firewall】,然後勾選全能SSH。

還有一些其它軟體,比如小組協作時候,需要使用SVN進行代碼管理;還有遠程桌面VNC Viewer,可以進行遠程桌面控制(但是效果不太好,桌面顯示的延時好像比較嚴重)等等。

5.4開發arm-linux窗口程序

5.4.1建立Qt交叉編譯環境

在Linux系統中新建目錄/root/yizhi,然後將已經編譯好的arm-QT庫複製到此目錄下面。

然後將上面那六個tar.gz壓縮文件解壓到/root/yizhi目錄。

在進行arm-linux下的Qt編譯的時候,也涉及到環境變數設置問題,所以我們也最好再新建一個賬戶,專門用於編譯arm-Qt程序。

例如,在Linux系統終端中添加用戶zsm,然後進入到/home/zsm中,對.bash_profile進行修改,設置環境變數:

在命令終端中ls –a 顯示隱藏的所有文件 找到.bash_profile,輸入:

gedit .bash_profile

用geidt打開此文件後,在最後面添加下面的環境變數設置:

export PATH=/root/yizhi/qtopia-free-2.2.0/qtopia/bin:/root/yizhi/qtopia-free-2.2.0/tmake/bin:/root/yizhi/qtopia-free-2.2.0/qt2/bin:/usr/local/arm/2.95.3/bin:$PATH
export QTDIR=/root/yizhi/qtopia-free-2.2.0/qt2
export QTEDIR=/root/yizhi/qtopia-free-2.2.0/qtopia/
export LD_LIBRARY_PATH=$QTDIR/lib:$QPEDIR/lib:$LD_LIBRARY_PATH
export CC=/usr/local/arm/2.95.3/bin/arm-linux-gcc
export TMAKEDIR=/root/yizhi/qtopia-free-2.2.0/tmake
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++

設置好後最好重新登錄此賬號,然後在終端中輸入echo $PATH來檢驗環境變數是否設置成功:

如果出現上面的輸出,則表示arm-linux平台下的Qt交叉編譯環境的環境變數已經設置成功。接下來就可以進行Qt程序開發了。

5.4.2編譯生成可執行窗體程序

在3.2節中已經寫好了一個單文件的項目QtHello,並在項目的src目錄下生成了一個QtHello.cpp文件,然後我們要做的就是利用arm-linux下的Qt編譯器對其進行編譯。

編譯Qt窗體項目比編譯普通控制台項目要稍微麻煩一點,需要自己寫makefile來建立編譯規則,編譯如上的QtHello.cpp的makefile有如下模板:

#############################################################################
# Makefile for building hello
# Generated by tmake at 20:58, 2011/04/14
# Project: hello
# Template: app
#############################################################################
####### Compiler, tools and options
CC = arm-linux-gcc
CXX = arm-linux-g++
CFLAGS = -pipe -Wall -W -O2 -DNO_DEBUG
CXXFLAGS= -pipe -DQWS -fno-exceptions -fno-rtti -Wall -W -O2 -DNO_DEBUG
INCPATH = -I. -I$(QTDIR)/include
LINK = arm-linux-gcc
LFLAGS =
LIBS = $(SUBLIBS) -L$(QTDIR)/lib -lm -lqte
MOC = $(QTDIR)/bin/moc
UIC = $(QTDIR)/bin/uic
TAR = tar -cf
GZIP = gzip -9f
####### Files
TARGET = QtHello
HEADERS = $(TARGET).h
SOURCES = $(TARGET).cpp
OBJECTS = $(TARGET).o
DIST =
INTERFACE_DECL_PATH = .
####### Implicit rules
.SUFFIXES: .cpp .cxx .cc .C .c
.cpp.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $&< .cxx.o: $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $&< .cc.o: $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $&< .C.o: $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $&< .c.o: $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $&< ####### Build rules all: $(TARGET) $(TARGET): $(OBJECTS) $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(LIBS) dist: $(TAR) hello.tar hello.pro $(SOURCES) $(HEADERS) $(INTERFACES) $(DIST) $(GZIP) hello.tar clean: -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS) $(TARGET) -rm -f *~ core ####### Sub-libraries ###### Combined headers ####### Compile $(TARGET).o: $(TARGET).cpp

用zsm賬號登錄(因為關於arm-Qt庫的編譯環境變數是在此賬號中設置的),然後執行如下步驟:

1.將makefile模板文件放置到src目錄下面

2.用eclipse或者其它文本編輯器,修改makefile裡面的TARGET一項為當前項目名稱

3.打開Teminal控制終端,進入到src目錄,輸入make

4.然後會在src目錄下面生成一個指定名稱相應的QtHello文件,這個就是arm目標板上的運行程序了。

5.將QtHello文件傳送到arm板並運行程序(詳細操作方法在4.2.3節中有介紹)。

在Windows機器上遠程登錄arm板,控制程序運行,然後可以看到arm板上運行的結果了。

六、高級Linux程序設計

前面所介紹的不管是控制台還是窗體程序,都屬於單文件項目的範圍。而當程序的功能比較複雜時,則往往需要很多模塊和文件,這樣在向arm-linux上移植程序時會更加繁瑣一些,需要開發人員自己寫makefile,建立多文件的編譯規則。

因為我對此沒有進入深入一點的研究,所以只能提供下大致思路和在開發程序時遇到的一些常見問題及解決方案。如果今後有機會有時間的話,則會對makefile進行深入一點的研究,最好是能以Eclipse自己生成的makefile模板為基礎進行簡單的修改,然後就可以編譯生成arm板上的可執行程序。

6.1多文件控制台項目

多文件的控制台程序的makefile可能會容易一些,自己也沒有研究過,以前在使用Magic C++編寫C++控制台程序的時候,只需要對Magic C++生成的makefile模塊中的編譯器進行修改就可以輕鬆為多文件生成基於arm-linux平台上的控制台程序。

(關於如何對Eclipse的makefile模板進行修改,目前還沒有研究過,今後有時間研究的話,再補充上吧。)

6.2多文件Qt項目

目前只對簡單的多文件項目進行了嘗試:一個main函數文件,一個窗體頭文件,一個窗體實現文件。

6.2.1使用Qt Designer設置界面

在Linux系統中打開Qt Designer,然後進行可視化窗口設計。然後點擊保存為mydialog.ui文件。

打開mydialog.ui文件,發現其實只是一個xml文件:

顯然這個文件是不能直接被C++項目引用的,需要使用Qt Designer的編譯器進行編譯,生成和界面對應的h和cpp文件。

在Terminal終端裡面運行以下命令:

uic xxx.ui -o xxx.h 生成.h文件

uic xxx.ui -i xxx.h -o xxx.cpp 生成.cpp文件

然後生成的mydialog.h和mydialog.cpp文件就是和mydialog.ui相對應的程序代碼文件了。可以在Eclipse項目中直接對此文件進行引用,就可以顯示對應的窗體了。

6.2.2多文件Qt開發時的一些經典錯誤

經典錯誤一:

「undefined reference to ……」

這是在引用Qt的庫時,產生了某些歧義,需要進行一些預先處理,生成和界面文件相對應的moc文件,關於問題的詳細介紹可以參考下面的帖子:

http://hi.baidu.com/asky007/blog/item/7aad95ccbee5ba1601e928d7.html

解決方案:

在Linux控制終端中進入到項目代碼文件目錄,執行

qmake –project

qmake

make

然後此目錄下會生成一系列的文件,如moc_xx.cpp,moc_xx.o,src,src_pro等等。然後再到Eclipse中編譯此項目,則錯誤消失。

經典錯誤二:

在Linux機器上能運行的Qt窗口程序,在arm-linux下的Qt編譯器下無法通過。

可能的問題是Qt庫版本問題,或者是有些Qt運行環境在Linux機和arm-linux機上有所不同,這就需要重新尋找新的代替解決方案。正是因為這些很多不確定的因素,所以在進行arm-linux界面程序開發時,需要經常在編寫一段新代碼就要在arm板上進行測試,可以避免做太多無用功。

6.3關於makefile

關於多文件Qt項目向arm-linux系統上的移植,比較核心的技術應該就在makefile上吧,目前自己了解太少,只限於對模板的應用,所以下面的就寫不下去了。

下面有一篇到網上找到的關於makefile結構分析的帖子,今後有機會再研究吧。

http://blog.csdn.net/liang13664759/archive/2007/09/04/1771246.aspx

七、學習資料

關於Linux下的Qt開發,在安裝了的Fedora裡面有相關的本地reference和相關的源碼。如:Qt Assistant

關於arm-linux下的Qt開發,安裝交叉編譯環境時候,也有相關文檔和源碼:

//**************************************************************************

結語:OK,寫到這裡了。在上個學期就花過一段時間學習Linux,然後中斷了半年,這個學期又進行了深入的學習,把以前的內容和現在的內容串接起來了,終於有了比較清晰一點的思路和體會了,所以總結一下,也讓將來的自己再回頭學習時有一點借鑒吧。感謝胡師兄的一點一滴的指導。

來源:Linux及Arm-Linux程序開發筆記(零基礎入門篇) - 一點一滴的Beer - 博客園


握爪,我也剛剛著手學習linux. 有幾點想法分享一下

  1. 如果windows對你來說必要不大,那就卸了讓自己沉浸在linux的環境下。

  2. 確保自己的英文閱讀能力足夠應付滿屏滿屏的英文文檔,多man 或者 info,遇到與發行版相關的問題多查wiki,放心吧,這些英文比考研英語閱讀容易多了 - -||
  3. 不建議選擇ubuntu入門 - -# (不多解釋,用著用著就懂了),我現在用的是arch
  4. 呆灣仔寫的什麼私房菜太啰嗦了,建議看 http://linuxcommand.org 里提供的免費電子書,不要偷懶去買紙質翻譯本,譯的很渣。。。如果確實要留一本中文紙質書,建議《UNXILinux大學教程》 ,譯的不錯,而且一大厚本讀的很輕鬆。
  5. 剛裝完基本系統之後,不要急著去裝圖形界面折騰各種驅動,先老老實實的在文字界面呆著練熟一些簡單的命令。(上網查資料用pad)
  6. 自己感覺良好後裝好圖形界面,然後隨便你折騰。。。。(最後,還是不要建議圖形界面開機自啟動)


謝邀,折騰的程度決定入門的速度。


裝上一個Linux系統,將自己的工作移到Linux的環境下,然後你會發現出現了一連串的問題,試著去查詢資料,解決這些問題,並且做下記錄。當這些問題都解決得差不多的時候,基本上已經入門了。然後再根據自己的工作性質去看一下Linux系統方面的書,很快,你就能熟練掌握、運用Linux了。當然,也要明確一點,並不是每個Linux的使用者或者開發者都要去讀源碼的,呵呵。


如果你能接受看視頻的話,可以在慕課網(慕課網(IMOOC)-國內最大的IT技能學習平台)學習相關課程。

剛學完 Tony 老師的《Linux達人養成計劃 Ⅰ》,寫了課堂筆記,並在 CentOs 7 上做了測試。包括視頻截圖、軟體運行截圖、源代碼等。對已經過時的技術(如inittab 進行了補充說明及更新,放在 gayhub上了,歡迎 star 或 fork (笑

地址:GitHub - Gaea2/Linux-Notes

Linux-Notes Word版筆記截圖


多練習,找一些金典的書看看,如unix環境高級編程等,還可以看看一些視頻教程如linux 入門教程,下載地址在這http://www.yanyulin.info/pages/2013/11/vlinux.html


這篇文章主要介紹了Linux入門的一些基本知識整理,包括最基本的一些快捷鍵,基本的文件目錄說明以及關機的操作,需要的朋友可以參考下

【圖形模式與文字模式的切換方式】

Linux預設提供了六個命令窗口終端機讓我們來登錄。默認我們登錄的就是第一個窗口,也就是tty1,這個六個窗口分別為tty1,tty2 …

tty6,你可以按下Ctrl + Alt + F1 ~ F6

來切換它們。如果你安裝了圖形界面,默認情況下是進入圖形界面的,此時你就可以按Ctrl + Alt + F1 ~

F6來進入其中一個命令窗口界面。當你進入命令窗口界面後再返回圖形界面只要按下Ctrl + Alt + F7 就回來了。如果你用的vmware

虛擬機,命令窗口切換的快捷鍵為 Alt + Space + F1~F6. 如果你在圖形界面下請按Alt + Shift + Ctrl +

F1~F6 切換至命令窗口。

【學會使用快捷鍵】

Ctrl + C:這個是用來終止當前命令的快捷鍵,當然你也可以輸入一大串字元,不想讓它運行直接Ctrl + C,游標就會跳入下一行。

Tab: 這個鍵是最有用的鍵了,也是筆者敲擊概率最高的一個鍵。因為當你打一個命令打一半時,它會幫你補全的。不光是命令,當你打一個目錄時,同樣可以補全,不信你試試。

Ctrl + D: 退出當前終端,同樣你也可以輸入exit。

Ctrl + Z: 暫停當前進程,比如你正運行一個命令,突然覺得有點問題想暫停一下,就可以使用這個快捷鍵。暫停後,可以使用fg 恢復它。

輸入 man ls 其實格式為 man + 命令

你就會看到相關的幫助文檔了。從命令的介紹到命令的參數以及用法介紹的都非常詳細的。不錯吧。

【Linux系統目錄結構】

登錄系統後,在當前命令窗口下輸入 ls / 你會看到

Ctrl + L: 清屏,使游標移動到第一行。

【學會查詢幫助文檔 — man】

這個man 通常是用來看一個命令的幫助文檔的。例如:

以下是對這些目錄的解釋:

/bin bin是Binary的縮寫。這個目錄存放著最經常使用的命令。

/boot這裡存放的是啟動Linux時使用的一些核心文件,包括一些連接文件以及鏡像文件。

/dev dev是Device(設備)的縮寫。該目錄下存放的是Linux的外部設備,在Linux中訪問設備的方式和訪問文件的方式是相同的。

/etc這個目錄用來存放所有的系統管理所需要的配置文件和子目錄。

/home用戶的主目錄,在Linux中,每個用戶都有一個自己的目錄,一般該目錄名是以用戶的賬號命名的。

/lib這個目錄里存放著系統最基本的動態連接共享庫,其作用類似於Windows里的DLL文件。幾乎所有的應用程序都需要用到這些共享庫。

/lost+found這個目錄一般情況下是空的,當系統非法關機後,這裡就存放了一些文件。

/media linux系統會自動識別一些設備,例如U盤、光碟機等等,當識別後,linux會把識別的設備掛載到這個目錄下。

/mnt系統提供該目錄是為了讓用戶臨時掛載別的文件系統的,我們可以將光碟機掛載在/mnt/上,然後進入該目錄就可以查看光碟機里的內容了。

/opt 這是給主機額外安裝軟體所擺放的目錄。比如你安裝一個ORACLE資料庫則就可以放到這個目錄下。默認是空的。

/proc這個目錄是一個虛擬的目錄,它是系統內存的映射,我們可以通過直接訪問這個目錄來獲取系統信息。這個目錄的內容不在硬碟上而是在內存里,我們也可以直接修改裡面的某些文件,比如可以通過下面的命令來屏蔽主機的ping命令,使別人無法ping你的機器:

echo 1 &> /proc/sys/net/ipv4/icmp_echo_ignore_all。

/root該目錄為系統管理員,也稱作超級許可權者的用戶主目錄。

/sbin s就是Super User的意思,這裡存放的是系統管理員使用的系統管理程序。

/selinux 這個目錄是Redhat/CentOS所特有的目錄,Selinux是一個安全機制,類似於windows的防火牆,但是這套機制比較複雜,這個目錄就是存放selinux相關的文件的。

/srv 該目錄存放一些服務啟動之後需要提取的數據。

/sys 這是linux2.6內核的一個很大的變化。該目錄下安裝了2.6內核中新出現的一個文件系統 sysfs

,sysfs文件系統集成了下面3種文件系統的信息:針對進程信息的proc文件系統、針對設備的devfs文件系統以及針對偽終端的devpts文件系統。該文件系統是內核設備樹的一個直觀反映。當一個內核對象被創建的時候,對應的文件和目錄也在內核對象子系統種被創建。

/tmp這個目錄是用來存放一些臨時文件的。

/usr 這是一個非常重要的目錄,用戶的很多應用程序和文件都放在這個目錄下,類似與windows下的program files目錄。

/usr/bin:系統用戶使用的應用程序。

/usr/sbin:超級用戶使用的比較高級的管理程序和系統守護程序。

/usr/src:內核源代碼默認的放置目錄。

/var這個目錄中存放著在不斷擴充著的東西,我們習慣將那些經常被修改的目錄放在這個目錄下。包括各種日誌文件。

在linux系統中,有幾個目錄是比較重要的,平時需要注意不要誤刪除或者隨意更改內部文件。/etc:

上邊也提到了,這個是系統中的配置文件,如果你更改了該目錄下的某個文件可能會導致系統不能啟動。/bin, /sbin, /usr/bin,

/usr/sbin: 這是系統預設的執行文件的放置目錄,比如 ls 就是在/bin/ls 目錄下的。值得提出的是,/bin, /usr/bin

是給系統用戶使用的指令(除root外的通用戶),而/sbin, /usr/sbin 則是給root使用的指令。 /var:

這是一個非常重要的目錄,系統上跑了很多程序,那麼每個程序都會有相應的日誌產生,而這些日誌就被記錄到這個目錄下,具體在/var/log

目錄下,另外mail的預設放置也是在這裡。

【如何正確關機】

其實,在linux領域內大多用在伺服器上,很少遇到關機的操作。畢竟伺服器上跑一個服務是永無止境的,除非特殊情況下,不得已才會關機。

linux和windows不同,在 Linux

底下,由於每個程序(或者說是服務)都是在在背景下執行的,因此,在你看不到的屏幕背後其實可能有相當多人同時在你的主機上面工作,例如瀏覽網頁啦、傳送信件啦以

FTP

傳送檔案啦等等的,如果你直接按下電源開關來關機時,則其它人的數據可能就此中斷!那可就傷腦筋了!此外,最大的問題是,若不正常關機,則可能造成文件系統的毀損(因為來不及將數據回寫到檔案中,所以有些服務的檔案會有問題!)。

如果你要關機,必須要保證當前系統中沒有其他用戶在線。可以下達 who 這個指令,而如果要看網路的聯機狀態,可以下達 netstat -a

這個指令,而要看背景執行的程序可以執行 ps -aux

這個指令。使用這些指令可以讓你稍微了解主機目前的使用狀態!(這些命令在以後的章節中會提及,現在只要了解即可!)

正確的關機流程為:sysnc ? shutdown ? reboot ? halt

複製代碼

代碼如下:

sync

將數據由內存同步到硬碟中。

複製代碼

代碼如下:

shutdown

關機指令,你可以man shutdown 來看一下幫助文檔。例如你可以運行如下命令關機:

複製代碼

代碼如下:

shutdown –h 10

『This server will shutdown after 10 mins』 這個命令告訴大家,計算機將在10分鐘後關機,並且會顯示在登陸用戶的當前屏幕中。

複製代碼

代碼如下:

Shutdown –h now

立馬關機

複製代碼

代碼如下:

Shutdown –h 20:25

系統會在今天20:25關機

複製代碼

代碼如下:

Shutdown –h +10

十分鐘後關機

複製代碼

代碼如下:

Shutdown –r now

系統立馬重啟

複製代碼

代碼如下:

Shutdown –r +10

系統十分鐘後重啟

reboot 就是重啟,等同於 shutdown –r now

halt 關閉系統,等同於shutdown –h now 和 poweroff

最後總結一下,不管是重啟系統還是關閉系統,首先要運行sync命令,把內存中的數據寫到磁碟中。關機的命令有 shutdown –h now

halt poweroff 和 init 0 , 重啟系統的命令有 shutdown –r now reboot init 6.

引用地址:Linux入門的一些基本知識整理


什麼都別問,先裝個系統吧。

剛弄的三系統共存,準備開始學習入門。


PearOS 鳥哥私房菜


學習linux的最好方法莫過於隨手使用它,推薦你一個系統,Gentoo,如果你真的堅持下來了,那麼你的知識會增長一大截,記得,是真的堅持,而不是遇難而退


mark


一句話:用《鳥歌私房菜》,多動手操作那個黑乎乎的界面,多使用一下。圖書的電子版我還有,可以發給你。如果學有心得,可以在我博客上討論http://www.v-lover.com


最近在準備一門免費的Linux入門課,在線授課,大家可以關注一下:

http://www.genshuixue.com/teacher/classCourseDetail/151115779251


謝謝邀請~Linux是個應用面很廣的系統,小到嵌入式設備,大到伺服器主機。學習的差別還是很大的。

看問題,樓主所講的Linux入門應該是偏嵌入式的。我接觸Linux,更多是server這一塊的。可能經驗幫助不大。不過我覺得不管怎樣,Linux系統的基礎知識應該是一樣的。這一點,覺得鳥哥的私房菜基礎篇很不錯~


推薦閱讀:

Unix / 類 Unix shell 中有哪些很酷很冷門很少用很有用的命令?
epoll的邊沿觸發模式(ET)真的比水平觸發模式(LT)快嗎?(當然LT模式也使用非阻塞IO,重點是要求ET模式下的代碼不能造成飢餓)
既然有 UNIX 哲學,那有沒有 Windows 哲學呢?
為什麼微軟,谷歌要另立操作系統山頭,而不是像蘋果一樣,在最正統的 Unix 基礎上開發?
posix和system v 信號量哪個更快?

TAG:Unix |