当前位置:  操作系统/服务器>linux
本页文章导读:
    ▪深入linux中重定向及管道详解      一,重定向 1.1      重定向符号 >    输出重定向到一个文件或设备 覆盖原来的文件 >!   输出重定向到一个文件或设备 强制覆盖原来的文件 >>             输出重定向到.........
    ▪linux中/etc/fstab文件的简要说明      /etc/fstab作为linux重要的核心配置文件之一,它描述系统中各种文件系统的信息,应用程序读取这个文件,然后根据其内容进行自动挂载的工作。 理解fstab文件中的内容,了解它如何与mount命令.........
    ▪linux中修改root帐户的登录用户名的方法      在linux系统中,如何修改root这个账号的登录名呢? 通过下面的命令修改:   代码示例: sudo usermod -l newusername root 出现错误提示: usermod: user root is currently logged in 遇到这样的问题,可以这样.........

[1]深入linux中重定向及管道详解
    来源: 互联网  发布时间: 2013-12-24

一,重定向
1.1      重定向符号
>    输出重定向到一个文件或设备 覆盖原来的文件
>!   输出重定向到一个文件或设备 强制覆盖原来的文件
>>             输出重定向到一个文件或设备 追加原来的文件
<    输入重定向到一个程序

1.2标准错误重定向符号
2>  将一个标准错误输出重定向到一个文件或设备 覆盖原来的文件  b-shell
2>>  将一个标准错误输出重定向到一个文件或设备 追加到原来的文件
2>&1  将一个标准错误输出重定向到标准输出 注释:1 可能就是代表 标准输出
>&    将一个标准错误输出重定向到一个文件或设备 覆盖原来的文件  c-shell
|&   将一个标准错误 管道 输送 到另一个命令作为输入

1.3命令重导向示例
在 bash 命令执行的过程中,主要有三种输出入的状况,分别是:
1. 标准输入;代码为 0 ;或称为 stdin ;使用的方式为 <
2. 标准输出:代码为 1 ;或称为 stdout;使用的方式为 1>
3. 错误输出:代码为 2 ;或称为 stderr;使用的方式为 2>
例子:
 

代码示例:

[test @test test]# ls -al > list.txt
将显示的结果输出到 list.txt 文件中,若该文件以存在则予以取代!

[test @test test]# ls -al >> list.txt
将显示的结果累加到 list.txt 文件中,该文件为累加的,旧数据保留!

[test @test test]# ls -al  1> list.txt   2> list.err
将显示的数据,正确的输出到 list.txt 错误的数据输出到 list.err

[test @test test]# ls -al 1> list.txt 2> &1
将显示的数据,不论正确或错误均输出到 list.txt 当中!错误与正确文件输出到同一个文件中,则必须以上面的方法来写!不能写成其它格式!

[test @test test]# ls -al 1> list.txt 2> /dev/null
将显示的数据,正确的输出到 list.txt 错误的数据则予以丢弃! /dev/null ,可以说成是黑洞装置。为空,即不保存。

1.4为何要使用命令输出重导向
当屏幕输出的信息很重要,而且我们需要将他存下来的时候;
背景执行中的程序,不希望他干扰屏幕正常的输出结果时;
一些系统的例行命令(例如写在 /etc/crontab 中的文件)的执行结果,希望他可以存下来时;
一些执行命令,我们已经知道他可能的错误讯息,所以想以『 2> /dev/null 』将他丢掉时;
错误讯息与正确讯息需要分别输出时。

二,管线命令 ( pipe )
就如同前面所说的, bash 命令执行的时候有输出的数据会出现,那么如果这群数据必需要经过几道手续之后才能得到我们所想要的格式,应该如何来设定?这就牵涉到管线命令的问题了( pipe ),管线命令使用的是『 | 』。

例子:简单的管线命令
假设我们要读取 last 这个指令中,那个 root 登入的『次数』应该怎么作?
那么我所进行的步骤是:
1. 执行 last ,将所有这个月的所有人登入数据取出来;
2. 使用 grep 将上面的输出数据(stdout)当中的 root 撷取出来,其它的不要;
3. 使用 wc 这个可以计算行数的指令将上一步的数据计算行数!
由于 last 的输出是一行代表一次登入,所以只要计算几行就代表登入几次的意思,经由上面三个步骤,将 last 数据逐步的筛选,就可以得到我们的数据了!整个命令可以写成如下: [test @test bin]# last | grep root | wc -l
这个管线命令『 | 』仅能处理经由前面一个指令传来的正确信息,也就是standard output ( STDOUT ) 的信息,对于 stdandard error 并没有直接处理的能力。

