《Linux命令行与shell脚本编程大全》23章24章

第二十三章 使用其他shell

bash shell是linux发行版中最广泛使用的shell。但是它并不是唯一的选择,还有其他的shell可以供你选择。

23.1 什么是dash shell

百度百科上说:Dash shell是一个Unix shell,比Bash shell小的多,符合POSIX标准。

下面是书上的:

dash shell是作为debian linux发行版的一部分开发的,主要出现在Ubuntu linux发行版中。它是Bourne shell的精简版。所以它并不像bashshell一样支持那么多功能,这可能会给脚本编程带来一些问题。

用的少,就不展开介绍了。

23.4 zsh shell

是由Paul Falstad开发的已个开源Unix shell。它汲取了所有现在shell的设计理念并增加了许多独到的功能,为程序员创建了一个无所不能的高级shell。

下面的zsh shell的一些独特的功能:

1)改进的shell选项处理

2)shell兼容性模式

3)可加载模块(最先进的功能)

zsh shell提供了一组核心内建命令,并提供了添加额外命令模块的能力。

每个命令模块都为特定场景提供了另外一组内建命令。比如网络支持和高级数学功能,你可以只添加你觉得有用的模块。

zsh shell通常会用在编程环境中,因为它为shell脚本程序员提供了许多很好的功能。

它是以可加载的模块来加载单独的代码库,这使得高级函数的使用在命令行上运行命令一样简单。

从复杂的数学算法到网络应用(如FTP HTTP),可加载模块支持许多功能。

这里也不展开介绍了。有人看我再好好写一写。

第二十四章 编写简单的脚本实用工具

演示一些实用的工具

24.1 归档

1,如果备份大量文件最好是创建一个专门的目录(下面这波操作还是很六的)

$sudo mkdir /xcybak

这样子直接拷贝东西进去是会失败的,除非加sudo。

解决方法:可以通过sudo命令或者创建一个用户组的方式,为需要在集中归档目录中创建文件的用户授权。可以创建一个特殊的用户Xcybak

$sudo groupadd Xcybak  // 创建一个用户组。Xcybak  是用户组

$sudo chgrp Xcybak /xcybak  // 改变文件或目录(这里是/xcybak目录)所属的用户组

可以查看一下

$ls-ld /xcybak

$sudo usermod –aG Xcybak xcy //这里的xcy是指当前登录用户。将xcy添加到Xcybak用户组

$sudo chmod 775 /xcybak  //文件属组的权限的7了。xcy用户就可以对/xcybak进行读写了

可以再查看一下

$ls-ld /xcybak

将用户添加到Xcybak组后,用户必须先登出在登入,才能使成员关系生效。

我这里就重启了一下虚拟机。

接下来就可以直接在/xcybak目录下创建文件了。

本人亲测有用。

补充:关于linux用户组、文件权限

1.linux每个用户都必须有一个组,不能独立与组外。

2.文件所有者:一般为文件的创建者

3.文件所在组:用户创建文件后,这个文件所在组就是该用户所在组。可以chgrp去改变用户所在的组。用户所在的组。可以更改

4.其他组:除了上面那两个

5.对于一个文件来说,文件权限分为所有者权限、属组权限、其他权限。可以用chmod改变

6.改变用户组:

在添加用户时,可以指定将该用户添加到哪个组中。

可以用root的管理权限可以改变某个用户所在的组

usermod –g 组名 用户名   // usermod还可以接很多其他的参数

7.查看组信息: cat  /etc/group (字段解释 组名:口令:组标识号GID:组内用户列表)

8.查看用户信息:cat  /etc/passwd

9. 还可以将用户添加到用户组上 $sudo usermod –aG groupname username

一个用户可以添加到多个组上。

24.1.1 代码如下:

配置文件(要备份的文件)。将要备份的目录或文件写在Files_To_Backup文件中

$ cat Files_To_Backup

/home/xcy/shell/

/home/xcy/shellxcy

脚本如下:

[email protected]:~/shell/24zhang$ cat Daily_Archive.sh

#!/bin/bash

DATE=$(date +%y%m%d)

# save file name

FILE=xcybak$DATE.tar.gz

# config file directory

CONFIG_FILE=/xcybak/Files_To_Backup

DESTINATION=/xcybak/$FILE

if [ -f $CONFIG_FILE ]

then

         echo

else

         echo

         echo "$CONFIG_FILE does not exist"

         echo "Backup not completed due ti missing configuration File"

         echo

         exit

fi

FILE_NO=1

# Redirect std input to name of config file

exec < $CONFIG_FILE

read FILE_NAME

while [ $? -eq 0 ]

do

         # make sure file or directory exists

         if [ -f $FILE_NAME -o -d $FILE_NAME ]

         then

                   # add its name to the list

                   FILE_LIST="$FILE_LIST $FILE_NAME"

         else

                   echo

                   echo "$FILE_NAME, does not exist"

                   echo "Obviously, I will not include it in this xcybak"

                   echo "It is listed on line $FILE_NO of the config file"

                   echo

         fi

         FILE_NO=$[ $FILE_NO + 1 ]

         read FILE_NAME

