服务器之家:专注于服务器技术及软件下载分享
分类导航

Linux|Centos|Ubuntu|系统进程|Fedora|注册表|Bios|Solaris|Windows7|Windows10|Windows11|windows server|

服务器之家 - 服务器系统 - Linux - 一篇带给你Linux磁盘管理和Shell编程

一篇带给你Linux磁盘管理和Shell编程

2020-11-24 23:52Python之王小sen Linux

Shell是一个连接用户和操作系统的应用程序,它提供了人机交互的界面(接口),用户通过这个界面访问操作系统内核的服务。Shell脚本是一种为Shell编写的脚本程序,我们可以通过Shell脚本来进行系统管理,同时也可以通过它进行文件

一篇带给你Linux磁盘管理和Shell编程

 磁盘管理

Linux磁盘管理常用三个命令为df、du和fdisk。

列出文件系统的磁盘使用状况

列出文件系统的磁盘使用状况 - 「df」。

  1. 文件系统        容量  已用  可用 已用% 挂载点 
  2. udev            1.9G     0  1.9G    0% /dev 
  3. tmpfs           393M  6.3M  386M    2% /run 
  4. /dev/sda1        19G   13G  5.5G   69% / 
  5. tmpfs           2.0G  300K  2.0G    1% /dev/shm 
  6. tmpfs           5.0M  4.0K  5.0M    1% /run/lock 
  7. tmpfs           2.0G     0  2.0G    0% /sys/fs/cgroup 
  8. tmpfs           393M  4.0K  393M    1% /run/user/108 
  9. tmpfs           393M   60K  393M    1% /run/user/1000 
  10. /dev/sr0        1.6G  1.6G     0  100% /media/maoli/Ubuntu 16.04.6 LTS amd64 

磁盘分区表操作

磁盘分区表操作 - 「fdisk」。

  1. maoli@ubuntu:~$ sudo fdisk -l 
  2. [sudo] maoli 的密码:  
  3.  
  4. Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors 
  5. Units: sectors of 1 * 512 = 512 bytes 
  6. Sector size (logical/physical): 512 bytes / 512 bytes 
  7. I/O size (minimum/optimal): 512 bytes / 512 bytes 
  8. Disklabel type: dos 
  9. Disk identifier: 0xdc219461 
  10.  
  11. 设备       启动    Start   末尾   扇区  Size Id 类型 
  12. /dev/sda1  *        2048 39942143 39940096   19G 83 Linux 
  13. /dev/sda2       39944190 41940991  1996802  975M  5 扩展 
  14. /dev/sda5       39944192 41940991  1996800  975M 82 Linux 交换 / Solaris 

磁盘分区工具

磁盘分区工具 - 「parted」。

格式化文件系统

格式化文件系统 - 「mkfs」。

  1. maoli@ubuntu:~$ mkfs -t ext4 -v /dev/sdb 
  • -t - 指定文件系统的类型。
  • -c - 创建文件系统时检查磁盘损坏情况。
  • -v - 显示详细信息。

文件系统检查

文件系统检查 - 「fsck」。

转换或拷贝文件

转换或拷贝文件 - 「dd」。

挂载/卸载

挂载/卸载 - 「mount」 / 「umount」。

创建/激活/关闭交换分区

创建/激活/关闭交换分区 - 「mkswap」 / 「swapon」 / 「swapoff」。

参考菜鸟教程:“https://www.runoob.com/linux/linux-filesystem.html”

Shell

Shell是一个连接用户和操作系统的应用程序,它提供了人机交互的界面(接口),用户通过这个界面访问操作系统内核的服务。Shell脚本是一种为Shell编写的脚本程序,我们可以通过Shell脚本来进行系统管理,同时也可以通过它进行文件操作。

互联网上有大量关于Shell脚本的相关知识,我不打算再此对Shell脚本做一个全面系统的讲解,我们通过下面的代码来感性的认识下Shell脚本就行了。

新建Shell脚本

打开文本编辑器(可以使用 vi/vim 命令来创建文件),新建一个文件 test.sh,扩展名为 sh(sh代表shell)。

  1. maoli@ubuntu:~$ vim test.sh 
  2.  
  3. #!/bin/bash 
  4. echo "Hello World !" 

输入一个echo "Hello World !",这个语法和php很相似。运行一个sh需用 chmod +x脚本具有执行权限

  1. maoli@ubuntu:~$ chmod +x ./test.sh 
  2. maoli@ubuntu:~$ ./test.sh  
  3. Hello World ! 

变量