2.1基本的管线命令指令介绍
cut
语法:[root @test /root ]# cut -d "分隔字符" [-cf] fields
参数说明:
-d :后面接的是用来分隔的字符,预设是『空格符』
-c :后面接的是『第几个字符』
-f :后面接的是第几个区块?
范例:

代码示例:
[root @test /root]# cat /etc/passwd | cut -d ":" -f 1
将 passwd 这个文件里面,每一行里头的 : 用来作为分隔号,而列出第一个区块!也就是姓名所在啦!
[root @test /root]# last | cut -c1-20
将 last 之后的数据,每一行的 1-20 个字符取出来!

sort
语法:[root @test /root ]# sort [-t 分隔符] [(+起始)(-结束)] [-nru]
参数说明:
-t 分隔符:使用分隔符来隔开不同区间,预设是 tab
+start -end:由第 start 区间排序到 end 区间
-n :使用『纯数字』排序(否则就会以文字型态来排序)
-r :反向排序
-u :相同出现的一行,只列出一次!
范例:

代码示例:
[root @test /root]# cat /etc/passwd | sort将列出来的个人账号排序!
[root @test /root]# cat /etc/passwd | sort -t: +2n将个人账号中,以使用者 ID 来排序(以 : 来分隔,第三个为 ID ,但第一个代号为 0 之故)
[root @test /root]# cat /etc/passwd | sort -t: +2nr反相排序啰!

wc
语法:[root @test /root ]# wc [-lmw]
参数说明:
-l :多少行
-m :多少字符
-w :多少字
范例:

代码示例:
[root @test /root]# cat /etc/passwd | wc -l这个文件里头有多少行?
[root @test /root]# cat /etc/passwd | wc -w这个文件里头有多少字!?

uniq这个指令用来将『重复的行删除掉只显示一个』
语法:[root @test /root ]# uniq
范例:

代码示例:
[root @test /root]# last | cut -d" " -f1 | sort | uniq

tee命令重定向到文件的同时将数据显示在屏幕上
语法:[root @test /root ]# last | tee last.list | cut -d " " -f1
范例:

代码示例:
[root @test /root]# last | tee last.list | cut -d " " -f1

tr
语法:[root @test /root ]# tr [-ds] SET1
参数说明:
-d :删除 SET1 这个字符串
-s :取代掉重复的字符!
范例:

代码示例:
[root @test /root]# last | tr '[a-z]' '[A-Z]' <==将小写改成大写
[root @test /root]# cat /etc/passwd | tr -d : <== : 这个符号在 /etc/passwd 中不见了!
[root @test /root]# cat /home/test/dostxt | tr -d '\r' > dostxt-noM

split
语法:[root @test /root ]# split [-bl] 输入文件 输出文件前导字符
参数说明:
-b :以文件 size 来分
-l :以行数来分
范例:[root @test /root]# split -l 5 /etc/passwd test <==会产生 testaa, testab, testac... 等等的文件
说明:在 Linux 底下就简单的多了!你要将文件分割的话,那么就使用 -b size 来将一个分割的文件限制其大小,如果是行数的话,那么就使用 -l line 来分割!
管线命令在 bash 的连续的处理程序中是相当重要的!另外,在 log file 的分析当中也是相当重要的一环。
管道输送到一个命令的标准输入可以使用标准输入参数”-“ 进行更仔细的控制.如cat命令的示例
例子: 

代码示例:
sort mylist | more
sort mylist | cat –n | lpr
pwd | cat – mylist | lpr

您可能感兴趣的文章:
Linux重定向实例详解
解析:Linux之管道与重定向
深入linux上shell重定向详解>>
Linux中重定向命令行的方法总结
shell i/o常用重定向方法详解
深入理解Linux重定向的使用
linux文件描述符与输入输出重定向
有关I/O重定向的详细教程


    
[2]linux中/etc/fstab文件的简要说明
    来源: 互联网  发布时间: 2013-12-24

/etc/fstab作为linux重要的核心配置文件之一,它描述系统中各种文件系统的信息,应用程序读取这个文件,然后根据其内容进行自动挂载的工作。

理解fstab文件中的内容,了解它如何与mount命令配合工作,并能够针对自己的情况进行修改,有助于我们更好的管理与维护手中的linux系统。

作为系统配置文件,fstab通常都位于/etc目录下,它包括了所有分区和存储设备的信息,以及它们应该挂载到哪里,以什么样子的方式挂载。如果遇到一 些类似于无法挂载你的windows分区,无法使用你的光驱,无法对某个分区进行写入操作,那么基本上可以断定,fstab内容有问题了。
可以通过修改它来搞定这些问题。

