熟悉Linux基本操作

計算機硬件基本知識

CPU內部已經含有一些小的指令集,我們所使用的軟件都要經過CPU內部的微指令集來達成。因此CPU可分爲RISC(精簡指令集)和CISC(複雜指令集)兩種,前者有sun公司的SPARC,IBM的PowerPC系列及ARM系列等。後者有Intel、AMD等x86架構處理器,廣泛用於個人計算機上。

CPU與其他設備集成到一塊主板上協調工作,對於Intel處理器,主板設計成南北橋結構,南橋溝通CPU及周邊運算速率較快的設備,北橋連接其他速率較慢的外圍設備。

由於CPU和外部組件運行速率不同,所以我們稱CPU內部運行速率爲主頻與外部組件數據傳輸時的統一速度爲外頻主頻/外頻=倍頻,一般倍頻由廠商設定好,如果玩家想提高CPU性能,可人爲提高主板上外頻,此即超頻。

系統總線是主存與CPU數據傳輸的通道,分32/64位;I/O總線主要連接硬盤、USB、網卡等設備。注意區分總線寬度和CPU字組大小,通常所說的32/64位CPU指CPU字組大小,即CPU每次能處理的數據量。32位CPU最多支持4GB內存。(2^32=4G,32位最多尋址4G個地址,每個內存地址對應一個Byte數據)。

主存是動態隨機存儲內存(DRAM),通電時記錄和使用,掉電後數據消失。適配主存的外頻最好與CPU外頻相同,如DDR2-800的內存條,其外頻爲400MHZ。
爲提升數據傳輸速率,可採用雙通道設計,2^n個內存並行傳輸,若每個64位,則總線寬度擴展爲64×2^n位。爲了提高數據傳輸速率,CPU內部嵌入了基於SRAM(靜態隨機存儲內存)的L2 cache高速緩存,其頻率與CPU主頻相同。主板上都有一塊固定的ROM(只讀存儲器),內部數據永久保存,一般用於記錄BIOS信息。

顯示適配器(VGA:Video Graphic Array)用於計算機數據可視化顯示。每個像素的顯示需要佔用內存,因此顯示適配器上會有一個內存容量。另外,顯示3D圖形的相關運算早期由CPU完成,如今爲減輕CPU負擔,顯卡也承擔此部分運算任務,即所謂GPU。

前面提到:CPU具有微指令集,它實際上是一系列二進制數(機器語言),告知CPU執行特定的操作。編程語言通過編譯程序轉化爲機器語言,實現操控計算機硬件的目的。但爲了避免考慮整體硬件系統來設計程序,人類使用操作系統核心(operation system kernel)來管理計算機硬件活動及驅動系統中所有硬件。操作系統核心本質上也是一組程序。

計算機科學發展史上的部分重要人物

Ken Thompson:1969年用彙編語言寫成Unix原型
Bill Joy:1977年伯克利大學的Bill Joy在取得Unix源碼後,修改成適合自己機器的版本,命名爲BSD,後創立sun公司。
Richard Mathew Stallman:1984年發起GNU計劃,併成立FSF(Free Software Foundation)。後開發了一些重要軟件GCC、Bash Shell、glibc等,引發了開源軟件風潮。
Linus Torvolds:1991年以bash、gcc等工具撰寫了linux核心。

Linux版本

注意區分Linux核心版本和distribution版本。Linux核心版本編號格式爲類似:2.6.18-92.el5。2是主版本,6是次版本,偶數是穩定版,奇數是測試版。
Linux的distribution衆多,由套件管理的方式可分爲RedHat系統的RPM方式及Debian系統的dpkg方式。Ubuntu使用dpkg方式。

Linux系統目錄結構

ubuntu 下載的軟件包一般放在/var/cache/apt/archives裏,以.deb爲後綴名,
欲安裝該包,執行dpkg -i ×××.deb
dpkg -L libmysqlclient //查看libmysqlclient各個文件的安裝位置
ubuntu shell綠色字體代表可執行文件,紅色代表壓縮文件(通常是安裝包),藍色代表目錄

Linux常用命令大全

