電腦組成、linux發行版、linux哲學思想、基本命令、目錄結構 ...
從今天開始,Frank將開始在博客上記錄自己學習linux的點點滴滴,F初來乍到,還望各位大佬多多指教。本次博客的主要內容如下:
- 電腦基礎:簡要的描述了電腦的組成及其功能;
- linux初識:介紹了linux主流的發行版,說明瞭不同的發行版之間的區別和linux的哲學思想,列出了linux發行版的基礎目錄名稱命名法則及功能規定;
- 基礎命令:詳細介紹一些基礎的命令,並就如何在linux系統上獲取命令的幫助做出瞭解釋。
一、電腦的組成及其功能
電腦主要是由5個部分組成
-
控制器(Control):正確的分佈的完成每一條指令規定的功能。
-
運算器(Datapath):對數據進行算術運算和邏輯運算。
-
存儲器(Memory):存儲器的功能是存儲程式、數據和各種信號、命令等信息,併在需要的時候提供這些信息
-
輸入(input system):輸入設備,常見的輸入設備有鍵盤、滑鼠、攝像頭等。
-
輸出(output system):輸出設備,常用的輸出設備有顯示器、印表機等。
我們所說的中央處理器CPU(Central Processing Unit)就是由控制器和運算器組成的。所有的東西,包括處理器、顯卡、存儲器、音效卡、記憶體等都是通過主板來組合到一起的。
如果把電腦比如成一個人:
CPU=大腦;
記憶體=腦袋中正在思考的數據區塊,主要是給大腦提供信息;
硬碟=腦袋中的記憶區塊,主要是存放記憶的地方,用的時候取出來,不用的時候放回去;
主板=神經系統,協調各個部件;
I/O設備=人體與外接溝通的,比如手,腳,皮膚、眼睛;
電源power=心臟,這就不多說了,沒有電源,整個系統就無法運作
知識遺拾:
為什麼32位機器最多只能支持4G的記憶體?
32位,其實指的是CPU的定址能力,2^32 = 1024*1024*1024*4 B = 1024*1024*4KB = 1024*4MB = 4GB,所以64位的系統的性能比32高很多
CPU的指令周期單位HZ?
CPU 的指令周期常使用 MHz 或者是 GHz 之類的單位,這個 Hz 其實就是秒分之一。而在網路傳輸方面,由於網路使用的是 bit 為單位,因此網路常使用的單位為 Mbps 是 Mbits per second,亦即是每秒多少 Mbit。舉例來說,大家常聽到的 20M/5M 光纖傳輸速度,如果轉成文件容量的 byte 時,其實理論最大傳輸值為:每秒 2.5Mbyte/ 秒 625Kbyte 的下載/上傳速度。
二、linux的來歷
1991年,芬蘭大學生Linus Torvalds(下圖就是這位牛逼的人物了)萌發了開發一個自由的UNIX操作系統的想法,當年,Linux就誕生了,為了不讓這個羽毛未豐的操作系統矢折,Linus將自已的作品Linux通過Internet發佈。後來linux加入了GNU組織,並遵循了GPL,
從此一大批黑客和編程人員加入到其開發中來,使Linux得到了飛速的發展(Linux也被稱為GNU/Linux),其實linux本身只是一個內核,而GNU提供的則是一些開源的軟體,比如x-window、gcc等。
Linus Torvalds
知識遺拾:
開源協定GPL:一個軟體一旦遵循了GPL,那麼使用者可以自由的執行,複製,再發行,學習、修改自由軟體。由於第一個版本的GPL太過於嚴苛,後來出現較為寬鬆的GPLV2和GPLV3。除了GPL開源協定還有LGPL,BSD和Apache等。
三、linux的發行版
發行版為許多不同的目的而製作,包括對不同電腦結構的支持。實時應用等,現已經存在的發行版本就有幾百種,但是其中比較常用的發行版也就幾種。
1.Red Hat
紅帽也許是世界使用的最多的發行版本了,普遍使用在伺服器上,你可以免費的在其官網上獲取最新的版本,但是版本如果存在bug或者不穩定,包含一些一些封閉的源代碼軟體,如果需要紅帽提供技術支持,那就需要買人家的服務了,目前最新的版本為7.X。
2.Centos
Centos是基於Red Hat linux的企業級發行版本,但是它沒有那些封閉的源代碼軟體,全部是開源的,現在國內很多大的電商在其伺服器上運行的就是Cenntos,目前最新的版本為7.x(因為是紅帽一家的)。
3.Debian
Debian是一個非常穩定的版本,但是安裝過程是及其複雜的,你需要將源碼根據自己的硬體編譯成二進位文件來安裝,這也是其穩定的原因,但是這樣帶來的壞處就是,一般的用戶安裝起來就非常頭疼了。在Debian6中,linux的內核是完全開源的,所有的閉源軟體都被隔離成了單獨的軟體包,放在Debian的軟體源"Non-Free"部分,所以用戶可以自行選項全開源的系統還是存在一起閉源的軟體,目前最新版本為9.x。
4.Ubuntu
Ubuntu是基於debian發行版和unity桌面環境的,是一個以桌面應用為主的linux操作系統,目前最新版本為17.x。
5.SUSE
SUSE是德國非常著名的Linux發行版,後被Novell公司收購,SUSE Linux一向以華麗的用戶界面著稱;
6.Gentoo
Gentoo是Linux世界最年輕的發行版本,正因為年輕,所以能吸取在她之前的所有發行版本的優點。Gentoo最初由Daniel Robbins(FreeBSD的開發者之一)創建,首個穩定版本發佈於2002年。由於開發者對FreeBSD的熟識,所以Gentoo擁有媲美FreeBSD的廣受美譽的ports系統 ——Portage包管理系統。
知識遺拾:
發行的版本號和linux內核的版本是不一樣的概念的
linux內核最新版為:4.11.8
4:表示主版本號
11:表示開發中的版本,如果為偶數的則是穩定版本
8:修訂版本號,表示修改次數
可以通過官網下載查詢:https://www.kernel.org/
其實所有的發行版的內核可以說都是版本不同或者相同的linux內核,然後將各種各樣圖形化界面,軟體然後與內核組在一起就成個各種不同的版本。
兩種用戶界面:
1.GUI:圖形化界面
GNome
KDE
2.CLI:命令行界面
bash
zsh
sh ....
終端設備
物理終端:控制台,console,/dev/console
虛擬終端:Ctrl+Alt+F[1-6],為tty,/dev/tty[1-6]
圖形終端:
centos6:
Ctrl+Alt+F7
cnetos7:
在哪個虛擬終端啟動就位於哪一個虛擬終端
串列終端:tyys,/dev/ttys#
偽終端:pts,/dev/pts#
使用tty查看終端設備
[root@localhost ~]# tty /dev/pts/0
四、linux的哲學思想
1.一切皆文件
在linux系統中,所有的資源都是以文件形式表現出來的,包括設備文件,普通文件,目錄,套接字,反正你能看得到都是文件;
2.由眾多功能單一的程式組成
在linux中,一個小程式就是拿來完成一個簡單的任務的,如果想要完成很複雜的任務,那麼就需要把小程式組合起來,一起完成。
3.儘量避免和用戶交互
shell支持很多種編程語言,比如python,可以使用腳本來實現自動化得任務
4.使用文本保存配置信息
易於讀取配置信息,可以使用文本編輯器就可以修改配置信息
五、linux命令的使用格式
linux命令的語法通用格式為:
#COMMAND OPTIONS ARGUMENTS
COMMAND
當發起一條命令的時候,系統請求內核將某個二進位程式運行為一個進程,命名本身是一個可執行的程式文件,二進位格式文件,有可能會調用共用庫文件,並非所有的命令都有一個在某目錄與之對應的可執行程式,在Linux中可執行文件為ELF類型,比如在windows上試exe或者msi:
多數系統程式文件都存放在:/bin, /sbin, /usr/bin, /usr/sbin,/usr/local/bin, /usr/local/sbin
普通命令:/bin, /usr/bin, /usr/local/bin
管理命令:/sbin, /usr/sbin, /usr/local/sbin
共用庫:/lib, /lib64, /usr/lib, /usr/lib64, /usr/local/lib, /usr/local/lib64
32bits的庫:/lib, /usr/lib, /usr/local/lib
64bits的庫:/lib64, /usr/lib64, /usr/local/lib64
命令類型:
內置命令:由shell程式自帶的命令
外部命令:獨立的可執行程式文件,文件名即命令名
shell程式是獨特的程式,複製解析用戶提供的命令,她是從環境變數PATH中獲取路徑來查找可執行的文件的。
可以使用type COMMAND來獲取命令是內置的還是外置:
內置:
[root@localhost ~]# type cd
cd is a shell builtin
外置:
[root@localhost ~]# type cat cat is /usr/bin/cat
OPTIONS
選項,指定命令的運行特性,選項有兩中表現形式:
短選項:例如-c,-d,-r,有些命令是沒有-的,多個短選項,多數情況下是可以合併的
長選項:例如--help,不能合併
AGUMENTS
命令的作用對象,即命令對什麼生效,有些命令的對象可以用多個,使用空格分開
六、基礎命令
ifconfig
顯示IP地址,MAC地址,收發包和丟包數目和錯誤包的個數
[root@localhost ~]# ifconfig ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.5.135 netmask 255.255.255.0 broadcast 192.168.5.255 inet6 fe80::7d5:374d:e0e2:37ce prefixlen 64 scopeid 0x20<link> ether 00:0c:29:3c:34:c0 txqueuelen 1000 (Ethernet) RX packets 1235 bytes 116447 (113.7 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 945 bytes 76449 (74.6 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1 (Local Loopback) RX packets 72 bytes 6252 (6.1 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 72 bytes 6252 (6.1 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0命令顯示了2塊網卡的信息,一個是網卡ens33,一個是環回口loopback,可以看到ens33的ipv4、ipv6地址和MAC地址等信息,與其類似的命令為ip add show. echo 回顯命令
[root@localhost ~]# echo "hello linux" hello linux
強引用,單引號:
[root@localhost ~]# echo '$PATH' $PATH
弱引用,雙引號:
[root@localhost ~]# echo "$PATH" /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
tty
顯示當前終端的文件名
[root@localhost ~]# tty /dev/pts/0
startx
開啟圖形化界面
[root@localhost ~]# startx
export
設置和顯示環境變數,單獨使用export可以查看當前系統下的環境變數; 命令格式:export [-fn] [name[=value] ...] or export -p
Options: -f refer to shell functions 代表[變數名稱]中為函數名稱 -n remove the export property from each NAME 刪除環境變數,實際上沒有刪除,只是不會輸出到後續指令的執行環境 -p display a list of all exported variables and functions 顯示所有的環境變數
一個變數創建時,它不會自動地為在它之後創建的shell進程所知。而命令export可以向後面的shell傳遞變數的值。當一個shell腳本調用並執行時,它不會自動得到原為腳本(調用者)里定義的變數的訪問權,除非這些變數已經被顯式地設置為可用。export命令可以用於傳遞一個或多個變數的值到任何後繼腳本。 ----《UNIX教程》
[root@localhost ~]# name="Frank" [root@localhost ~]# echo $name Frank [root@localhost ~]# bash [root@localhost ~]# echo $name [root@localhost ~]# exit exit [root@localhost ~]# export name [root@localhost ~]# echo $name Frank [root@localhost ~]# bash [root@localhost ~]# echo $name Frank
pwd
顯示當前目錄,當用戶登錄的時候,一般起始目錄為其家目錄,/home/username
[root@localhost ~]# pwd
/root
history
顯示執行命令的歷史信息,用戶在登錄系統時,會讀取歷史文件記錄下的命令:~/.bash_history
[root@localhost ~]# history 1 history 2 pwd 3 cd /root 4 ls 5 history
-c:清除歷史信息
-n:顯示最近的n行
-a:將命令歷史信息寫到history_file文件中,預設會寫到~/.bash_history下
-r:讀取histor_file的內容到當前的history
-w:將目前的history內容寫到history_file中
-d:刪除指定行的命令歷史
!編號:再次執行某一行的命令
!!:執行上一條命令
shutdown
關機命令
-c:將shutdown的命令取消,取消關機
-H:停止設備
-P:關閉電源
-r:重啟設備
-h:將系統關機
-k:只送出信息,但是不關機
--no-wall:關機但是不送出任何信息
指定系統在22點關機
[root@localhost ~]# shutdown -r 22:00 Shutdown scheduled for Sat 2017-07-01 22:00:00 EDT, use 'shutdown -c' to cancel.
指定5分鐘後關機,同時給出告警信息
[root@localhost ~]# shutdown +5 "System will shutdown after 5 minutes" Shutdown scheduled for Sat 2017-07-01 08:54:35 EDT, use 'shutdown -c' to cancel. [root@localhost ~]#poweroff(關閉電源),reboot(重啟系統) date [OPTION] [+FORMAT] Format指出了以什麼樣的格式來顯示時間 查看系統時鐘,設置系統時間
[root@localhost ~]# date Sat Jul 1 09:06:14 EDT 2017
%% a literal % %a locale's abbreviated weekday name (e.g., Sun) %A locale's full weekday name (e.g., Sunday) %b locale's abbreviated month name (e.g., Jan) %B locale's full month name (e.g., January) %c locale's date and time (e.g., Thu Mar 3 23:05:25 2005) %C century; like %Y, except omit last two digits (e.g., 20) %d day of month (e.g., 01) %D date; same as %m/%d/%y %e day of month, space padded; same as %_d %F full date; same as %Y-%m-%d %g last two digits of year of ISO week number (see %G) %G year of ISO week number (see %V); normally useful only with %V %h same as %b %H hour (00..23) %I hour (01..12) %j day of year (001..366) %k hour, space padded ( 0..23); same as %_H %l hour, space padded ( 1..12); same as %_I %m month (01..12) %M minute (00..59) %n a newline %N nanoseconds (000000000..999999999) %p locale's equivalent of either AM or PM; blank if not known %P like %p, but lower case %r locale's 12-hour clock time (e.g., 11:11:04 PM) %R 24-hour hour and minute; same as %H:%M %s seconds since 1970-01-01 00:00:00 UTC %S second (00..60) %t a tab %T time; same as %H:%M:%S %u day of week (1..7); 1 is Monday %U week number of year, with Sunday as first day of week (00..53) %V ISO week number, with Monday as first day of week (01..53) %w day of week (0..6); 0 is Sunday %W week number of year, with Monday as first day of week (00..53) %x locale's date representation (e.g., 12/31/99) %X locale's time representation (e.g., 23:13:48) %y last two digits of year (00..99) %Y year %z +hhmm numeric time zone (e.g., -0400) %:z +hh:mm numeric time zone (e.g., -04:00) %::z +hh:mm:ss numeric time zone (e.g., -04:00:00) %:::z numeric time zone with : to necessary precision (e.g., -04, +05:30) %Z alphabetic time zone abbreviation (e.g., EDT)
[root@localhost ~]# date +%F 2017-07-01
將時間設置為2016年7月1日晚上21點17分30秒
[root@localhost ~]# date 070121172016.30 Fri Jul 1 21:17:30 EDT 2016
hwclock,clock
顯示或設定硬體時間 -s, --hctosys:以硬體為準,把系統調整為與硬體時間相同; -w, --systohc:以系統為準,把硬體時間調整為與系統時鐘相同;[root@localhost ~]# date Fri Jul 1 21:19:22 EDT 2016 [root@localhost ~]# clock Sat 01 Jul 2017 09:20:48 AM EDT -1.059659 seconds [root@localhost ~]# hwclock -s [root@localhost ~]# date Sat Jul 1 09:21:11 EDT 2017
七、命令幫助
help COMMAND
使用help加命令可以獲取命令幫助
COMMAND --help
部分命令可以使用長選項--help來獲取幫助
使用MAN來獲取幫助
MAN的章節可以分為以下幾個部分:
1 Executable programs or shell commands 用戶命令 2 System calls (functions provided by the kernel) 系統調用 3 Library calls (functions within program libraries) 庫調用 4 Special files (usually found in /dev) 設備 5 File formats and conventions eg /etc/passwd 文件格式 6 Games 游戲幫助 7 Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7) 雜項 8 System administration commands (usually only for root) 系統命令 9 Kernel routines [Non standard] kernel內部命令
可以使用whatis查看命令章節
[root@localhost ~]# whatis ls ls (1) - list directory contents
在MAN下的控制命令
八、基礎目錄的命令法則和功用規定
linux文件命名法則:
1.文件名嚴格區分大小寫
2.文件可以使用除/以外任意字元
3.文件名長度不能超過255字元
4.以.開頭的文件為隱藏文件
下圖為linux的文件系統的結構,讓我們來具體看一下每一個的功能
/:根目錄
/bin:所有用戶的可用的基本命令程式文件
/sbin:供系統管理使用的程式文件
/etc:系統程式的配置文件
/dev:存儲特殊文件或者設備文件
/proc:基於記憶體的虛擬文件系統,用於為內核及進程存儲其相關信息;它們多為內核參數
/var:存儲常發生變化的數據的目錄
/tmp:為那些會產生臨時文件的程式提供的用於存儲臨時文件的目錄;可供所用戶執行寫入操作;有特殊許可權
/usr:全局共用的只讀數據路徑
/home:普通的家目錄的集中位置;一般每個普通用戶的家目錄預設為此目錄下與用戶名同名的子目錄
/boot:引導載入器必須用到的各靜態文件
/lib:為系統啟動或根文件系統上的應用程式(/bin, /sbin等)提供共用庫,以及為內核提供內核模塊
/opt:附加應用程式的安裝位置;可選路徑
/mnt:其它文件系統的臨時掛載點
/media:攜帶型設備掛載點,cdrom, floppy等
/srv:當前主機為服務提供的數據
/lib64:64位系統特有的存放64位共用庫的路徑
知識遺拾:
linux文件系統的層級結構是一個倒置樹狀結構,“/”根為起點 絕對路徑:從根開始表示出的路徑 相對路徑:從當前位置開始表示出的路徑