/etc/fstab其实就是一个文本文件,用gedit或者vi都可以打开,当然,前提是root权限。
在这个文件中,每个文件系统(包括分 区或者设备)用一行来描述,在每一行中,用空格或TAB符号来分隔各个字段,文件中以*开头的行是注释信息。fstab文件中的纪录的排序十分重要。因为 fsck,mount或umount等程序在做它们的工作时会按此顺序进行本。

阅读以下内容,您需要有挂载文件系统和分区的基础知识。

每个人所使用的系统情况都是不同的,包括硬件种类,所用系统等,因此fstab文件肯定是有所差异的。但是其基本结构,如上所述,都不会变。所以我们先以一个fstab内容作为模板进行讲解。

首先,看这个例子:
 

代码示例:
/dev/hda2     /                  ext2  defaults         1 1
/dev/hdb1     /home               ext2  defaults           1 2
/dev/cdrom  /media/cdrom  auto  ro,noauto,user,exec 0 0
/dev/fd0      /media/floppy auto  rw,noauto,user,sync 0 0
proc            /proc               proc  defaults        0 0
/dev/hda1     swap                swap  pri=42     0 0
 

这些看起来毫无意义的字符代表了什么?在对应相应分区或者存储设备信息的每一行中,每一列又是什么意思?先大体讲一下,第一列表示设备的名称,第二列表示 该设备的挂载点,第三列是文件系统,第四列是挂载选项,第五列是dump选项(用一个数字表示),第六列(接下来的数字)表示文件系统检查选项。

参数的具体含义。

第一、二列:设备和默认挂载点
第一列和第二列的内容是最简单最直接的,它们的作用就是告诉mount命令,我想挂载什么分区或者什么设备,以及我所希望的挂载点在哪里。在 fstab中为某一个设备指定的挂载点是其默认挂载点,也就是当你在挂载目录的时候没有手工指定其他目录的话,系统就将该设备挂载到这个目录。大多数 Linux发行版都会为挂载点创建专门的目录,大多数是在/mnt下,但是一些发行版(比如SUSE或者ubuntu)是在/media下。笔者使用的是 ubuntu,所以示例信息中也是用的/media目录。

按照给出的fstab示例,如果敲入命令:
 

代码示例:
$ mount /dev/fd0

软驱就将挂载到/media/floppy,因为这是你告诉系统的软驱默认挂载点。如果没有这个信息,当你敲入mount命令时,mount会感到很 困惑:该死的,你想让我把这玩意挂载到哪里去呢?当然,如果你看fstab中发行版给你指定的默认挂载点不顺眼,也可以自由修改它,修改成任何一个你希望 的目录都可以。如果还不存在,就首先创建这个目录。要知道,fstab是不会把所有工作都给你包干的。

另外,有一些分区和存储设备是在Linux系统启动的时候就自动挂载的,比如,看看刚才列出来的fstab示例信息,有两行是这样的:
 

代码示例:
/dev/hda2 / ext2 defaults 1 1
/dev/hdb1 /home ext2 defaults 1 2

正如刚才讲到的那样,这两行表示/dev/hda2默认挂载到/根目录,而 /dev/hdb1则默认挂载到/home目录,。这些工作在你Linux系统启动的时候就会通过读取fstab自动完成,否则的话……想象你会遭受什么 样的折磨吧,所有的程序都在/根目录下,却无法使用,因为没有挂载/根目录!

除了显示的使用设备名,你可以使用设备的UUID或设备的卷标签,例如,你可以在这个字段写成“LABAL=root”或“UUID= 3e6be9de- 8139-11d1-9106-a43f08d823a6”,这将使系统更具伸缩性。例如,如果你的系统添加或移除了一个SCSI硬盘,这有可以改变你的 设备名,但它不会修改你的卷标签。

对于NFS mount操作,这个字段应该包含host:dir格式的信息,例如:knuth.aeb.nl:/,对于进程文件系统procfs,使用proc。

第三列:文件系统类型
fstab中的第三列指示了设备或者分区的文件系统类型。它支持很多种类的文件系统,我们在这里只介绍最为常用的。如果想了解你的kernel目前支持哪 些文件系统,可以查看/proc/filesystems的内容。如果这个字段定义为swap,这条纪录将关联到一个用于交换目的的文件或分区。如果这个 字段定义为ignored,这行将被忽略。这对于显示目前没有使用的分区非常有用。

