1. 程式人生 > >【Linux相識相知】計算機的組成、linux發行版和哲學思想、基礎命令和目錄結構

【Linux相識相知】計算機的組成、linux發行版和哲學思想、基礎命令和目錄結構

知識 sun pro 復制 val 算術 uil cdr type

從今天開始,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查看終端設備

[[email protected] ~]# 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來獲取命令是內置的還是外置:

內置:

[[email protected] ~]# type cd
cd is a shell builtin

外置:

[[email protected] ~]# type cat
cat is /usr/bin/cat

OPTIONS

選項,指定命令的運行特性,選項有兩中表現形式:

短選項:例如-c,-d,-r,有些命令是沒有-的,多個短選項,多數情況下是可以合並的

長選項:例如--help,不能合並

AGUMENTS

命令的作用對象,即命令對什麽生效,有些命令的對象可以用多個,使用空格分開

六、基礎命令

ifconfig

顯示IP地址,MAC地址,收發包和丟包數目和錯誤包的個數

[[email protected] ~]# 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 回顯命令
[[email protected] ~]# echo "hello linux"
hello linux

強引用,單引號:

[[email protected] ~]# echo $PATH
$PATH

弱引用,雙引號:

[[email protected] ~]# echo "$PATH"
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

tty

顯示當前終端的文件名

[[email protected] ~]# tty
/dev/pts/0

startx

開啟圖形化界面

[[email protected] ~]# 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教程》

[[email protected] ~]# name="Frank"
[[email protected] ~]# echo $name
Frank
[[email protected] ~]# bash
[[email protected] ~]# echo $name
[[email protected] ~]# exit
exit
[[email protected] ~]# export name
[[email protected] ~]# echo $name
Frank
[[email protected] ~]# bash
[[email protected] ~]# echo $name
Frank

pwd

顯示當前目錄,當用戶登錄的時候,一般起始目錄為其家目錄,/home/username

[[email protected] ~]# pwd
/root

history

顯示執行命令的歷史信息,用戶在登錄系統時,會讀取歷史文件記錄下的命令:~/.bash_history

[[email protected] ~]# 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點關機

[[email protected] ~]# shutdown -r 22:00
Shutdown scheduled for Sat 2017-07-01 22:00:00 EDT, use shutdown -c to cancel.

指定5分鐘後關機,同時給出告警信息

[[email protected] ~]# shutdown +5 "System will shutdown after 5 minutes"
Shutdown scheduled for Sat 2017-07-01 08:54:35 EDT, use shutdown -c to cancel.
[[email protected] ~]# 
poweroff(關閉電源),reboot(重啟系統) date [OPTION] [+FORMAT] Format指出了以什麽樣的格式來顯示時間 查看系統時鐘,設置系統時間
[[email protected] ~]# date
Sat Jul  1 09:06:14 EDT 2017
  %%   a literal %
  %a   locales abbreviated weekday name (e.g., Sun)
  %A   locales full weekday name (e.g., Sunday)
  %b   locales abbreviated month name (e.g., Jan)
  %B   locales full month name (e.g., January)
  %c   locales 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   locales equivalent of either AM or PM; blank if not known
  %P   like %p, but lower case
  %r   locales 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   locales date representation (e.g., 12/31/99)
  %X   locales 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)
[[email protected] ~]# date +%F
2017-07-01

將時間設置為2016年7月1日晚上21點17分30秒

[[email protected] ~]# date  070121172016.30
Fri Jul  1 21:17:30 EDT 2016

hwclock,clock

顯示或設定硬件時間 -s, --hctosys:以硬件為準,把系統調整為與硬件時間相同; -w, --systohc:以系統為準,把硬件時間調整為與系統時鐘相同;
[[email protected] ~]# date
Fri Jul  1 21:19:22 EDT 2016
[[email protected] ~]# clock
Sat 01 Jul 2017 09:20:48 AM EDT  -1.059659 seconds
[[email protected] ~]# hwclock -s
[[email protected] ~]# 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查看命令章節

[[email protected] ~]# 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文件系統的層級結構是一個倒置樹狀結構,“/”根為起點 絕對路徑:從根開始表示出的路徑 相對路徑:從當前位置開始表示出的路徑

【Linux相識相知】計算機的組成、linux發行版和哲學思想、基礎命令和目錄結構