linux學習總結【指令+基本概念】

Linux基礎

1、linux基本指令

1)文件和目錄

cd /etc 進入etc目錄 
ls -l 顯示文件和目錄的詳細資料 
mkdir dir1創建一個目錄 dir1
rm -f file1 刪除叫做 'file1' 的文件'
mv dir1 newdir 重命名/移動 一個目錄 
cp file1 newfile 複製一個文件 

unzip file1.zip 解壓一個zip格式壓縮包 

tar -zxvf archive.tar.gz 解壓一個gzip格式的壓縮包 
zip file1.zip file1 創建一個zip格式的壓縮包 

cat file1 查看文件的內容 

vi/vim  file1  vi模式編輯文件

 

2)文件的權限

使用 "+" 加權限,"-" 用於取消,所有人(u)、羣組(g)以及其他人(o)

讀(r)寫(w)和執行(x)的權限 u g o + - r w x   

chmod u+w my.cnf    chmod ug+w my.cnf

 

3)RPM安裝包,適用 Fedora, Redhat及類似系統
rpm -ivh package.rpm 安裝一個rpm包(帶進度條,所需依賴包)
rpm -ivh --nodeeps --force *.rpm忽略依賴,強制安裝目錄下所有安裝包
rpm -e package_name.rpm --nodeeps刪除一個rpm包,忽略依賴,但要求不可強制卸載
rpm -qa | sort顯示系統中所有已經安裝的rpm包 (有序)
rpm -qa | grep jdk 顯示所有名稱中包含 "jdk" 字樣的rpm包 
rpm -qi package_name 獲取一個已安裝包的特殊信息(所包含依賴)

 

4)YUM 軟件包升級器,適用 Fedora, Redhat及類似系統 
yum install package_name 下載並安裝一個rpm包 

yum install --downloadonly --downloaddir=/tmp <package-name>只下載不安裝指定目錄
yum update package_name 更新一個rpm包 
yum list 列出當前系統中安裝的所有包 
yum clean all 刪除所有緩存的包和頭文件

yum makecache 把服務器的包信息下載到本地電腦緩存起來

 

Yum是一個在RedHatCentOS中軟件包管理器。RPM包管理,能夠從指定的服務器自動下載 RPM 包並且安裝,可以自動處理依賴性關係,並且一次安裝所有依賴的軟件包,無須繁瑣地一次次下載、安裝。 

yum 機制的強大之處在於yum 源。yum 源相當是一個目錄項,當我們使用 yum 機制安裝軟件時,若需要安裝依賴軟件,則 yum 機制就會根據在 yum 源中定義好的路徑查找依賴軟件,並將依賴軟件安裝好。yum 源分爲網絡yum 源和本地 yum 源。 

   yum 源配置文件有兩個。一是直接配置在/etc/yum.conf 中,其中包含一些 主要的配置信息。另外就是/etc/yum.repos.d/下的 xx.repo 後綴文件, 默認都會被加載進來。CentOS默認的yum源在線安裝及更新速度不是很理想。這時候需要將yum源設置爲國內鏡像站點。國內主要開源的開源鏡像站點應該是網易和阿里雲了。修改CentOS默認yum源爲mirrors.163.com(經驗主要修改配置文件就可以)

EPEL源是由Fedora社區創建維護,爲RHEL及衍生髮行版如CentOS、Scientific Linux 等提供高質量軟件包的項目。EPEL中含有大量的軟件,對官方標準源是一個很好的補充。(可以添加多源,在阿里雲下用epel源)

 

5)網絡、服務和防火牆(端口)

ping ip     telnet ip iport  端口是否有服務

查詢啓動失敗的服務列表:

systemctl --failed

查看服務狀態,啓動,停止,開機自啓

systemctl status start stop enable mysql.service

刷新服務

systemctl daemon-reload

 

防火牆(centos7用firewall)

查看默認防火牆狀態(關閉後顯示notrunning,開啓後顯示running)

firewall-cmd --state

查看開放的端口

firewall-cmd --list-ports  

查看8080端口是否開啓

firewall-cmd --query-port=8080/tcp

開啓8080端口

firewall-cmd --add-port=8080/tcp --permanent  # --permanent 永久生效,

刷新防火牆

firewall-cmd --reload

啓動防火牆

systemctl stop  restart  enable  firewalld.service

解鎖防火牆

systemctl unmask firewalld.service


6)創建軟鏈
ln -s file1 lnk1 創建一個指向文件或目錄的軟鏈接 

ln -s /etc/init.d/mysql /etc/rc3.d/S99mysql

刪除軟鏈

rm -rf /etc/rc3.d/S99mysql

linux的文件和目錄在文件系統中存儲方式
在文件系統中,文件創建的時候系統會給文件分配一個node,該node有存儲文件真實數據的block信息,同時也會確定文件和文件所在目錄的關係,關係是這樣的,目錄在創建的時候,系統也會給目錄分配一個node,node指向的block存放這該目錄下的文件名和對應的文件node,這樣文件和目錄的關係就此建立。

touch 123        //我們創建一個名爲 123 的文件

ls -i            //使用 ls -i命令查看文件123的inode 值

此時,返回值爲926561 123   說明文件123的 inode值爲 926561 

mv 123 ../123        //利用 mv 指令將文件 123 移動到上級目錄下