ext2 和 ext3: Linux下的Ext2文件系统,是 GNU/Linux 系统中标准的文件系统,其特点为存取文件的性能极好,对于中小型的文件更显示出优势,这主要得利于其簇快取层的优良设计。至于Ext3文件系统,它属于一 种日志文件系统,是对ext2系统的扩展。日志式文件系统的优越性在于,它会将整个磁盘的写入动作完整记录在磁盘的某个区域上,以便有需要时可以回朔追 踪。由于详细纪录了每个细节,故当在某个过程中被中断时,系统可以根据这些记录直接回朔并重整被中断的部分,而不必花时间去检查其他的部分,故文件系统检 测不一致时,重整的工作速度相当快,几乎不需要花时间。

reiserfs: ReiserFS是一个非常优秀的文件系统。也是最早用于Linux的日志文件系统之一,其机制比Ext3要先进得多,风雷小弟一直使用的就是它,很多发 行版现在也把它作为默认文件系统了。可惜其作者前段时间出事了……具体情况就不说了,也不知道下一代reiserfs4还能不能出来,因为ext4都有 了。

swap: Swap,即交换区,把它想象成虚拟内存就行了。

vfat 和 ntfs:一看就知道是Windows分区格式了,呵呵。98,me等系统都是使用的vfat,也就是最流行的fat32格式,而NT系列则多使用 NTFS,当然也不是固定的,因此2000或者XP系统要具体情况具体分析。当初Linux对NTFS的写入支持不好,所以大多数资料都建议用户使用 vfat格式,但是现在支持已经很好了,即使不重新编译内核,也可以通过ntfs-3g来进行写入支持(具体方法请参考这篇文章),因此不用太在意这个 了。

auto:当然,这不是一个文件系统类型。auto只是表示,文件系统的类型将被自动检测。在上面的示例中,你会发现软驱和光驱的文件系统类型都是 auto,为什么呢?因为它们的文件系统类型随时都可能改变,比如软驱,优盘这种设备,可能今天是vfat格式,明天你就把它格式化成了ntfs,因此, 最明智的做法就是告诉系统,我没法确定这东西的当前类型,还是你自己检测吧。

udf: 由于刻录光驱越来越流行,现在很多发行版自带的fstab中,光驱的文件格式类型是UDF,UDF是Universal Disc Format的缩写,与ISO 9660格式相容。它采用标准的封装写入技术(PW,Packet Writing)将CD-R/CD-RW当作硬盘使用,用户可以在光盘上修改和删除文件。利用UDF格式进行刻录时,刻录软件将数据打包,并在内存中临时 建立一个特殊文件目录表,同时接管系统对光盘的访问。

iso9660: 很多光驱也使用的这个选项。ISO9660是一种描述适合CD盘片的电脑文件结构的国际标准。采用此标准的盘片可以在不同的操作系统上使用,如MAC和Windows。

第四列:挂载选项
fstab中的第四列表示设备或者分区所需要的挂载选项。这一列也是fstab中最复杂最容易出错的一列,当然,只要你能知道一些最常用的选项是什么意 思,就可以让你从头疼中解脱出来。如果要把可用的选项一项一项介绍……恩,我估计我会写到明天,所以,我还是只是分析最常用的一些选项,如果你想知道更多 的东西,还是求助于man吧。

auto 和 noauto: 这是控制设备是否自动挂载的选项。auto是默认选择的选项,这样,设备会在启动或者你使用mount -a命令时按照fstab的内容自动挂载。如果你不希望这样,就使用noauto选项,如果这样的话,你就只能明确地通过手工来挂载设备。

user 和 nouser:这是一个非常有用的选项,user选项允许普通用户也能挂载设备,而nouser则只允许root用户挂载。nouser是默认选项,这也 是让很多 Linux新手头疼的东西,因为他们发现没有办法正常挂载光驱,Windows分区等。如果你作为普通身份用户遇到类似问题,或者别的其他问题,就请把 user属性增加到fstab中。

exec 和 noexec: exec允许你执行对应分区中的可执行二进制程序,同理,noexec的作用刚好相反。如果你拥有一个分区,分区上有一些可执行程序,而恰好你又不愿意, 或者不能在你的系统中执行他们,就可以使用noexec属性。这种情况多发生于挂载Windows分区时。exec是默认选项,理由很简单,如果 noexec变成了你/根分区的默认选项的话……

ro: 以只读来挂载文件系统。

rw: 以可读可写的属性来挂载系统。

