Linux学习笔记

来源:互联网 发布:淘宝网服务中心 编辑:程序博客网 时间:2024/06/10 16:21

*** 本文为学习笔记,文中内容均出自[鸟哥的私房菜](http://linux.vbird.org)。


tar –exclude=[filename]

假設我們想要打包 /etc/ /root 這幾個重要的目錄,但卻不想要打包 /root/etc* 開頭的檔案,因為該檔案都是剛剛我們才建立的備份檔嘛! 而且假設這個新的打包檔案要放置成為 /root/system.tar.bz2 ,當然這個檔案自己不要打包自己 (因為這個檔案放置在 /root 底下啊!),此時我們可以透過 –exclude 的幫忙! 那個 exclude 就是不包含的意思!所以你可以這樣做:

[root@study ~]# tar -jcv -f /root/system.tar.bz2 –exclude=/root/etc* \
> –exclude=/root/system.tar.bz2 /etc /root


cpio

範例:找出 /boot 底下的所有檔案,然後將他備份到 /tmp/boot.cpio 去!
[root@study ~]# cd /
[root@study /]# find boot -print
boot
boot/grub
boot/grub/splash.xpm.gz
….(以下省略)….
# 透過 find 我們可以找到 boot 底下應該要存在的檔名!包括檔案與目錄!但請千萬不要是絕對路徑!

[root@study /]# find boot | cpio -ocvB > /tmp/boot.cpio
[root@study /]# ll -h /tmp/boot.cpio
-rw-r–r–. 1 root root 108M Jul 3 00:05 /tmp/boot.cpio
[root@study ~]# file /tmp/boot.cpio
/tmp/boot.cpio: ASCII cpio archive (SVR4 with no CRC)

我們使用 find boot 可以找出檔名,然後透過那條管線 (|, 亦即鍵盤上的 shift+\ 的組合), 就能將檔名傳給 cpio 來進行處理!最終會得到 /tmp/boot.cpio 那個檔案喔!你可能會覺得奇怪,為啥鳥哥要先轉換目錄到 / 再去找 boot 呢? 為何不能直接找 /boot 呢?這是因為 cpio 很笨!它不會理會你給的是絕對路徑還是相對路徑的檔名,所以如果你加上絕對路徑的 / 開頭, 那麼未來解開的時候,它就一定會覆蓋掉原本的 /boot 耶!那就太危險了!這個我們在 tar 也稍微講過那個 -P 的選項!!


干嘛学习shell scripts

这是个好问题:『我又干嘛一定要学shell script ?我又不是资讯人,没有写程式的概念, 那我干嘛还要学shell script 呢?不要学可不可以啊?』呵呵~如果Linux 对你而言, 你只是想要『会用』而已,那么,不需要学shell script 也还无所谓,这部分先给他跳过去, 等到有空的时候,再来好好的瞧一瞧。但是,如果你是真的想要玩清楚Linux 的来龙去脉, 那么shell script 就不可不知,为什么呢?因为:

  • 自动化管理的重要依据

不用鸟哥说你也知道,管理一部主机真不是件简单的事情,每天要进行的任务就有:查询登录档、追踪流量、监控使用者使用主机状态、主机各项硬体设备状态、 主机软体更新查询、更不要说得应付其他使用者的突然要求了。而这些工作的进行可以分为: (1)自行手动处理,或是(2)写个简单的程式来帮你每日『自动处理分析』这两种方式,你觉得哪种方式比较好?当然是让系统自动工作比较好,对吧!呵呵~这就得要良好的shell script 来帮忙的啦!

  • 追踪与管理系统的重要工作

虽然我们还没有提到服务启动的方法,不过,这里可以先提一下,我们CentOS 6.x 以前的版本中,系统的服务(services) 启动的介面是在/etc/init.d/ 这个目录下,目录下的所有档案都是scripts ; 另外,包括开机(booting) 过程也都是利用shell script 来帮忙搜寻系统的相关设定资料, 然后再代入各个服务的设定参数啊!举例来说,如果我们想要重新启动系统登录档, 可以使用:『/etc/init.d/rsyslogd restart』,那个rsyslogd 档案就是script 啦!

另外,鸟哥曾经在某一代的Fedora 上面发现,启动MySQL 这个资料库服务时,确实是可以启动的, 但是萤幕上却老是出现『failure』!后来才发现,原来是启动MySQL 那个script 会主动的以『空的密码』去尝试登入MySQL ,但为了安全性鸟哥修改过MySQL 的密码啰~当然就登入失败~ 后来改了改script ,就略去这个问题啦!如此说来, script 确实是需要学习的啊!

时至今日,虽然/etc/init.d/* 这个脚本启动的方式(systemV) 已经被新一代的systemd 所取代(从CentOS 7 开始), 但是很多的个别服务在管理他们的服务启动方面,还是使用shell script 的机制喔!所以,最好还是能够熟悉啦!

  • 简单入侵侦测功能

当我们的系统有异状时,大多会将这些异状记录在系统记录器,也就是我们常提到的『系统登录档』,那么我们可以在固定的几分钟内主动的去分析系统登录档,若察觉有问题,就立刻通报管理员,或者是立刻加强防火墙的设定规则,如此一来,你的主机可就能够达到『自我保护』的聪明学习功能啦~举例来说,我们可以通过shell script去分析『当该封包尝试几次还是连线失败之后,就予以抵挡住该IP』之类的举动,例如鸟哥写过一个关于抵挡砍站软体的shell script,就是用这个想法去达成的呢!

  • 连续指令单一化

其实,对于新手而言, script最简单的功能就是:『汇整一些在command line下达的连续指令,将他写入scripts当中,而由直接执行scripts来启动一连串的command line指令输入!』例如:防火墙连续规则(iptables),开机载入程序的项目(就是在/etc/rc.d/rc.local里头的资料) ,等等都是相似的功能啦!其实,说穿了,如果不考虑program的部分,那么scripts也可以想成『仅是帮我们把一大串的指令汇整在一个档案里面,而直接执行该档案就可以执行那一串又臭又长的指令段!』就是这么简单啦!

  • 简易的资料处理

由前一章正规表示法的awk程式说明中,你可以发现, awk可以用来处理简单的数据资料呢!例如薪资单的处理啊等等的。shell script的功能更强大,例如鸟哥曾经用shell script直接处理数据资料的比对啊,文字资料的处理啊等等的,撰写方便,速度又快(因为在Linux效能较佳),真的是很不错用的啦!

举例来说,鸟哥每学期都得要以学生的学号来建立他们能够操作Linux 的系统帐号,然后每个帐号还得要能够有磁碟容量的限制(quota) 以及相关的设定等等, 那因为学校的校务系统提供的资料都是一整串学生资讯,并没有单纯的学号栏位,所以鸟哥就得要透过前几章的方法搭配shell script 来自动处理相关设定流程, 这样才不会每学期都头疼一次啊!

  • 跨平台支援与学习历程较短

    几乎所有的Unix Like 上面都可以跑shell script ,连MS Windows 系列也有相关的script 模拟器可以用, 此外, shell script 的语法是相当亲和的,看都看的懂得文字(虽然是英文),而不是机器码, 很容易学习~这些都是你可以加以考量的学习点啊!

上面这些都是你考虑学习shell script 的特点~此外, shell script 还可以简单的以vim 来直接编写,实在是很方便的好东西!所以,还是建议你学习一下啦。

不过,虽然shell script号称是程式(program) ,但实际上, shell script处理资料的速度上是不太够的。因为shell script用的是外部的指令与bash shell的一些预设工具,所以,他常常会去呼叫外部的函式库,因此,运算速度上面当然比不上传统的程式语言。所以啰,shell script用在系统管理上面是很好的一项工具,但是用在处理大量数值运算上,就不够好了,因为Shell scripts的速度较慢,且使用的CPU资源较多,造成主机资源的分配不良。还好,我们通常利用shell script来处理伺服器的侦测,倒是没有进行大量运算的需求啊!所以不必担心的啦!