sudo 後續命令 //以根權限操作,主要用於修改文件,sudo是ubuntu自己的腳本語言
sudo su //切換爲根用戶
cd /home //cd用於打開home目錄
cp /etc/group . //拷貝etc目錄下group文件到當前目錄
rm group //刪除當前目錄下group文件
ls -l //列出當前目錄下所有文件的詳細信息(-a:列出當前目錄所有文件包括以 . 開頭的項目;-i:列出當前目錄下所有文件的索引號inode)
如該文件信息開頭爲drwxr-xr-x ,d表示是目錄,後面9項表示owner、group、world三類用戶的使用權限,r讀、w修改、x執行、-無此權限。
注:Linux共四種用戶,除以上三種還有root用戶。
查詢命令:
find /usr/lib -name interfaces //查詢該目錄中所有名爲interfaces的文件,此方法較慢
locate interfaces //對/var/lib/locatedb檢索(包含本機所有文件信息的數據庫),找出所有名爲interface的文件,較快
whereis grep //搜索linux上二進制文件grep的位置,只能搜索可執行文件/二進制文件
type grep //查看命令是否爲系統命令
file /bin/bash //查看bash的文件類型和格式,此處bash是elf類型的可執行文件格式,elf類型包括共享目標文件(.so),可執行文件(linux中一般不加後綴名),可重定位文件(.a,.o),核心轉儲文件等。

ln passwd passwd.2 //對已存在的passwd建立硬連接passwd.2 passwd.2與passwd共享同一個索引號
ln -s passwd passwd.2 //對已存在的passwd建立軟連接,passwd.2 是passwd的符號連接:passwd -> passwd.2
注:連接是指文件名與索引號的對應
mv passwd.2 godown.b //移動passwd.2爲同一目錄下並更名爲godown.b,實際上是原地搬移,實現了更名,索引號不變。
man ls //查閱手冊,瞭解ls命令的用法
ls --help // 獲取ls的幫助文檔
mount /dev/cdrom /mnt/cdrom //將cdrom的文件掛到mnt/cdrom目錄下,默認mnt爲接受外掛文件系統的目錄
mkdir test //在當前目錄下創建新目錄test
touch a.txt //在當前目錄下創建新文件a.txt
cat -n /etc/passwd //查看passwd文件並以行編號輸出,passwd記錄用戶帳號信息,賬號信息中UID若爲0,則爲root用戶,享有最高權限。
chown root /home/zhengfeng/Music
chgrp root /home/zhengfeng/Music //更改文件的所有者及所有組
chmod +x install.sh //更改install.sh的訪問權限爲允許所有人執行,+x增加執行權限
echo $PATH //顯示當前搜索路徑,若$PATH 加單引號,則顯示該字符串,若$前加轉義字符\則同樣顯示該字符串,若$PATH加雙引號則顯示當前搜索路徑,即保留$的特殊用義。$用來標誌系統環境變量。
echo $BASH_VERSION //顯示當前bash版本,bash是一種shell,作爲命令語言解釋器。
ls -l /dev/hd* &<result.txt //將dev目錄下hd開頭的文件信息逐個列出保存到新建文件result.txt裏,若文件不存在,則輸出錯誤信息同樣保存在rsult.txt裏。這是一個輸出重定向的例子。Linux默認標準輸入0鍵盤,標準輸出1屏幕,標準錯誤2也是屏幕,若需更改則使用> >> < <<符。
ls -l /dev/hd* <result.txt 2<error.txt //更一般的用法
cp /dev/stdin a.txt //將鍵盤輸入內容保存在a.txt內,鍵入時按CTRL+D結束。
cp a.txt /dev/stdout //將a.txt內容輸出到屏幕,與cat等價
ls -l /dev|more //將dev目錄下文件信息分頁顯示 |是管道操作符,表示前後命令並列執行。
history //列出本次登錄後所有操作歷史,並編號;!12 將第12條歷史命令重新執行一次;!! 將最近的命令重複執行一次。
dir() { ls -ld $*;} //建立一個shell函數dir(),功能是花括號內命令,$*用於提取參數 因此dir /home 即顯示hom目錄信息,注意左花括號後有一空格,如多個命令則依次寫在花括號內,以分號分隔。
alias lm = ‘ls -al’ //令lm爲別名

Linux在命令行輸入時也有命令補全功能,例如在輸入一個文件名到一半時,按下tab鍵,系統會自動補全名字,若存在相似文件名,則需要繼續輸入。

ps //process situation 顯示當前進程狀態
kill -9 1841 //向進程發值爲9的信號,終止PID爲1841的進程,信號是一種機制,進程通過信號瞭解系統中發生的事件。
top //實時監視系統運行狀況,按q退出監視返回shell
ping IP或網站名 //檢查與目標主機或網站的連接是否連通,但不能作爲評判標準

遠程登錄與NFS

Telnet是Internet提供的一項基本服務,用來將本地計算機作爲遠程計算機的終端機使用。
telnet 主機名或IP地址
exit或logout命令退出
telnet以明文傳輸不安全,因此禁止root身份登錄
SSH 主機名或IP地址 //作爲telnet的替代,以公開密鑰算法加密數據,允許root登錄

scp 本地文件路徑 遠程用戶名@主機:文件路徑 //用於本地與遠程計算機之間安全拷貝文件 如:
scp [email protected]:a.txt

