1. 程式人生 > >linux 基礎知識(五)

linux 基礎知識(五)

linux 基礎命令

補充上一章關於alias,取消alias的方法為,unalias + 別名
用戶登錄流程
1.用戶在登陸時,會調用一些文件(這裏註意下,是用戶登錄,不是開機啟動)
/etc/profile
/etc/profile.d/
~/.bash_profile
~/.bashrc
/etc/bashrc
其中profile,profile.d/
,bashrc都是全局變量(所有用戶都能讀取到)
.bashrc和.bash_profile(局部變量,一般放在用戶的家目錄下面)

讀取順序(就是上面列出文件的順序,如果定義的變量沖突,以最後被讀取的文件的為主)

PATH變量(可以簡化命令長度)

 [root@localhost boke]# echo $PATH(讀取PATH變量時,按順序讀取)
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/mysql/bin/mysql:/root/bin
[root@localhost boke]# which touch
/bin/touch
[root@localhost boke]# /bin/touch 1(因為有了變量,才可以直接touch文件)
[root@localhost boke]# touch 2
[root@localhost boke]# ls
1  2
[root@localhost boke]# echo "bie xiang chuang jian" > /sbin/touch(我們在/bin前面在創建個一模一樣的文件)
[root@localhost boke]# chmod a+x /sbin/touch (給權限)
[root@localhost boke]# export PATH(刷新變量)
[root@localhost boke]# touch 3(意思完全變了,因為按照順序讀的事/sbin下面的touch)
[root@localhost boke]# /bin/touch 3(這時候只能你手動來指定了)
[root@localhost boke]# ls
1  2  3
/sbin/touch: line 1: bie: command not found
[root@localhost boke]# rm -f /sbin/touch 
[root@localhost boke]# touch 4(光刪除文件是第一步)
-bash: /sbin/touch: No such file or directory
[root@localhost boke]# export PATH(刷新變量,完成復原)
[root@localhost boke]# touch 4
[root@localhost boke]# ls
1  2  3  4
[root@localhost boke]# alias touch=‘echo hello‘(別名也能影響PATH)
[root@localhost boke]# alias touch
alias touch=‘echo hello‘
[root@localhost boke]# touch 5
hello 5
[root@localhost boke]# unalias touch
[root@localhost boke]# touch 5
[root@localhost boke]# ls
1  2  3  4  5

壓縮打包
https://iask.sina.com.cn/b/17713465.html (這裏講的原理,我看不大懂。。)
linux裏的壓縮有四種