done

echo "Starting xcybak ..."

echo

tar -czf $DESTINATION $FILE_LIST 2> /dev/null

echo "xcybak completed"

echo "Resulting xcybak file is: $DESTINATION"

echo

exit

这个脚本要做的事情就是将Files_To_Backup包含的文件或目录打包压缩起来。保存的名字是当前的时间。

还可以加在cron中。创建按日或按小时备份的文件。

24.2 管理用户账户

不仅仅是添加修改删除账户,还得考虑安全问题,保留工作的需求以及对账户的精确管理。

删除账户时,至少需要四个步骤:

1)获得正确的删除用户账户名

2)杀死正在系统上运行的属于该账户的进程

3)确认系统中属于该账户的所有文件

4)删除该用户账户

可以把它设计成交互式脚本。就不应该放在cron表中。

脚本很长,我就不写了。

24.3 检测磁盘空间

这个工具会帮你找出目录中磁盘空间使用量位居前十名的用户。会生成一个以日期命名的报告。

1.用du命令可以显示单个文件和目录的磁盘使用情况

-s用来总结目录以及的整体使用状况

-S为每个目录和子目录分别提供了总计信息。这个才是我们要的

$sudo du –S /home/xcy/

还可以进行排序,降序排列:

$sudo du –S /home/xcy/ | sort –rn   // -r是逆序,-n是允许按数字排序

下面筛选排名前十的用户列表:

sed编辑器的输出会通过管道输出到gawk命令,然后打印出来

[email protected]:/var$ sudo du -S /var/log/ | sort -rn |

> sed ‘{11,$D; =}‘|  # =是加行号,11行到末尾全部删除

> sed ‘N; s/\n/ /‘|  # N命令用来将行号和文本放在同一行

> gawk ‘{printf $1 ":" "\t" $2 "\t" $3 "\n"}‘

1:      4940         /var/log/

2:      4028         /var/log/vmware-caf/pme

3:      804      /var/log/installer

4:      544           /var/log/upstart

5:      184           /var/log/samba

6:      120           /var/log/apt

7:      40              /var/log/lightdm

8:      16              /var/log/cups

9:      12              /var/log/mysql

10:   12              /var/log/fsck

[email protected]:/var$

下面是真正的脚本:

[email protected]:~/shell/24zhang$ cat  Big_Users.sh

#!/bin/bash

CHECK_DIRECTORIES="/var/log /home"

DATE=$(date +%m%d%y)  # Date for report file

exec > disk_space_$DATE.rpt  # Make report file STDOUT

echo "Top Ten Disk Space Usage"

echo "for $CHECK_DIRECTORIES Directory"

for DIR_CHECK in $CHECK_DIRECTORIES

do

         echo ""

         echo "The $DIR_CHECK Directory:"

         du -S $DIR_CHECK 2>/dev/null |

         sort -rn |

         sed ‘{11,$D; =}‘ |

         sed ‘N; s/\n/ /‘ |

         gawk ‘{printf $1 ":" "\t" $2 "\t" $3 "\n"}‘

done

exit

[email protected]:~/shell/24zhang$

运行:

./Big_User.sh

上面只指定了两个目录/var/log /home,生成的报告在disk_space_$DATE.rpt这里。

这个脚本可以用cron表来实现,让它自动运行。

补充:

1.最近在安装软件时总是会报错

在处理时有错误发生:

open-vm-tools

open-vm-tools-dkms

open-vm-dkms

E: Sub-process /usr/bin/dpkg returned an error code (1)

解决办法:相当于把VM-tools移除了。移除之后不能全屏了,看着很不爽

sudo apt-get autoremove open-vm-dkms open-vm-tools --purge

2. 在shell里面,“%”、“#”、“*” 是什么意思,如${a%#.}、${a%%.*}、${a##.*}