变量名不加美元符号($,PHP语言中变量需要)。比如在shell中 定义变量name = Runsen,而在php就是$name = Runsen使用一个定义过的变量,只要在变量名前面加美元符号即可,如:$name或者${name}。变量名外面的花括号是可选的,加不加都行。

变量支持字符串类型,浮点等类型,常见有这 3 个前缀:

  • unset:删除变量
  • readonly:标记只读变量
  • export:指定全局变量
  1. #!/bin/bash  
  2.  
  3. # 定义普通变量,没有特殊字符或者空格,可以不用引号 
  4. CITY=Dongguan 
  5.  
  6. # 定义全局变量 
  7. export NAME=Runsen 
  8.  
  9. # 定义只读变量 
  10. readonly AGE=20 
  11.  
  12. # 打印变量的值 
  13. echo $CITY 
  14. echo $NAME 
  15. echo $AGE 
  16.  
  17. # 删除 CITY 变量 
  18. unset CITY 
  19. # 不会输出 Dongguan 
  20. echo $CITY 

预定义变量

预定义变量常用来获取命令行的输入,有下面这些:

  1. $0 :脚本文件名 
  2. $1-9 :第 1-9 个命令行参数名 
  3. $# :命令行参数个数 
  4. $@ :所有命令行参数 
  5. $* :所有命令行参数 
  6. $? :前一个命令的退出状态,可用于获取函数返回值 
  7. $$ :执行的进程 ID 

一个例子:

  1. #!/bin/bash  
  2. echo "\$0 = $0" 
  3. echo "\$1 = $1" 
  4. echo "\$2 = $2" 
  5. echo "\$# = $#" 
  6. echo "\$@ = $@" 
  7. echo "\$* = $*" 
  8. echo "\$$ = $$" 
  9. echo "\$? = $?" 

执行./hello.sh 1 2 3 4 5 的结果:

  1. # 程序名 
  2. $0 = ./hello.sh 
  3. # 第一个参数 
  4. $1 = 1 
  5. # 第二个参数 
  6. $2 = 2 
  7. # 一共有 5 个参数 
  8. $# = 5 
  9. # 打印出所有参数 
  10. $@ = 1 2 3 4 5 
  11. # 打印出所有参数 
  12. $* = 1 2 3 4 5 
  13. # 进程 ID 
  14. $$ = 9450 
  15. # 之前没有执行其他命令或者函数 
  16. $? = 0 

if语句

「sh的流程控制不可为空」

  1. #!/bin/bash  
  2. read VAR 
  3. # 下面这两种判断方法都可以,使用 [] 注意左右加空格 
  4. #if test $VAR -eq 10 
  5. if [ $VART -eq 10 ] 
  6. then 
  7.     echo "true" 
  8. else 
  9.     echo "false" 
  10. fi 

read 的方法就python中的input,写成一行(适用于终端命令提示符):

  1. if [ $VART -eq 10 ]; then echo "true"else echo "false";fi 

for 循环

for 循环和Python没有什么区别,挺简单的

  1. # 普通 for 循环 
  2. for ((i = 1; i <= 3; i++)) 
  3. do 
  4.     echo $i 
  5. done 
  6.  
  7. # loop 依次代表每个元素  
  8. for loop in 1 2 3 4 5 
  9. do 
  10.     echo "The value is: $loop" 
  11. done 
  12.  
  13. # VAR 依次代表每个元素 ,{}产生连续数字 
  14. for VAR in {1..3} 
  15. do 
  16.     echo $VAR 
  17. done 
  18.  
  19. #也可以写成一行,方便在命令行直接运行,注意空格和;号: 
  20. maoli@ubuntu:~$ for VAR in {1..3}; do  echo $VAR; done 

printf打印

printf 命令模仿 C 程序库(library)里的 printf() 程序, 这里补充-e开启转义\c不换行,其他和Python一样。

  1. maoli@ubuntu:~$ echo "It is a test" 
  2. It is a test 
  3. maoli@ubuntu:~$ echo -e "OK! \n" 
  4. OK!  
  5.  
  6. maoli@ubuntu:~$ printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg   
  7. 姓名     性别   体重kg 
  8. maoli@ubuntu:~$ printf "%-10s %-8s %-4.2f\n" Runsen 男 65 
  9. Runsen     男      65.00 

test 检查

Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。

一篇带给你Linux磁盘管理和Shell编程

比如下判断两个字符串是否相同t

  1. num1="Runsen" 
  2. num2="Runsen" 
  3. if test $num1 = $num2 
  4. then 
  5.     echo '两个字符串相等!' 
  6. else 
  7.     echo '两个字符串不相等!' 
  8. fi 
  9. 两个字符串相等! 

Shell 函数

