解析:-i 等同于 --install,即安装,语法结构为 rpm {-i | --install} [install-options] package_file;
-v 显示安装信息;
-h 显示安装进度。
INSTALL-OPTIONS--nodeps当遇到软件依赖于其它软件而无法安装时,可强制安装--replacefiles在安装过程中,如果遇到某个文件已经存在的情况,可直接覆盖--replacepkgs如果软件已经安装过,可使用该选项重复安装--force强制安装,已存在的文件会被覆盖,已安装过的软件会重新安装--test测试安装,不会真实安装软件,而指示检查安装过程--justdb只更新rpm数据库,当rpm数据库损坏时可使用该选项重新生成相关信息--nosignature略过数字签名的检查--prefix NEWPATH将软件安装到指定的目录--noscripts禁止安装过程中自行执行系统指令......解析:-U 等同于 --upgrade,语法结构为 rpm {-U | --upgrade} [install-options] package_file;
-F 等同于 --freshen,语法结构为 rpm {-F | --freshen} [install-options] package_file
解析:-e 等同于 --erase,语法结构为 rpm {-e | --erase} [erase-options] package_name
解析:-q 等同于 --query,即查询,语法结构为 rpm {-q | --query} [select-options] ...
解析:-f 等同于 --file
解析:-c 等同于 --configfiles
解析:-d 等同于 --docfiles
解析:-i 等同于 --info
解析:-l 等同于 --list
解析:-R 等同于 --requires
解析:-p 等同于 --package,语法结构为 rpm -qp [select-options] package_file
解析:L的意思是link路径已被改变,c是配置文件的意思。
第一列:S-文件的大小是否被改变;M-文档的类型或属性(rwx)是否被改变;5-MD5校验码是否被改变;D-设备的主次代码是否被改变;L-link路径是否被改变;U-文件所属用户是否被改变;G-文件所属用户组是否被改变;T-文件的创建时间是否被改变;P-文件的容量是否被改变。
第二列:c-配置文件;d-文档文件;g-幽灵文件,即该文件不被任何软件所包含;l-许可文件;r-自述文件
本文链接
本文转自:http://www.vpsee.com/2010/08/using-grep-to-recover-text-files/
作为长期的电脑使用者,肯定会有误删文件的经历,在 Mac OS X 和 Windows 上删除的文件都会默认进 “回收站”。在 Linux 上如果事先没有用别名(alias)修改默认的 rm 功能,rm 后文件就会丢失,幸运的是,在一般的删除文件操作中,Linux 并不会立即清空存储该文件的 block 内容,而只会释放该文件所占用的 inode 和 data block,Linux 上 rm 的过程其实就是将 inode bitmap 和 data block bitmap 中的相应标识设为空闲状态的过程,并不涉及到真正的数据,这也是为什么在 Linux 下删除大文件这么快速的原因,因为大文件所占的磁盘根本就没有清空。所以,如果我们能找到文件对应的 inode,由此查到相应的 data block,就可能从磁盘上把已删除的文件恢复出来,很多文件/磁盘恢复工具都是这么做的。
一般来说二进制文件、库文件等删除后都可以从其他 Linux 拷贝恢复,不是很要紧,如果自己辛苦写的脚本或者配置文件误删了就杯具了。误删这种蠢事经常在 VPSee 身上发生,最近一次是在今年年初的时候,开了 screen 多次 ssh 到不同服务器上,在前后切换的过程中删除了一个很肯定的配置文件,后来发现删的文件是对的,可惜在一台错误的服务器上,本来应该在 A 服务器上删除 file.txt 结果在 B 服务器上删除了 file.txt,多个 screen 和 ssh 把自己搞晕了,而且主机名没有安排好,多台机器都是用的 localhost,不利于识别当时的环境。如果使用 Linux 的时候不幸误删了一个文本文件怎么办呢?
先临时建一个文本文件 vpsee.log 做测试,然后删除这个文件:
$ echo "important log file for vpsee.com" > vpsee.log$ cat vpsee.log
important log file for vpsee.com
$ rm vpsee.log
如果能记住刚才删除文件中的某个关键字的话可以用 grep 搜索整个 /dev/sda1,-a 标志位的意思是把 /dev/sda1 这个分区看成是文本形式的(分区本身是二进制形式的),-B 10 -A 100 的意思是如果找到关键字就打印出其前10行和后100行的内容:
# grep -a -B 10 -A 100 'vpsee.com' /dev/sda1 > tmp.txt在一堆 @ 之间可以找到我们刚才删除的内容:
$ vi tmp.txt...
@$^@^@^@^@^@^@^@^@^@^@^@^A^@^@^@^@^@^@^@Ç^@^@^@^A^@^@^@^@^@^@^@^@^@^@^@È^K^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^A^@^@^@^@^@^@^@^Q^@^@^@^C^@^@^@^@^@^@^@^@^@^@^@È^K^@^@×^@
^@^@important log file for vpsee.com
@
@
...
当然,如果误删了二进制、doc、png/jpg/gif 之类的文件,可以用一些第三方 ext2/ext3 文件恢复工具帮助恢复文件,比如 TestDisk, PhotoRec 等。
本文链接
本文转自:http://www.cnblogs.com/fhefh/archive/2011/04/13/2014967.html
在计划好要程序干什么以及如何使用程序的使用变得更加简单易学之后,程序员就必须以计算机能够理解的方式把他的想法记录下来,告诉计算机他想干什么。这就是要用到的所谓的代码。一般按照如下顺序组织自己的思维:
1. 决定让计算机做哪些任务
2. 确定计算机执行任务的顺序
3. 从shell脚本语言中选择适当的命令来执行那些任务
4. 用linux文本编辑器编辑一个shell脚本,并按任务的执行顺序来组织命令
关于编程的几个术语
输送给计算机的单一一条指令称之为命令——command
集合在一起的多个命令称之为代码——code
为了完成某项任务而组织在一起的所有指令统称为程序——program
Linux中bash shell语音保留的关键字:
case
elif
let
clear
else
read
continue
if
then
echo
for in
while
变量
什么是数据?
程序从预付那儿获得的信息成为数据——data。一个好的程序遵从了下面三个步骤:
1. 从硬盘或文件中获得数据
2. 对数据进行某种适当的处理
3. 把数据显示在屏幕上火存放在一个文件中
字符串——string
字符串其实就是多个字母或字符的集合。一个字符即可能是一个连字符,也可能是在键盘上所能发现的任何东西。字符串也可能经由单一字母或字符组成。一个完整的句子可能是一个字符串。事实上,任何字母、空格、甚至是数字的组合,都可以看成是一个字符串。
数——number
一个数可由任何数字组成,如金钱数、某人的年龄或者身高、体重等。数既可以是负数也可以是正数、整数、分数、小数。在复杂一点,数也可以是字符。数的这种双重身份可能让我们感到疑惑,但是它无法欺骗计算机。如果告诉计算机是某个地址或电话号码的一部分,那么它就会把该数当做一个字母或字符。但是,如果让计算机把某数加起来,那么计算机就会把它当做数而不是字符。
理解什么是变量和值
计算机是知道如何区分用户输入的数据和字符串,但对人来说可能就像“迷×魂×汤”。就对我们读者而言,很容易把55-55-55当做是某个人的保险号,而计算机仅把它当做一个数或一个字符串。
当程序要用那个保险号时,它还必须告诉计算机:“现在是用保险号的时候了,你汉子道它放在哪儿了,对吗?它就放在变量名为SSS下了”
所谓的变量——variable,其实就是计算机中某一特定数的值(如保险号)的地方。而输给这个变量名sss的保险号就是一个值。
变量的分类
Linux使用下列两种分类:
局部变量:有程序员自己建立,且仅供程序员所设计的程序使用。
环境变量:由程序员或他人建立,程序员和他人的程序都可以使用。
Linux条件控制语句
我们一生都在决定。如,你想到哪儿去旅游,是去美国,日本还是法国?
决定是其实是一种明智的选择。但是我们得把它们建立在符合某种条件基础上,如我们有足够的资金去旅游吗?如果条件不成立,即使是最让人神往的选择也只是一种空想。
条件
条件是一种必须存在或不存在的状态。如果存在,则条件为真,否则为假。
Linux中,条件存在有如下两种表达形式:
Ø 单一变量
Ø 一个表达式
比如说,把所有的钱放进钱包(wallet)里。Wallet被称为变量,钱包里的钱被称为变量的值。是否去美国夏威夷,得要看自己的钱包中的钱是否足够。如果不够,则去不了。因此,钱包这个变量的值是零,这意味着去美国夏威夷旅游的钱不够,条件为假。
又比如说,钱包里有许多许钱。但对于这次旅行来说这些钱足够吗?这得问问我们自己了,看看钱包里的钱是否大于或等于$1000(旅行所需的money)。这就是一个表达式,它将导致真或假两种结果之一。
用变量表示的条件
一个变量的值要么是真要么是假。这通常用非零表示真,零表示假。下面就介绍确定一个变量的值是真还是假的两种方法。第一种方法显示检查变量的值,如下例所示:
If [$HaveEnoughMoney –eq 1]
程序将用等号算符(- eq)来确定变量的值是真还是假。
如果想判断一个条件是否是真,也可以让程序来检测变量的值是否是假,如下所示:
If [$HaveEnoughMoney – ne 0]
不等于算符(- ne)做出的是一种与逻辑相反的判断。如果用- eq算符,那么程序将检测该变量是否是真。相反,如果用- ne算符,那么程序将检测该变量是否不真,即假。
用表达式表示的条件
条件也可以说一个表达式,它要求程序对信息执行的某种操作。譬如,要求程序检测一个变量(如你的银行存款,O(∩_∩)O)的值是否大于某一个特定数。在这种情况下,一个表达式的结果也只可能有两种:真或假,且只能是其中之一,如下例所示:
If [$BankBalance –gt 3000]
-eq
等于
-gt
大于
-lt
小于
-ne
不等于
-ge
大于或等于
-le
小于或等于
程序检测变量BankBalance的值,看它是否大于3000,而这个表达式只有两种可能性:真或假。如果存款大于3000,则为真;存款小于3000,则为假。
If语句
当需要检测一个条件是真还是假的时候,就可以使用if语句。If语句仅仅是告诉程序:“如果条件为真,就执行这些指令,否则跳过这些指令。”
If语法的规则如下:
If {Condition}
Then
Instrution
fi
一般说来,如果Condition存在(即条件Condition为真),程序则执行项目的Instruction。
下面列举两个例子来说明if语句的用法。第一个例子是让程序判断一个盒子是否已经装满了,条件是盒子最多只能装下100个小甜饼。
if [$Quantity –eq 100]
then
echo “The box is full”
fi
这个语句让程序检测一下变量Quantity的值,看它是否为100.如果是,则在屏幕上显示:
The box is full.
否则,就跳过这条语句并移到fi的下一条语句。注意,在这里,fi是一个保留字,它有特殊的含义。(fi表示if语句的结束)
另一个例子,要求程序检测盒子是否已满,及是否还有其他的盒子可以获得。当且仅当这两个条件同时是真时,程序才会报告无法在装甜饼了,如下所示:
if [$Quantity –eq 100] && {$AvailableBoxes –it 1}
then
echo “The box is full and you have no more boxes”
fi
这条语句要求程序检测一下变量Quantity的值,看它是否100,及变量AvailableBoxes的值是否小于1.如果这两个条件都为真,则显示信息:
The box is full and you have no more boxes”
如果变量Quantity的值不是100,且分子也有剩余,程序则跳过这条语句,移到保留字fi的下一条语句。
if else语句
if语句可以使程序一句一个条件来做出某种判断,如果天哦见是真则执行一组规定的指令。
但是,在使用if语句时也存在着一个问题,即条件是假时,可能还需要为程序提供另外一组指令。当然,也可以再用一条if语句来解决这个问题,即在条件为假时让程序执行另一组指令。但是,有一种方法比这更简单,这就是if else语句。if else语句的语法规则是:
if [Condition]
then
Instruction1
else
Instruction2
fi
这条语句表示,如果Condition(条件)为真,程序则执行第一组指令(I