${varible##*string} 从左向右截取最后一个string后的字符串

${varible#*string}从左向右截取第一个string后的字符串

${varible%%string*}从右向左截取最后一个string后的字符串

${varible%string*}从右向左截取第一个string后的字符串  {USB2%:*}

“*”只是一个通配符有时可以不要

例子:

$ MYVAR=foodforthought.jpg

$ echo ${MYVAR##*fo}

rthought.jpg

$ echo ${MYVAR#*fo}

odforthought.jpg

时间: 2024-10-30 16:18:58

《Linux命令行与shell脚本编程大全》23章24章的相关文章

《Linux命令行与shell脚本编程大全》 第六章环境变量

很多程序和脚本都通过环境变量来获取系统信息.存储临时数据和配置信息. 6.1 什么是环境变量: bash shell用一个叫环境变量(environment variable)的特性来存储有关shell会话和工作环境的信息. 这项特性允许在内存中存储数据,以便程序能轻松访问到它们. 在bash shell中,分两类: 全局变量:对于shell会话和所有生成的子shell都是可见的 局部变量:只对创建的它们的shell可见 6.1.1全局环境变量 查看全局变量,  $env    $printen

《Linux命令行与shell脚本编程大全》第十三章 更多的结构化命令

本章讨论bash shell的循环命令for.while和until 13.1 for命令 重复执行一系列命令在编程中很常见. bash shell提供了for命令,允许你创建一个遍历一系列值的循环.每次迭代都使用其中一个值来执行已定义好的一组命令.下面是基本格式 for var in list do command done 在list参数中需要提供迭代中要用到的一系列值.会依次迭代下去.每次迭代中,var会包含列表中要用到的一系列值. do 和 done直接输入的命令可以是一条或多条标准的b

《Linux命令行与shell脚本编程大全》 第三章 学习笔记

第三章:基本的bash shell命令 bash程序使用命令行参数来修改所启动shell的类型 参数 描述 -c string 从string中读取命令并处理他们 -r 启动限制性shell,限制用户在默认目录下活动 -i 启动交互性shell,允许用户输入 -s 从标准输入读取命令 环境变量PS1.PS2 PS1:控制默认命令行提示符格式 PS2:控制后续命令行提示符格式   bash shell提示符字符串中使用的特殊字符 字符 描述 \a 报警字符 \d “日 月 年”格式显示的日期 \e

《Linux命令行与shell脚本编程大全》第十七章 创建函数

可以将shell脚本代码放进函数中封装起来,这样就能在脚本中的任何地方多次使用它了. 17.1 基本的脚本函数 函数:是一个脚本代码块,可以为其命名并在代码中任何位置重用. 17.1.1 创建函数 有两种格式:name 是函数名 1) function name {          commands } 2)这种就比较接近c语言风格了 name() {          commands } 17.1.2 使用函数 跟其他shell命令一样,在行中指定函数名就好了. 在函数定义前使用函数,会收

《Linux命令行与shell脚本编程大全》 第四章

4.1 监测程序 1. ps  默认只显示运行在当前控制台下的属于当前用户的进程.  可以接很多选项,比如 -A表示所有进程  -e等. 2. ps -l  查看进程更多信息 UID:启动这些进程的用户 PID:进程的进程ID PPID:父进程的进程ID C:进程生命周期中的CPU利用率 TTY:进程启动时的终端设备 TIME:运行进程需要的累计CPU时间 CMD:启动的程序名称 PRI:进程的优先级(数字越大代表越低的优先级) ADDR:进程的内存地址 F:内核分配给进程的系统标记 S:进程的

《Linux命令行与shell脚本编程大全》学习笔记(转)

第一部分:Linux命令行<Linux命令行与shell脚本编程大全> 第一章:初识Linux shell<Linux命令行与shell脚本编程大全> 第二章:走进shell<Linux命令行与shell脚本编程大全> 第三章:基本的bash shell命令<Linux命令行与shell脚本编程大全> 第四章:更多的bash shell命令<Linux命令行与shell脚本编程大全> 第五章:使用Linux环境变量<Linux命令行与she

&lt;&lt;linux命令行与shell脚本编程大全&gt;&gt;学习笔记(1)

一章初识linux shell 一.什么是linux 1.linux系统可大致划分为四部分: l Linux内核 l GNU工具组件 l 图形化桌面环境 l 应用软件 在linux系统里,这四部分中的每一部分都扮演着一个特别的角色,但如果将他们分开,每一部分都没太大的作用. 1)探究linux内核 Linux系统的核心是内核,内核控制着计算机系统上的所有硬件和软件,必要时分配硬件,有时需要执行软件. 内核基本负责以下四项主要功能: l 系统内存管理 l 软件程序管理 l 硬件设备管理 l 文件系

【持续更新中】Linux命令行与Shell脚本编程大全(第3版)读书笔记12-20章

<Linux命令行与Shell脚本编程大全(第3版)>读书笔记 第十二章 使用结构化命令 根据条件使脚本跳过某些命令,这样的命令称为结构化命令(structured command).结构化命令允许改变程序执行的顺序. If-then语句: If command Then Commands Fi 如果if后的command执行退出码是0(也就是执行成功了),then后面的语句就会被执行. 也可以写成: If command; then Commands Fi 注意了,if后的command结果

Linux命令行与shell脚本编程大全.第3版(文字版) 超清文字-非扫描版 [免积分、免登录]

此处免费下载,无需账号,无需登录,无需积分.收集自互联网,侵权通知删除. 点击下载:Linux命令行与shell脚本编程大全.第3版 (大小:约22M) 原文地址:https://www.cnblogs.com/pluse/p/9408724.html

《Linux命令行与Shell脚本编程大全第2版.布卢姆》pdf

下载地址:网盘下载 内容简介  · · · · · · 本书是一本关于Linux 命令行与shell 脚本编程的全面教程.全书分为四部分:第一部分介绍Linuxshell 命令行:第二部分介绍shell 脚本编程基础:第三部分深入探讨shell 脚本编程的高级内容:第四部分介绍如何在现实环境中使用shell 脚本.本书不仅涵盖了详尽的动手教程和现实世界中的实用信息,还提供了与所学内容相关的参考信息和背景资料. 本书内容全面,语言简练,示例丰富,适合于linux 系统管理员及Linux 爱好者阅读