一篇帶給你Linux磁盤管理和Shell編程
磁盤管理
Linux磁盤管理常用三個命令為df、du和fdisk。
列出文件系統(tǒng)的磁盤使用狀況
列出文件系統(tǒng)的磁盤使用狀況 - 「df」。
- 文件系統(tǒng) 容量 已用 可用 已用% 掛載點
- udev 1.9G 0 1.9G 0% /dev
- tmpfs 393M 6.3M 386M 2% /run
- /dev/sda1 19G 13G 5.5G 69% /
- tmpfs 2.0G 300K 2.0G 1% /dev/shm
- tmpfs 5.0M 4.0K 5.0M 1% /run/lock
- tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
- tmpfs 393M 4.0K 393M 1% /run/user/108
- tmpfs 393M 60K 393M 1% /run/user/1000
- /dev/sr0 1.6G 1.6G 0 100% /media/maoli/Ubuntu 16.04.6 LTS amd64
磁盤分區(qū)表操作
磁盤分區(qū)表操作 - 「fdisk」。
- maoli@ubuntu:~$ sudo fdisk -l
- [sudo] maoli 的密碼:
- Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
- Units: sectors of 1 * 512 = 512 bytes
- Sector size (logical/physical): 512 bytes / 512 bytes
- I/O size (minimum/optimal): 512 bytes / 512 bytes
- Disklabel type: dos
- Disk identifier: 0xdc219461
- 設(shè)備 啟動 Start 末尾 扇區(qū) Size Id 類型
- /dev/sda1 * 2048 39942143 39940096 19G 83 Linux
- /dev/sda2 39944190 41940991 1996802 975M 5 擴展
- /dev/sda5 39944192 41940991 1996800 975M 82 Linux 交換 / Solaris
磁盤分區(qū)工具
磁盤分區(qū)工具 - 「parted」。
格式化文件系統(tǒng)
格式化文件系統(tǒng) - 「mkfs」。
- maoli@ubuntu:~$ mkfs -t ext4 -v /dev/sdb
- -t - 指定文件系統(tǒng)的類型。
- -c - 創(chuàng)建文件系統(tǒng)時檢查磁盤損壞情況。
- -v - 顯示詳細信息。
文件系統(tǒng)檢查
文件系統(tǒng)檢查 - 「fsck」。
轉(zhuǎn)換或拷貝文件
轉(zhuǎn)換或拷貝文件 - 「dd」。
掛載/卸載
掛載/卸載 - 「mount」 / 「umount」。
創(chuàng)建/激活/關(guān)閉交換分區(qū)
創(chuàng)建/激活/關(guān)閉交換分區(qū) - 「mkswap」 / 「swapon」 / 「swapoff」。
參考菜鳥教程:“https://www.runoob.com/linux/linux-filesystem.html”
Shell
Shell是一個連接用戶和操作系統(tǒng)的應(yīng)用程序,它提供了人機交互的界面(接口),用戶通過這個界面訪問操作系統(tǒng)內(nèi)核的服務(wù)。Shell腳本是一種為Shell編寫的腳本程序,我們可以通過Shell腳本來進行系統(tǒng)管理,同時也可以通過它進行文件操作。
互聯(lián)網(wǎng)上有大量關(guān)于Shell腳本的相關(guān)知識,我不打算再此對Shell腳本做一個全面系統(tǒng)的講解,我們通過下面的代碼來感性的認識下Shell腳本就行了。
新建Shell腳本
打開文本編輯器(可以使用 vi/vim 命令來創(chuàng)建文件),新建一個文件 test.sh,擴展名為 sh(sh代表shell)。
- maoli@ubuntu:~$ vim test.sh
- #!/bin/bash
- echo "Hello World !"
輸入一個echo "Hello World !",這個語法和php很相似。運行一個sh需用 chmod +x腳本具有執(zhí)行權(quán)限
- maoli@ubuntu:~$ chmod +x ./test.sh
- maoli@ubuntu:~$ ./test.sh
- Hello World !
變量
變量名不加美元符號($,PHP語言中變量需要)。比如在shell中 定義變量name = Runsen,而在php就是$name = Runsen使用一個定義過的變量,只要在變量名前面加美元符號即可,如:$name或者${name}。變量名外面的花括號是可選的,加不加都行。
變量支持字符串類型,浮點等類型,常見有這 3 個前綴:
- unset:刪除變量
- readonly:標記只讀變量
- export:指定全局變量
- #!/bin/bash
- # 定義普通變量,沒有特殊字符或者空格,可以不用引號
- CITY=Dongguan
- # 定義全局變量
- export NAME=Runsen
- # 定義只讀變量
- readonly AGE=20
- # 打印變量的值
- echo $CITY
- echo $NAME
- echo $AGE
- # 刪除 CITY 變量
- unset CITY
- # 不會輸出 Dongguan
- echo $CITY
預(yù)定義變量
預(yù)定義變量常用來獲取命令行的輸入,有下面這些:
- $0 :腳本文件名
- $1-9 :第 1-9 個命令行參數(shù)名
- $# :命令行參數(shù)個數(shù)
- $@ :所有命令行參數(shù)
- $* :所有命令行參數(shù)
- $? :前一個命令的退出狀態(tài),可用于獲取函數(shù)返回值
- $$ :執(zhí)行的進程 ID
一個例子:
- #!/bin/bash
- echo "\$0 = $0"
- echo "\$1 = $1"
- echo "\$2 = $2"
- echo "\$# = $#"
- echo "\$@ = $@"
- echo "\$* = $*"
- echo "\$$ = $$"
- echo "\$? = $?"
執(zhí)行./hello.sh 1 2 3 4 5 的結(jié)果:
- # 程序名
- $0 = ./hello.sh
- # 第一個參數(shù)
- $1 = 1
- # 第二個參數(shù)
- $2 = 2
- # 一共有 5 個參數(shù)
- $# = 5
- # 打印出所有參數(shù)
- $@ = 1 2 3 4 5
- # 打印出所有參數(shù)
- $* = 1 2 3 4 5
- # 進程 ID
- $$ = 9450
- # 之前沒有執(zhí)行其他命令或者函數(shù)
- $? = 0
if語句
「sh的流程控制不可為空」
- #!/bin/bash
- read VAR
- # 下面這兩種判斷方法都可以,使用 [] 注意左右加空格
- #if test $VAR -eq 10
- if [ $VART -eq 10 ]
- then
- echo "true"
- else
- echo "false"
- fi
read 的方法就python中的input,寫成一行(適用于終端命令提示符):
- if [ $VART -eq 10 ]; then echo "true"; else echo "false";fi
for 循環(huán)
for 循環(huán)和Python沒有什么區(qū)別,挺簡單的
- # 普通 for 循環(huán)
- for ((i = 1; i <= 3; i++))
- do
- echo $i
- done
- # loop 依次代表每個元素
- for loop in 1 2 3 4 5
- do
- echo "The value is: $loop"
- done
- # VAR 依次代表每個元素 ,{}產(chǎn)生連續(xù)數(shù)字
- for VAR in {1..3}
- do
- echo $VAR
- done
- #也可以寫成一行,方便在命令行直接運行,注意空格和;號:
- maoli@ubuntu:~$ for VAR in {1..3}; do echo $VAR; done
- 1
- 2
- 3
printf打印
printf 命令模仿 C 程序庫(library)里的 printf() 程序, 這里補充-e開啟轉(zhuǎn)義\c不換行,其他和Python一樣。
- maoli@ubuntu:~$ echo "It is a test"
- It is a test
- maoli@ubuntu:~$ echo -e "OK! \n"
- OK!
- maoli@ubuntu:~$ printf "%-10s %-8s %-4s\n" 姓名 性別 體重kg
- 姓名 性別 體重kg
- maoli@ubuntu:~$ printf "%-10s %-8s %-4.2f\n" Runsen 男 65
- Runsen 男 65.00
test 檢查
Shell中的 test 命令用于檢查某個條件是否成立,它可以進行數(shù)值、字符和文件三個方面的測試。
比如下判斷兩個字符串是否相同t
- num1="Runsen"
- num2="Runsen"
- if test $num1 = $num2
- then
- echo '兩個字符串相等!'
- else
- echo '兩個字符串不相等!'
- fi
- 兩個字符串相等!
Shell 函數(shù)
shell中函數(shù)的定義格式如下:
- #!/bin/bash
- demoFun(){
- echo "這是我的第一個 shell 函數(shù)!"
- }
- echo "-----函數(shù)開始執(zhí)行-----"
- demoFun
- echo "-----函數(shù)執(zhí)行完畢-----"
- -----函數(shù)開始執(zhí)行-----
- 這是我的第一個 shell 函數(shù)!
- -----函數(shù)執(zhí)行完畢-----
shell實例
求和
例子1:輸入兩個整數(shù)m和n,計算從m到n的整數(shù)求和的結(jié)果。
- #!/usr/bin/bash
- printf 'm = '
- read m
- printf 'n = '
- read n
- a=$m
- sum=0
- while [ $a -le $n ]
- do
- sum=$[ sum + a ]
- a=$[ a + 1 ]
- done
- echo '結(jié)果: '$sum
創(chuàng)建文件夾和文件
例子2:自動創(chuàng)建文件夾和指定數(shù)量的文件。
- #!/usr/bin/bash
- printf '輸入文件名: '
- read file
- printf '輸入文件數(shù)量(<1000): '
- read num
- if [ $num -ge 1000 ]
- then
- echo '文件數(shù)量不能超過1000'
- else
- if [ -e $dir -a -d $dir ]
- then
- rm -rf $dir
- else
- if [ -e $dir -a -f $dir ]
- then
- rm -f $dir
- fi
- fi
- mkdir -p $dir
- index=1
- while [ $index -le $num ]
- do
- if [ $index -lt 10 ]
- then
- pre='00'
- elif [ $index -lt 100 ]
- then
- pre='0'
- else
- pre=''
- fi
- touch $dir'/'$file'_'$pre$index
- index=$[ index + 1 ]
- done
- fi
【編輯推薦】