大資料學習筆記(三) -- linux的重要知識點以及相關命令
linux特點:
linux中 一切皆檔案,一個程序也會被對映成檔案,一個硬碟也會被對映成檔案。
linux 是一個虛擬的目錄樹結構,每個分割槽會被對應一個目錄。
window中我們執行一個程式是用滑鼠點選exe,linux中是通過命令,其實輸入一個命令就相當於windows中開啟一個程式。
像下面這種顯示方式,然後接收使用者輸入命令-->解析出命令-->執行命令-->返回結果 就是由bash程式為我們提供的服務
bash的工作原理 : 根據空格切割,第一個元素作為命令,判斷命令是內部命令還是外部命令,在環境變數中以從左到右的順序尋找,找到了就去執行。
[[email protected] ~]#
根下目錄含義
proc 核心執行狀態的對映目錄
proc/程序號/fd 存放該程序的 io 流 ,0代表標準輸出流,1代表標準輸入流,2代表錯誤輸出流
bin 可執行檔案目錄
dev 裝置目錄
home 使用者目錄
lib 和 lib64 庫目錄
opt 使用者軟體安裝目錄
usr 一些規範的軟體會自動安裝在usr目錄下
etc 配置檔案目錄
var 存放資料,如資料庫資料或war包
mnt 掛載點目錄,額外的臨時檔案系統
media 掛載點目錄,移動裝置
ls -l 輸出的內容解釋
注意 ,上面的檔案硬連線的次數是針對檔案來說的,如果是一個目錄,該目錄下沒有其他目錄則為2,如果有其他目錄,數字代表 2+目錄數。
如下
[[email protected] ~]# ll
total 32
drwxr-xr-x. 3 root root 4096 Sep 21 16:27 abc
-rw-------. 1 root root 900 Sep 21 03:28 anaconda-ks.cfg
-rw-r--r--. 1 root root 8815 Sep 21 03:28 install.log
-rw-r--r--. 1 root root 3384 Sep 21 03:27 install.log.syslog
-rw-r--r--. 1 root root 1796 Sep 21 15:38 profile
drwxr-xr-x. 10 root root 4096 Sep 21 16:05 x
[ [email protected] ~]# cd abc/
[[email protected] abc]# ll
total 8
drwxr-xr-x. 2 root root 4096 Sep 21 16:26 a
-rw-r--r--. 1 root root 4 Sep 21 16:27 b
[[email protected] abc]# cd a
[[email protected] a]# ll
total 0
abc是一個目錄,且目錄下有一個目錄 a ,有一個檔案b ,所以abc 那裡顯示的是 2+1 = 3 ,而目錄a是一個空目錄,所以a顯示的就是2,而普通檔案顯示的為1.
type
通過type -a command 可以檢視一個 命令所指向的程式所在的路徑
如下
[[email protected] ~]# type -a ifconfig
ifconfig is /sbin/ifconfig # 告訴我們ifconfig程式在 /sbin/ifconfig目錄下
向ifconfig這種 返回一個路徑,說明ifconfig是一個第三方的程式,並不是linux自帶的。稱為外部命令
[[email protected] ~]# type cd
cd is a shell builtin
它說 cd 命令 是一個 builtin ,意思就是說這是一個linux 整合的命令。稱為內部命令
shell 代表該命令處於 人機互動層,比如這種命令列或windows下點選圖示都稱為shell
file
用來檢視檔案型別
如下
[[email protected] ~]# file /sbin/ifconfig
/sbin/ifconfig: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
ELF 代表二進位制可執行檔案
[[email protected] ~]# type yum
yum is hashed (/usr/bin/yum)
[[email protected] ~]# file /usr/bin/yum
/usr/bin/yum: a /usr/bin/python script text executable
通過上面命令可以看出 yum 是一個python指令碼,那麼一個python指令碼並不是一個可執行程式,那麼它是怎麼執行的呢?
我們 使用 vi /usr/bin/yum 命令來檢視一下這個python指令碼的內容,可以看到如下內容
注意第一行,意思是使用 /usr/bin/下的python來執行該指令碼,那麼我們來看一下這個python到底 是不是一個二進位制的可執行檔案
[[email protected] bin]# file python
python: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for G
可以看出,是一個二進位制可執行檔案。 這個python程式會將 python腳本里的內容一邊解釋為cpu能讀懂的東西,一邊執行。
yum
安裝外部程式
[[email protected] ~]# yum install man -y
[[email protected] ~]# yun install man-pages
-y 代表同意安裝,沒有 -y 還會詢問一次是否確定安裝
man
看一個外部程式的幫助文件
[[email protected] ~]# man ifconfig
man命令可以檢視下面幾種型別的幫助文件
可以通過
[[email protected] ~]# man 8 ifconfig
檢視
help
看一個內部程式的幫助文件
[[email protected] ~]# help cd
ehco
在螢幕上顯示字串
$用於提取指定內容
下面 輸出的是環境變數,環境變數配置的是可執行程式的所在的目錄。bash會根據這些目錄去找到可執行檔案,從而響應使用者輸入的命令,要注意的是bash會從左向右去查詢,查詢到了就會執行。所以不存在相同的可執行程式想執行哪個就執行哪個。
[[email protected] bin]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
下面的命令可以輸出bash程式的程序號
[[email protected] dev]# echo $$
1557
df
檢視磁碟使用情況,以及磁碟掛載目錄情況
[[email protected] grub]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda3 100944296 834348 94982220 1% /
tmpfs 502204 0 502204 0% /dev/shm
/dev/sda1 198337 27810 160287 15% /boot
[[email protected] grub]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 97G 815M 91G 1% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 194M 28M 157M 15% /boot
可以看出sda3 也就是我們之前 用來存放 自己安裝的程式的磁碟掛載了在 根目錄下
sda1 用來引導系統啟動的磁碟掛載在了 根目錄下的 boot 目錄下
這裡說一下 linux中的 目錄和分割槽的對應關係,linux 根目錄下的 所有資料夾是固定的,也就是你安裝好以後就肯定存在那些資料夾,而我們安裝centOS的時候進行的手動分割槽,實際上是將 分割槽指定掛載到某個目錄下。
這種設計增強了可移植性。不像winows你寫個程式碼,從E盤讀取某個檔案,把程式碼放別人電腦上,但別人電腦可能都沒有E盤。
linux能夠保證目錄的一致性,就是所有人安裝完linux系統 ,根目錄下的目錄都是一致的。
windows是在分割槽即不同磁碟中建立的目錄,而linux是將分割槽掛載到目錄下。然後目錄又一樣。
linux系統啟動的過程大致如下
通電以後主機板裡有一個 bios(basic input output system) ,bios中有一段程式碼放入記憶體執行。 從而會指向引導系統的裝置如優盤、硬碟 等。預設都是硬碟。讀取硬碟前512位元組(讀的分割槽表),載入程式放入記憶體,執行程式 , 找到活動分割槽 , 就是 boot 分割槽,分割槽起始位置讀取固定位元組數(把小程式再存入記憶體) , 然後就把這第一個分割槽(boot分割槽)算作 根 ,從boot下再讀取配置檔案 、核心檔案 讀到記憶體裡,從而給cpu reset指令,使核心接管硬體。核心接管硬體以後,cpu再讀取的資料,就是從核心展開的指令裡面讀。然後重新掛載根目錄,掛載的是sda3。然後會執行sbin中init程式(第一個程式)用來完成作業系統的初始化即安裝各種軟體,最終bash程式載入起來,我們就可以通過命令列進行人機互動了。
檢視個檔案來理解
[[email protected] boot]# vi /boot/grub/grub.conf
這個檔案表明了 引導系統重要檔案的位置, 它說是在根目錄下,但實際這兩個檔案是在 boot目錄下。之所以這樣是因為在載入核心之前,boot分割槽就是根目錄,只不過是載入完核心一個給cpu一個reset指令使其重新將sda3掛載到了根目錄。然後再通過mount 將 sda1掛載到 boot目錄下
mount和umout
通過
[[email protected] /]# umount /boot/
將掛載移除
[[email protected] /]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 97G 815M 91G 1% /
tmpfs 491M 0 491M 0% /dev/shm
可以看到 sda1 的對應關係就沒有了
[[email protected] /]# ll
total 92
dr-xr-xr-x. 2 root root 4096 Sep 21 03:27 bin
drwxr-xr-x. 2 root root 4096 Sep 21 03:25 boot
drwxr-xr-x. 18 root root 3700 Sep 21 06:01 dev
drwxr-xr-x. 61 root root 4096 Sep 21 09:29 etc
drwxr-xr-x. 2 root root 4096 Sep 23 2011 home
dr-xr-xr-x. 8 root root 4096 Sep 21 03:27 lib
dr-xr-xr-x. 9 root root 12288 Sep 21 03:27 lib64
drwx------. 2 root root 16384 Sep 21 03:25 lost+found
drwxr-xr-x. 2 root root 4096 Sep 23 2011 media
drwxr-xr-x. 2 root root 4096 Sep 23 2011 mnt
drwxr-xr-x. 2 root root 4096 Sep 23 2011 opt
dr-xr-xr-x. 85 root root 0 Sep 21 06:00 proc
dr-xr-x---. 2 root root 4096 Sep 21 07:56 root
dr-xr-xr-x. 2 root root 12288 Sep 21 03:27 sbin
drwxr-xr-x. 7 root root 0 Sep 21 06:00 selinux
drwxr-xr-x. 2 root root 4096 Sep 23 2011 srv
drwxr-xr-x. 13 root root 0 Sep 21 06:00 sys
drwxrwxrwt. 3 root root 4096 Sep 21 08:38 tmp
drwxr-xr-x. 13 root root 4096 Sep 21 03:26 usr
drwxr-xr-x. 17 root root 4096 Sep 21 03:26 var
[[email protected] /]# cd /boot/
[[email protected] boot]# ll
total 0
可以看到 boot 目錄存在,但是裡面的內容沒了。
通過
[[email protected] dev]# mount /dev/sda1 /boot
將 dev 下的 sda1磁碟 掛載到 /boot 目錄下
[[email protected] boot]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 97G 815M 91G 1% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 194M 28M 157M 15% /boot
[[email protected] dev]# cd /boot/
[[email protected] boot]# ll
total 21672
-rw-r--r--. 1 root root 105195 Nov 22 2013 config-2.6.32-431.el6.x86_64
drwxr-xr-x. 3 root root 1024 Sep 21 03:27 efi
drwxr-xr-x. 2 root root 1024 Sep 21 09:28 grub
-rw-------. 1 root root 15221168 Sep 21 03:28 initramfs-2.6.32-431.el6.x86_64.img
drwx------. 2 root root 12288 Sep 21 03:25 lost+found
-rw-r--r--. 1 root root 193758 Nov 22 2013 symvers-2.6.32-431.el6.x86_64.gz
-rw-r--r--. 1 root root 2518236 Nov 22 2013 System.map-2.6.32-431.el6.x86_64
-rwxr-xr-x. 1 root root 4128368 Nov 22 2013 vmlinuz-2.6.32-431.el6.x86_64
又可以看到內容了。
du
檢視目錄佔用空間
-h 單位換算、-s 求和 後面再接路徑代表檢視指定檔案所佔大小
[[email protected] etc]# du -hs ./*
useradd
新增使用者,新增的使用者會存在home資料夾下,以檔案的形式展示
[[email protected] etc]# useradd zzh
[[email protected] etc]# cd /home/
[[email protected] home]# ll
total 12
drwx------. 2 god god 4096 Sep 21 13:24 god
drwx------. 2 good good 4096 Sep 21 13:24 good
drwx------. 2 zzh zzh 4096 Sep 21 14:50 zzh
cd
cd ~ 進入當前目錄
[[email protected] home]# cd ~
cd ~ 其他使用者名稱 和 cd/home/其他使用者名稱 進入其他使用者目錄
[[email protected] ~]# cd ~god
[[email protected] god]# cd /home/good/
[[email protected] good]#
mkdir
建立目錄
平行建立多個目錄
[[email protected] ~]# mkdir ./x/1dir ./x/2dir ./x/3dir
[[email protected] ~]# ls
abc anaconda-ks.cfg install.log install.log.syslog x
[[email protected] ~]# cd x
[[email protected] x]# ls
1dir 2dir 3dir y
花括號優化 , 分號 分割命令
[[email protected] x]# cd;mkdir ./x/{a,b,c}dir
[[email protected] ~]# ls
abc anaconda-ks.cfg install.log install.log.syslog x
[[email protected] ~]# cd x
[[email protected] x]# ls
1dir 2dir 3dir adir bdir cdir y
-p 遞迴建立多個目錄
[[email protected] ~]# ls
abc anaconda-ks.cfg install.log install.log.syslog x
[[email protected] ~]# cd x
[[email protected] x]# cd y
[[email protected] y]# cd z
rm
刪除
-r 遞迴刪除
-f 刪除不詢問是否確定刪除
[[email protected] tmp]# rm x
rm: cannot remove `x': Is a directory
[[email protected] tmp]# rm -r x
rm: descend into directory `x'? ^C
[[email protected] tmp]# rm -rf x
[[email protected] tmp]# ls
yum.log
cp
拷貝 檔案
-r 遞迴拷貝
[[email protected] ~]# cp x /tmp
cp: omitting directory `x'
[[email protected] ~]# cp -r x /tmp
mv
移動檔案且可以改名
[[email protected] zzh]# mv /tmp/p /home/zzh/x
[[email protected] zzh]# ls
x
[[email protected] zzh]# ls
x
[[email protected] zzh]# mv x p
[[email protected] zzh]# ls
p
ln
新增連結,類似windows中的快捷方式,連結分為軟連線和硬連結
硬連結 ln 原檔名 連結名
[[email protected] ~]# ll
total 32
drwxr-xr-x. 2 root root 4096 Sep 21 15:00 abc
-rw-------. 1 root root 900 Sep 21 03:28 anaconda-ks.cfg
-rw-r--r--. 1 root root 8815 Sep 21 03:28 install.log
-rw-r--r--. 1 root root 3384 Sep 21 03:27 install.log.syslog
-rw-r--r--. 1 root root 1796 Sep 21 15:38 profile
drwxr-xr-x. 10 root root 4096 Sep 21 16:05 x
[[email protected] ~]# ln profile xyz
[[email protected] ~]# ll -i
total 36
1310732 drwxr-xr-x. 2 root root 4096 Sep 21 15:00 abc
1310729 -rw-------. 1 root root 900 Sep 21 03:28 anaconda-ks.cfg
1310722 -rw-r--r--. 1 root root 8815 Sep 21 03:28 install.log
1310723 -rw-r--r--. 1 root root 3384 Sep 21 03:27 install.log.syslog
1310742 -rw-r--r--. 2 root root 1796 Sep 21 15:38 profile
1310733 drwxr-xr-x. 10 root root 4096 Sep 21 16:05 x
1310742 -rw-r--r--. 2 root root 1796 Sep 21 15:38 xyz
ls -l -i 通過 i 可以檢視 檔案地址, 可以看到 xyz 和 profile 的地址指向是一樣的。以及 ll -i 輸出內容中profile和xyz的第三個欄位 是 2.
軟連線
ln -s 原始檔名 連結名
[[email protected] ~]# ln -s xyz aaa
[[email protected] ~]# ll -i
total 36
1310744 lrwxrwxrwx. 1 root root 3 Sep 21 16:33 aaa -> xyz
1310732 drwxr-xr-x. 2 root root 4096 Sep 21 16:31 abc
1310729 -rw-------. 1 root root 900 Sep 21 03:28 anaconda-ks.cfg
1310722 -rw-r--r--. 1 root root 8815 Sep 21 03:28 install.log
1310723 -rw-r--r--. 1 root root 3384 Sep 21 03:27 install.log.syslog
1310742 -rw-r--r--. 2 root root 1796 Sep 21 15:38 profile
1310733 drwxr-xr-x. 10 root root 4096 Sep 21 16:05 x
1310742 -rw-r--r--. 2 root root 1796 Sep 21 15:38 xyz
可以發現 軟連線的 第三個欄位數字為1, 原始檔和連結檔案所指向的地址也不一樣,一個是1310744一個是1310742.
並且軟連線檔案的 第一個字母是 l 。
刪除原始檔以後會提示 找不到原始檔
無論是軟連線還是硬連結,改變連結檔案中的內容或原始檔內容,另一個都會跟著改變
stat
檢視檔案屬性
[[email protected] /]# stat /etc/profile
File: `/etc/profile'
Size: 1796 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 1179683 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-09-21 03:34:13.380600126 +0800
Modify: 2013-10-02 17:06:18.000000000 +0800
Change: 2018-09-21 03:26:39.649999827 +0800
Access 訪問該檔案的最後一次時間
Modify 修改該檔案內容的最後一次時間
Change 元檔案被改變的最後一次時間,什麼叫元檔案? 就是該檔案的大小被改變,許可權被改變等等都被稱做元檔案被改變。
touch
作用1 :
touch 未存在檔名 建立該檔案
[[email protected] /]# cd opt/
[[email protected] opt]# ll
total 0
[[email protected] opt]# touch test
[[email protected] opt]# stat test
File: `test'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 803h/2051d Inode: 2621442 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-09-21 16:51:37.114888038 +0800
Modify: 2018-09-21 16:51:37.114888038 +0800
Change: 2018-09-21 16:51:37.114888038 +0800
作用2:
touch 已存在檔名 重新整理 Acess、Modify、Change的三個時間到當前時間
[[email protected] opt]# stat test
File: `test'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 803h/2051d Inode: 2621442 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-09-21 16:51:37.114888038 +0800
Modify: 2018-09-21 16:51:37.114888038 +0800
Change: 2018-09-21 16:51:37.114888038 +0800
[[email protected] opt]# touch test
[[email protected] opt]# stat test
File: `test'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 803h/2051d Inode: 2621442 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-09-21 16:54:03.108886546 +0800
Modify: 2018-09-21 16:54:03.108886546 +0800
Change: 2018-09-21 16:54:03.108886546 +0800