sync 和 async:对于该文件系统的输入输出应该以什么方式完成。sync的意思就是同步完成,通俗点讲,就是当你拷贝一个东西到设备或者分区中时,所有的写入 变化将在你输入cp命令后立即生效,这个东西应该立马就开始往设备或者分区里面拷贝了。而如果是async,也就是输入输出异步完成的话,当你拷贝一个东 西到设备或者分区中时,可能在你敲击cp命令后很久,实际的写入操作才会执行,换句话说,就是进行了缓冲处理。
有时候这种机制蛮不错的,因为sync会影响你系统的运行速度,但是这也会带来一些问题。想一想,当你希望将一个文件拷贝到u盘上时,你执行了cp 命令,却忘记执行umount命令(它会强行将缓冲区内容写入),那么你拷贝的文件实际上并没有在u盘上面。如果你是使用的mv命令,而你又很快将u盘拔 出……恭喜你,文件会从这个星球上消失的。因此,虽然async是默认属性,但是对于u盘,移动硬盘这种可移动存储设备,最好还是让他们使用sync选 项。

defaults: 所有选项全部使用默认配置,包括rw, suid, dev, exec, auto, nouser, 和 async。 一般用户没有特殊需求,直接使用defaults就可以了。

回顾下前面的示例内容,以光驱为例,主要关注挂载选项这里,可以看到,光驱和其他分区设备的不同是ro,因为普通光驱是只读的。而exec则让你可以从光驱上直接执行某些程序。

第五、六列:dump和fsck选项
dump和fsck?这是什么东西?恩,dump是一个备份工具,而fsck是一个文件系统扫描检查工具。我不会在这里详细介绍它们,因为用man或者google都可以获得更加详细的信息。
fstab的第五列是表示dump选项,dump工具通过这个选项位置上的数字来决定文件系统是否需要备份。如果是0,dump就会被忽略,事实上,大多 数的dump设置都是0。

而第六列是fsck选项,fsck命令通过检测该字段来决定文件系统通过什么顺序来扫描检查,根文件系统/对应该字段的值应该为 1,其他文件系统应该为2。
若文件系统无需在启动时扫描检查,则设置该字段为0。

就介绍这些了,希望有助于大家理解并掌握fstab文件的配置参数,以及挂载文件系统时的一些细节。
,祝大家学习进步,学linux,就来。


    
[3]linux中修改root帐户的登录用户名的方法
    来源: 互联网  发布时间: 2013-12-24

在linux系统中,如何修改root这个账号的登录名呢?

通过下面的命令修改:
 

代码示例:
sudo usermod -l newusername root

出现错误提示:
usermod: user root is currently logged in

遇到这样的问题,可以这样操作:
vi /etc/passwd
按i键进入编辑状态,修改第1行第1个root为新的用户名,按esc键退出编辑状态,并输入:x保存并退出。

vi /etc/shadow
按i键进入编辑状态,修改第1行第1个root为新的用户名,按esc键退出编辑状态,并输入:x!强制保存并退出。

完成以上二步,root账号的登录名才被彻底修改了。
希望对大家有所帮助,加强linux系统的安全,一刻不放松啊。


    
最新技术文章:
▪linux系统中的列出敏感用户的脚本代码
▪a10 config backup for aXAPI
▪一键备份gitolite服务器的Shell脚本
▪nagios 分发文件实现代码
▪阿里云云服务器Linux系统更新yum源Shell脚本
数据库 iis7站长之家
▪Linux下实现SSH免密码登录和实现秘钥的管理、...
▪Shell正则表达式之grep、sed、awk实操笔记
▪3个备份系统文件并邮件发送的Shell脚本分享
▪CentOS 6.3下给PHP添加mssql扩展模块教程
▪监控网站是否可以正常打开的Shell脚本分享
▪shell脚本编程之if语句学习笔记
▪shell脚本编程之循环语句学习笔记
▪shell脚本编程之case语句学习笔记
▪Shell脚本实现的阳历转农历代码分享
▪Shell脚本实现复制文件到多台服务器的代码分...
▪Shell脚本实现批量下载网络图片代码分享
▪Shell脚本实现检测文件是否被修改过代码分享
▪Shell脚本数组用法小结
▪Shell脚本批量重命名文件后缀的3种实现
▪C语言实现的ls命令源码分享
▪Linux下查找后门程序 CentOS 查后门程序的shell脚...
▪Shell 函数参数
▪linux shell 自定义函数方法(定义、返回值、变...
▪Shell实现判断进程是否存在并重新启动脚本分...
▪Shell脚本break和continue命令简明教程
▪Shell脚本函数定义和函数参数
▪让代码整洁、过程清晰的BASH Shell编程技巧
▪shell常用重定向实例讲解
▪awk中RS、ORS、FS、OFS的区别和联系小结
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3