創建大文件
dd if=/dev/zero(從剩余空間抽取 of=/路徑/文件名 bs=1M count=30

 [root@localhost boke]# dd if=/dev/zero of=/usr/local/boke/大文件 bs=1M count=30
30+0 records in
30+0 records out
31457280 bytes (31 MB) copied, 0.144625 s, 218 MB/s
[root@localhost boke]# stat 大文件 
  File: `大文件‘
  Size: 31457280    Blocks: 61440      IO Block: 4096   regular file
Device: 802h/2050d  Inode: 937638      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2018-04-24 13:10:02.272290603 +0800
Modify: 2018-04-24 13:10:02.413290814 +0800
Change: 2018-04-24 13:10:02.413290814 +0800
[root@localhost boke]# 
[root@localhost boke]# zip 大文件.zip 大文件 
  adding: 大文件 (deflated 100%)
[root@localhost boke]# ls
1  2  3  4  5  大文件  大文件.zip
[root@localhost boke]# ll
total 30752
-rw-r--r--. 1 root root        0 Apr 24 12:21 1
-rw-r--r--. 1 root root        0 Apr 24 12:21 2
-rw-r--r--. 1 root root        0 Apr 24 12:26 3
-rw-r--r--. 1 root root        0 Apr 24 12:29 4
-rw-r--r--. 1 root root        0 Apr 24 12:32 5
-rw-r--r--. 1 root root 31457280 Apr 24 13:10 大文件
-rw-r--r--. 1 root root    30704 Apr 24 13:12 大文件.zip
[root@localhost boke]# ll -h
total 31M
-rw-r--r--. 1 root root   0 Apr 24 12:21 1
-rw-r--r--. 1 root root   0 Apr 24 12:21 2
-rw-r--r--. 1 root root   0 Apr 24 12:26 3
-rw-r--r--. 1 root root   0 Apr 24 12:29 4
-rw-r--r--. 1 root root   0 Apr 24 12:32 5
-rw-r--r--. 1 root root 30M Apr 24 13:10 大文件
-rw-r--r--. 1 root root 30K Apr 24 13:12 大文件.zip(因為是空文件,所以壓縮的很高)
[root@localhost boke]# unzip -l 大文件.zip (查看zip裏的文件有哪些)
Archive:  大文件.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
 31457280  04-24-2018 13:10   ???
---------                     -------
 31457280                     1 file
[root@localhost boke]# 

zip -r +壓縮文件 文件名(如果壓縮後的文件不存在,對於文件是遞歸壓縮,如果已經存在,對於文件是添加到壓縮文件)

[root@localhost boke]# zip -r 大文件.zip 1 
  adding: 1 (stored 0%)
[root@localhost boke]# unzip -l 大文件.zip 
Archive:  大文件.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
 31457280  04-24-2018 13:10   ???
        0  04-24-2018 12:21   1
---------                     -------
 31457280                     2 files

zip -d +壓縮文件 文件名(刪除文件)

[root@localhost boke]# zip -d 大文件.zip 1
deleting: 1
[root@localhost boke]# unzip -l 大文件.zip 
Archive:  大文件.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
 31457280  04-24-2018 13:10   ???
---------                     -------
 31457280                     1 file

*(zip是可以壓縮目錄的,也就說你解壓縮後連同目錄也會給你解壓出來)

unzip +壓縮文件 -d /路徑(指定解壓到那裏去)

直接引用了筆記。。
gzip 需要壓縮的文件
gzip bigfile //壓縮該文件,刪除源文件
gzip -l bigfile.gz //查看壓縮文件中的內容
gzip -d bigfile.gz //解壓該文件
gunzip bigfile.gz //解壓該文件和 gzip -d 沒有區別

bzip2 需要壓縮的文件
bzip2 bigfile //壓縮該文件,刪除源文件
bzip2 -k bigfile //壓縮該文件,並保留源文件
bzip2 -d bigfile.bz2 //解壓該文件
bunzip2 bigfile.bz2 //解壓該文件和 bunzip2 -d 沒有區別

xz 需要壓縮的文件
xz bigfile //壓縮該文件,刪除源文件
xz -k bigfile //壓縮該文件,並保留源文件
xz -d bigfile.xz //解壓該文件
unxz bigfile.xz //解壓該文件和 xz -d 沒有區別

打包
tar -cvf 包的名稱 需要打包的文件或目錄
-c //代表創建打包
-v //顯示過程
-f //包名稱,註意f後面必須跟上包的名稱
-z //gzip壓縮
-j //bzip2壓縮
-J //xz壓縮
-x //解包
-t //查詢
-r //添加某個文件到包裏
--delete //刪除包裏的某個文件

例: tar -cvf root.tar /root //將/root打包
tar -r install.log -f root.tar //將install.log文件追加到root.tar包裏
tar --delete install.log -f root.tar //將install.log文件從root.tar包裏刪除
tar -tf root.tar //查看包裏有哪些內容
tar -xvf root.tar //解開包

tar -zcf root.tar.gz /root //將/root打包並壓縮成gzip格式
tar -jcf root.tar.bz2 /root //將/root打包並壓縮成bzip2格式
tar -Jcf root.tar.xz /root //將/root打包並壓縮成xz格式
tar -zxf root.tar.gz //將root.tar解壓並解包
tar -jxf root.tar.bz2 //將root.tar解壓並解包
*(補充下,解壓縮時後面跟上 -C /路徑 就可以解壓到指定的/路徑下面)

標準輸入和標準輸出

//標準輸出重定向
> //標準輸出追加重定向

2> //錯誤輸出重定向
2>> //錯誤輸出追加重定向

&> //全部輸出重定向
&>> //全部輸出追加重定向

ll /etc > /tmp/shadow 2> /tmp/out //正確的和錯誤的使用兩個文件保存

ll /etc &> /tmp/out
ll /etc > /tmp/out 2>&1 //兩種寫法結果一樣

< //標準輸入
例:cat < /etc/hosts //查看/etc/hosts文件

cat > /tmp/file < /etc/hosts //將/etc/hosts文件輸入到cat並輸出到/tmp/file文件中去
cat /etc/hosts > /tmp/file //此命令的效果同上

<< //後面跟上結束符(結束符任意),結束符之前的所有數據成為輸入

例:
cat << END

lkasdfuiouqwe
zc,mvnlasdkjf
qweoriu,mcnva
end
END
lkasdfuiouqwe
zc,mvnlasdkjf
qweoriu,mcnva
end

cat > /tmp/file << OUT

echo hello
OUT



軟件安裝
1.源碼包安裝
2.二進制安裝
3.RPM
4.YUM

源碼包
優點:可制定
缺點:操作復雜,編譯時間長,非常容易出現問題或報錯
安裝:
1.下載並解壓源碼包
2.進入解壓後的目錄,執行“./configure”命令,為編譯前做本地環境的配置。
3.配置成功後,執行“make”命令,來進行軟件的編譯。
4.編譯成功後,執行“make install”命令來完成安裝。
5.最後,執行“make clean”命令來刪除安裝時所產生的臨時文件
卸載:
進入安裝的目錄,執行卸載命令“make uninstall”來進行卸載
註意:並不是所有的軟件包都提供uninstall的功能,如果沒有提供只能手工刪除。
“./configure --prefix=/usr/local/dir” 將該軟件安裝到指定的目錄下,一般默認安裝在/usr/local裏面

二進制安裝
直接解壓縮即可使用

RPM:redhat package management
命令語法
rpm 選項 參數
需要rpm包,一般都是以.rpm結尾
rpm包命名的結構

ntfsprogs-2.0.0-13.el6.x86_64.rpm
軟件名-版本號-操作系統平臺.rpm

使用rpm命令,可以對該軟件進行安裝,查詢,卸載,升級,顯示所需依賴關系的軟件

依賴關系:某軟件依賴與其他軟件。

rpm安裝軟件的步驟
1.下載rpm包
2.使用rpm命令來進行安裝“rpm -ivh 軟件包的全名”
rpm
-i //安裝
-v //顯示過程
-h //顯示安裝時列出標記

查詢
-a //查詢所有軟件包
-q //詢問模式
-f //文件名,查看該文件是由哪個軟件產生的
-l //顯示軟件包列表
-i //軟件包的詳細信息

升級
-U //升級,若該文件沒有安裝則安裝
-F //升級,若該為件沒有安裝則放棄(不安裝)

卸載
-e //卸載該軟件
--nodeps -e //不卸載依賴關系

yum
yum特點
1.自動解決依賴性問題
2.組包,可以對RPM包進行分組,以組包的形式來進行安裝
3.yum引入倉庫的概念,yum源。支持多個倉庫。
4.配置簡單

/etc/yum.repos.d/ //該目錄為yum倉庫的配置文件存放目錄,註意:配置文件必須以.repo結尾
vim /etc/yum.repos.d/server.repo
[server] //倉庫名稱
name = rhel6.5 repos //倉庫的說明信息
baseurl = http://classroom.example.com/content/rhel6.5/x86_64/dvd/ //倉庫的位置
enable=1 //倉庫是否啟用(0代表不啟用,1代表啟用)
gpgcheck=0 //是否啟用檢測(0代表不啟用,1代表啟用)

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release //如果檢測是1,那麽必須要有相應的鑰匙參數。

倉庫的位置:
本地:file:///mnt/ //本地使用格式file後的前兩個斜杠代表格式第三個斜杠代表“根"
遠程: ftp://
nfs://
http:// //看使用的是什麽協議

配置完成之後,需要清除yum緩存,清除完成後建立緩存
yum clean all //清除緩存
yum makecache //建立緩存

創建本地yum倉庫
1.下載系統鏡像文件
wget http://classroom.example.com/content/rhel6.5/x86_64/isos/rhel-server-6.5-x86_64-dvd.iso
2.掛載鏡像到本地目錄
mount -o loop /root/rhel-server-6.5-x86_64-dvd.iso /mnt
3.創建倉庫配置文件(必須以.repo結尾)
vim /etc/yum.repos.d/iso.repo
4.修改該配置文件
[iso]
name = file repos
baseurl = file:///mnt
enable=1
gpgcheck=0

5.清除緩存,建立緩存
yum clean all
yum makecache
6.安裝驗證

vim進階使用
正常模式 插入模式(編輯模式) 結束模式

正常模式
yy 復制一行(光標所在位置)
p 粘貼
3yy 復制三行
dd 刪除一行或移動一行使用p來移動
G 跳轉到文檔的最後一行
gg 跳轉到文檔的第一行
5gg 跳轉到第5行
u 撤銷
ctrl+r 反撤銷(恢復)
0 移動到行首
$ 移動到行尾
/關鍵字 搜索光標之下
?關鍵字 搜索光標之上
ZZ 保存並退出

i 光標當前位置插入
I 光標的行首位置插入
o 在光標所在位置行下方新開一行進行插入
O 在光標所在位置行上方新開一行進行插入
a 光標的下一個字符位置插入
A 光標的行尾插入

:set nu //顯示行號
:set nonu //關閉行號顯示
:nohl //關閉高亮顯示
:!命令 //臨時切換到bash使用命令(不識別命令別名),任意鍵返回該文檔
.!命令 //將命令的執行的結果插入到所編輯的文件中
:3 //跳轉到第3行
:s/w/o //光標所在行第一個出現的“w”替換成“o”
:s/w/o/g //光標所在行出現的所有“w”替換成“o”,g代表整行替換
:%s/w/o/g //忽視光標所在位置進行全文替換,所有“w”替換成“o”
:% //代表將後面的替換作用到所有的行
:w 絕對路徑 //另存為該文件
:r 文件名 //在該文檔讀取另一個文檔,顯示位置為光標所在位
:e! //放棄修改並重新加載原始文件



進程
pstree //查看進程樹

父進程 PPID
子進程 PID

rhel6:所有的進程之父init
rhel7:所有的進程之父systemd

ps aux //靜態查看,a代表全部,u代表用戶,x代表沒有控制終端的進程

進程的狀態
S:休眠狀態
R:等待運行
I:空閑狀態
Z:僵屍狀態
<:進程的優先級較高
N:進程的優先級較低
s:進程的領導者
l:多線程
+:在前臺進程組

守護進程

ps -ef //靜態查看,-e代表全部進程 ,-f代表全格式羅列

ps -le //查看進程的優先級,重點看NI這一列表示優先級

pgrep init //只顯示init進程的進程ID(PID)
-l //顯示進程名
-U 用戶名 //顯示該用戶所產生的進程ID
-t ttyID //顯示由該終端所產生的進程ID

pidof 進程名 //只顯示進程ID

動態查看進程
top //動態查看進程
默認3秒刷新一次,空格可以立即刷新,輸入“d”在輸入秒數可以更改默認刷新的時間

"P"根據CPU的占用率來進行排序
“M”根據內存的占用率來進行排序
“N”根據啟動時間來進行排序
“n”輸入想一頁顯示進程的數量
"<" ">" 左右翻頁
"c"命令名的切換,詳細的路徑,命令名。詳細的還包括參數
"k"結束進程,默認使用15信號

ctrl+c 終止查看動態進程

結束進程
kill 信號 進程ID(PID)
-1 重置信號,一般用於讓服務重新加載自己的配置文件,讓進程重新加載新的配置信息包括配置文件
-9 強制關閉某個進程
-15 等待進程正常退出信號,和9信號的區別在於數據流的回寫。

killall 進程名 //結束同名的所有進程

pkill //根據條件來結束相應的進程
-t 終端號
-U 用戶名

xkill //點誰誰死,哪裏不動點哪裏



進程的優先級
ps -le //查看優先級 NI
優先級的數字越小優先級越高
優先級數字的範圍:-20-19

1.創建進程時指定優先級
2.修改一個現有進程的優先級

nice -n 20 ping 127.0.0.1 //創建進程時指定優先級
renice -n 0 PID
例:renice -n 0 26715 //修改一個現有進程的優先級

註意:root用戶可以在優先級的範圍內隨意修改,
普通用戶只能把優先級調低,普通用戶不能指定小於0的優先級

前臺作業後臺作業
創建時命令後跟上“&”,創建後臺作業
jobs //查看後臺作業
fg 後臺作業編號 //將後臺作業調到前臺
ctrl+z //將已經觸發的前臺作業調到後臺,後臺作業暫停
bg //讓後臺作業繼續運行

例:
ping 127.0.0.1 > /dev/null & //創建
jobs //查看
fg 3 //將3號作業調到前臺
ctrl+z //將已經3號前臺作業調到後臺並暫停作業
jobs //查看運行的狀態
bg //讓後臺作業繼續運行
jobs //查看運行狀態

明天繼續。。。

linux 基礎知識(五)