sftp 遠程用戶名@主機 //以安全模式進入ftp狀態,此時可執行該狀態下的命令:
get 遠程路徑 本地路徑 //下載
put 本地路徑 遠程路徑 //上傳
quit 退出
? //列出該狀態可使用的命令清單,其中不少同Linux Bash命令如mkdir、cd、ls等,都是針對被登錄機操作,若對本地機操作,則在命令前加字母l,如lmkdir、lls等

NFS(Network File System):通過網絡將遠程主機的文件系統掛載到本地主機目錄下,以便於使用,它基於客戶機/服務器模式,建立在TCP/IP協議的表示層協議與會話層協議機制之上。

vim程序編輯器

vim是vi文本編輯器的進階版,在所有linux系統上均可使用,被稱爲“編輯器之神”。
vi分爲三種模式:一般模式,編輯模式和指令列命令模式
vi hello.c //進入hello.c文件,此時爲一般模式,若hello.c不存在則自動新建
一般模式下執行vi定義的鍵盤上轉義字符操作,del爲刪除光標上字符,dd爲刪除一整列,退格鍵及上下左右鍵移動光標,i進入插入光標前編輯模式,a進入插入光標後編輯模式,r進入改寫編輯模式;
編輯模式下鍵盤上所有按鍵除ESC外都可輸入字符,如上下左右鍵分別代表ABCD大寫字母,按ESC退出編輯;
在一般模式下按:進入指令列模式,最下面一行爲指令列,wq保存並退出。

gcc編程

gcc中庫的鏈接順序是從右往左進行,所以要把最基礎實現的庫放在最後,這樣左邊的lib就可以調用右邊的lib中的代碼。同時,當一個函數的實現代碼在多個lib都存在時,最左邊的lib代碼最後link,所以也將最終保存下來。

objdump -T libmysqlclient.so //打開當前目錄下的動態鏈接庫libmysqlclient.so查看其中的API。objdump命令用來查看各種目標文件(elf文件)內部的結構
obidump -h hello.o //參數-h把hello.o各個段的基本信息打印出來,elf文件是分段的,通常分爲Header、.data(數據段包括局部靜態變量和全局變量)、.text(代碼段)、.rodata、.bss、.comment等
readelf -s hello.o //查看詳盡段信息
gcc錯誤:undefined reference to function 該函數具體實現沒有找到
info gcc //顯示gcc的所有信息

mysql操作

SQL:Structured Query Language
netstat -tap|grep mysql //檢查系統有沒有已安裝mysql,若socket顯示listen則表示就緒。
mysql中unique key(唯一鍵)指除主鍵外確保某一列唯一性的約束,該列可包含NULL(空值);primary key爲主鍵
apt-get install mysql-server //安裝mysql
mysql -u root -p //以root用戶登錄mysql server,之後需輸入密碼
show databases; show tables; //查看數據庫和數據表單,注意在mysql server中輸入指令以;結尾。
use mysql; //使用數據庫mysql也可以在登錄時輸入指令:
mysql -D mysql -u root -p
quit; //退出
insert into students(id,name,sex) value(1,zhengfeng,man); //向students表中插入zhengfeng的信息
select * from students //輸出students的所有信息,*是通配符,可指定爲列名稱

create table students(
id int(8) not null auto_increment,
name  varchar(255) not null,
sex char(4) not null,
tel char(13) not null default “-”, 
primary key(id),
unique key unique_name(name)
);    
   //創建表

describe students //輸出表結構信息
mysql_config --libs //使用mysql_config工具確定MySql程序的鏈接參數,同理,若需確定編譯參數,使用mysql_config –include

redis操作

注:redis是一個高性能的key-value數據庫,由ANSI C編寫,支持網絡,它支持的value類型包括string、list(字符串鏈表)、set(字符串集合)、zset(字符串有序集合)、hash(字符串哈希類型)。
競態條件和原子操作的概念:原子操作指該命令在執行過程中不會被其他插入命令打斷,是“一氣呵成”的;
競態條件:指一個系統或進程的輸出,依賴於不受控制事件出現的順序或時機,若多個客戶端連接到redis,同時執行多項命令時有可能出現競態條件,關於此問題的深入討論在《鏈接、裝載和庫》中詳細提及。

apt-get install redis-server //安裝redis
netstat -nlt grep|6379 //查看系統中redis運行狀態,listen爲就緒
redis-cli //進入redis命令行客戶端,cli:command line interface 此爲進入交互模式,可自由輸入命令。
select 1 //選擇1號數據庫,redis實例默認自帶16個數據庫,以數字編號,可通過配置文件更改。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章