shell中函数的定义格式如下:

  1. #!/bin/bash 
  2.  
  3.  
  4. demoFun(){ 
  5.     echo "这是我的第一个 shell 函数!" 
  6. echo "-----函数开始执行-----" 
  7. demoFun 
  8. echo "-----函数执行完毕-----" 
  9.  
  10. -----函数开始执行----- 
  11. 这是我的第一个 shell 函数! 
  12. -----函数执行完毕----- 

shell实例

求和

例子1:输入两个整数m和n,计算从m到n的整数求和的结果。

  1. #!/usr/bin/bash 
  2. printf 'm = ' 
  3. read m 
  4. printf 'n = ' 
  5. read n 
  6. a=$m 
  7. sum=0 
  8. while [ $a -le $n ] 
  9. do 
  10.     sum=$[ sum + a ] 
  11.     a=$[ a + 1 ] 
  12. done 
  13. echo '结果: '$sum 

创建文件夹和文件

例子2:自动创建文件夹和指定数量的文件。

  1. #!/usr/bin/bash 
  2. printf '输入文件名: ' 
  3. read file 
  4. printf '输入文件数量(<1000): ' 
  5. read num 
  6. if [ $num -ge 1000 ] 
  7. then 
  8.     echo '文件数量不能超过1000' 
  9. else 
  10.     if [ -e $dir -a -d $dir ] 
  11.     then 
  12.         rm -rf $dir 
  13.     else 
  14.         if [ -e $dir -a -f $dir ] 
  15.         then 
  16.             rm -f $dir 
  17.         fi 
  18.     fi 
  19.     mkdir -p $dir 
  20.     index=1 
  21.     while [ $index -le $num ] 
  22.     do 
  23.         if [ $index -lt 10 ] 
  24.         then 
  25.             pre='00' 
  26.         elif [ $index -lt 100 ] 
  27.         then 
  28.             pre='0' 
  29.         else 
  30.             pre='' 
  31.         fi 
  32.         touch $dir'/'$file'_'$pre$index 
  33.         index=$[ index + 1 ] 
  34.     done 
  35. fi 

延伸 · 阅读

精彩推荐
  • LinuxLinux系统下无法卸载挂载的目录怎么办?

    Linux系统下无法卸载挂载的目录怎么办?

    我们在日常运维中经常性会遇到需要进行磁盘的扩容、卸载、挂载等操作,但是有时候这个系统上跑的应用并没有停止或者有其他的运维同事在操作这个目...

    今日头条10302020-12-30
  • Linux在Linux系统中创建新的亚马逊AWS访问密钥的方法

    在Linux系统中创建新的亚马逊AWS访问密钥的方法

    如何在Linux系统中创建新的亚马逊AWS访问密钥?我在配置一个需要访问我的亚马逊AWS帐号的应用时被要求提供AWS访问密钥ID和秘密访问密钥,我怎样创建一个...

    Linux教程网6182019-10-30
  • Linuxssh 登录很慢该如何解决

    ssh 登录很慢该如何解决

    这篇文章主要介绍了ssh 登录很慢该如何解决的相关资料,这里提供了两种方法,DNS反向解析及关闭ssh的gssapi认证的解决办法,需要的朋友可以参考下...

    linuxeye9922021-12-16
  • Linuxlinux驱动程序开发详细介绍

    linux驱动程序开发详细介绍

    前提,一般来说内核代码的错误可能会引起一个用户进程的死亡,或者整个系统的瘫痪,更严重的后果,可能导致磁盘损伤~因此建议最好有一台实验机进行...

    Linux教程网5392019-12-17
  • Linuxlinux top命令详解

    linux top命令详解

    这篇文章主要介绍了linux top命令详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    sparkdev5622022-03-01
  • Linux理解 Linux/Unix 登录脚本的技巧

    理解 Linux/Unix 登录脚本的技巧

    有一些常见的情况,例如从Debian的包管理程序到Iaas的管理中,很多任务需要设置环境变量才能正常运行。 有时,程序通常只需要在 登陆时运行一次,例如...

    未知1042023-05-12
  • Linux将 Linux 终端与 Nautilus 文件管理器结合起来

    将 Linux 终端与 Nautilus 文件管理器结合起来

    Nautilus 是 GNOME 桌面环境中的图形化文件浏览器。你可以使用它来访问和管理系统中的文件和文件夹。 尽管并非所有人都喜欢使用终端来管理文件和目录,...

    未知812023-08-08
  • Linuxlinux设置tomcat自启动的方法

    linux设置tomcat自启动的方法

    这篇文章主要介绍了linux设置tomcat自启动的方法,需要的朋友可以参考下...

    Linux教程网8512021-10-10