此時,返回值爲926561 123,文件 123 的 inode 值並沒有發生改變

總結:使用 mv 指令移動文件的時候,並不會更改文件的 inode 值。

cp 123 789        //利用 cp 指令,複製文件 123 ,複製後的文件名爲 789

此時,返回值爲926561 123  928115 789

我們發現,複製出來的 789 的 inode 值發生了變化

總結:使用 cp 指令複製文件的時候,會對文件的 inode 值作出更改。

這裏的 inode 值不變的情況,我們就稱作 硬鏈接 ,inode 值發生變化的則稱爲 軟鏈接 (也叫符號鏈接)。建立這種鏈接的好處在於可以解決 Linux 的文件共享問題,還可以有隱藏文件路徑,增加權限安全及節省存儲等效果。

使用 ln 指令創建文件鏈接的時候,默認創建的就是硬鏈接

使用 ln 創建軟鏈接呢 -s  就可以了

 

軟鏈接

文件軟鏈接在創建的時候是在所在的目錄下創建一個新的文件,所在目錄的block(用於存放文件名和對應node)中的node指向的是源文件所在目錄的node,再通過源文件所在目錄的node找到源文件名和對應node號,再找到這個源文件的node號,最後才找到源文件。也就是說,軟鏈接是通過源文件的目錄node找到源文件,並不直接指向源文件的node

ln -s 源文件名 目標名(注意如果是創建文件軟鏈接,目標名是一個文件名,如果建立目錄軟鏈接的時候,這個地方是一個位置不是名字,否則會在目標位置的下一層目錄創建軟鏈接)

硬鏈接

文件硬鏈接創建的時候會在所在目錄下的一個block記錄硬鏈接文件名和源文件的node,注意他直接找到源文件的node,沒有通過源文件的目錄。無法創建目錄硬鏈接

 

Linux程序編譯鏈接動態庫版本的問題

不同版本的動態庫可能會不兼容,如果程序在編譯時指定動態庫是某個低版本,運行是用的一個高版本,可能會導致無法運行。Linux上對動態庫的命名採用libxxx.so.a.b.c的格式,其中a代表大版本號,b代表小版本號,c代表更小的版本號,我們以Linux自帶的cp程序爲例,通過ldd查看其依賴的動態庫,左邊是依賴的動態庫名字,右邊是鏈接指向的文件,

$ ldd /bin/cp                                                                                                                                                                                        

linux-vdso.so.1 =>  (0x00007ffff59df000)

libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fb3357e0000)

librt.so.1 => /lib64/librt.so.1 (0x00007fb3355d7000)

libacl.so.1 => /lib64/libacl.so.1 (0x00007fb3353cf000)

 

再查看libacl.so相關的動態庫

$ ll /lib64/libacl.so*                                                                                                                                                                               

lrwxrwxrwx. 1 root root   /lib64/libacl.so.1 -> libacl.so.1.1.0

-rwxr-xr-x. 1 root root  /lib64/libacl.so.1.1.0

libacl.so.1實際上是一個軟鏈接,它指向的文件是libacl.so.1.1.0

我們往往是在機器A上編譯程序,在機器B上運行程序,編譯和運行的環境其實是有略微不同的。

 $ readelf -d /lib64/libc-2.12.so                                                                                                                                                                      

Dynamic section at offset 0x18db40 contains 27 entries:

Tag        Type                         Name/Value

0x0000000000000001 (NEEDED)             Shared library: [ld-linux-x86-64.so.2]

0x000000000000000e (SONAME)             Library soname: [libc.so.6]

soname它相當於一箇中間者,當我們的動態庫只是升級一個小版本時,我們可以讓它的soname相同,而可執行程序只認soname指定的動態庫,這樣依賴這個動態庫的可執行程序不需重新編譯就能使用新版動態庫的特性(直接把高版本的動態庫放到 /usr/lib(默認放到這裏)下,系統會自動加載)

 

7)升級glibc

glibc是GNU發佈的libc庫,即c運行庫。glibc是linux系統中最底層的api,幾乎其它任何運行庫都會依賴於glibc。glibc除了封裝linux操作系統所提供的系統服務外,它本身也提供了許多其它一些必要功能服務的實現。

glibc 和 libc 都是 Linux 下的 C 函數庫。libc 是 Linux 下的 ANSI C 函數庫;glibc 是Linux下的GUN C函數庫。 
   glibc是linux下面c標準庫的實現,即GNU C Library。glibc本身是GNU旗下的C標準庫,後來逐漸成爲了Linux的標準c庫,而Linux下原來的標準c庫Linux libc逐漸不再被維護。 Linux下面的標準c庫不僅有這一個,如uclibc、klibc,以及上面被提到的Linux libc,但是glibc無疑是用得最多的。glibc在/lib目錄下的.so文件爲libc.so.6。

 

8)圖形化界面和命令行

linux運行級別

命令行的運行級別:3     圖形界面的運行級別:5

查看當前運行的級別 runlevel

 

9)遠程連接

CRT工具(命令行),和vnc(圖形化界面)

VNC 是一款優秀的遠程控制工具軟件,由著名的 AT&T 的歐洲研究實驗室開發的。VNC 是在基於 UNIX 和 Linux 操作系統的免費的開源軟件,遠程控制能力強大,高效實用。

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