|
|
第 46 帖 | |
|
|
标题: 技巧:用 uniq 除去重复行[转] 作者:Jacek Artymiak(jacek@artymiak.com)自由作家和顾问 2003 年 7 月
重复行通常不会造成问题,但是有时候它们的确会引起问题。此时,不必花上一个下午的时间来为它们编制过滤器,uniq 命令便是唾手可得的好工具。了解一下它是如何节省您的时间和精力的。 进行排序之后,您会发现有些行是重复的。有时候该重复信息是不需要的,可以将它除去以节省磁盘空间。不必对文本行进行排序,但是您应当记住 uniq 在读取行时会对它们进行比较并将只除去两个或更多的连续行。下面的示例说明了它实际上是如何工作的: 清单 1. 用 uniq 除去重复行 $ cat happybirthday.txt Happy Birthday to You! Happy Birthday to You! Happy Birthday Dear Tux! Happy Birthday to You! $ sort happybirthday.txt Happy Birthday Dear Tux! Happy Birthday to You! Happy Birthday to You! Happy Birthday to You! $ sort happybirthday.txt | uniq Happy Birthday Dear Tux! Happy Birthday to You! 警告:请不要使用 uniq 或任何其它工具从包含财务或其它重要数据的文件中除去重复行。在这种情况下,重复行几乎总是表示同一金额的另一个交易,将它除去会给会计部造成许多困难。千万别这么干! 有关 uniq 的更多信息 本系列文章介绍了文本实用程序,它对在手册页和信息页找到的信息作了补充。如果您打开新的终端窗口并输入 man uniq 或 info uniq,或者打开新的浏览器窗口并查看位于 gnu.org 的 uniq 手册页,那么就可以了解更多的相关信息。 如果您希望您的工作轻松点,比如只显示唯一的或重复的行,那么该怎么办呢?您可以用 -u(唯一)和 -d(重复)选项来做到这一点,例如: 清单 2. 使用 -u 和 -d 选项 $ sort happybirthday.txt | uniq -u Happy Birthday Dear Tux! $ sort happybirthday.txt | uniq -d Happy Birthday to You! 您还可以用 -c 选项从 uniq 中获取一些统计信息: 清单 3. 使用 -c 选项 $ sort happybirthday.txt | uniq -uc 1 Happy Birthday Dear Tux! $ sort happybirthday.txt | uniq -dc 3 Happy Birthday to You! 就算 uniq 对完整的行进行比较,它仍然会很有用,但是那并非该命令的全部功能。特别方便的是:使用 -f 选项,后面跟着要跳过的字段数,它能够跳过给定数目的字段。当您查看系统日志时这非常有用。通常,某些项要被复制许多次,这使得查看日志很难。使用简单的 uniq 无法完成任务,因为每一项都以不同的时间戳记开头。但是如果您告诉它跳过所有的时间字段,您的日志一下子就会变得更加便于管理。试一试 uniq -f 3 /var/log/messages,亲眼看看。 还有另一个选项 -s,它的功能就像 -f 一样,但是跳过给定数目的字符。您可以一起使用 -f 和 -s。uniq 先跳过字段,再跳过字符。如果您只想使用一些预先设置的字符进行比较,那么该怎么办呢?试试看 -w 选项。 有什么问题或意见吗?我非常乐意收到您的来信 - 请发送邮件到 jacek@artymiak.com。 |
|
|
|
|
|
|
|
第 47 帖 | |
|
|
标题: 技巧:为普通用户分配特权 有时候我们不想让一个用户有超级用户权限,又想该用户能执行一些超级用户才能执行的命令。我们可以指定某个列入/etc/sudoers文件的普通用户可以利用sudo来执行一些只有超级用户才能执行的命令。
/etc/sudoers的配置规则如下: Host_Alias:用来创建主机别名[可选],列表中的主机必须用逗号隔开,如果要设置多个别名,可以用冒号隔开,保留关键字ALL代表所有主机。例如: Host_Alias bluesun=grind,glass 这里用别名bluesun来统称grind和glass两台机器,grind和glass分别是这两台机器的机器名。 User_Alias:用来创建用户别名[可选],列表中的用户名必须以逗号隔开。其格式同主机别名,保留关键字ALL代表所有命令。 Cmnd_alias:用来创建命令别名[可选],列表中的命令必须用逗号隔开,如果要定义一个命令无效,可以在该命令前加!号。 用户命令使用列表:用户命令使用语法如下: Username host= [Run User's Name ] CommandList Username指定一个真正的用户名或定义过的别名,host制定一个真正的主机名或者定义过的主机别名。CommandList可以是以逗号分隔的命令列表,也可以是一个已经定义过的别名。一般情况下,sudo执行的所有命令都是以root身份执行。但是一些特别的程序,比如一些需要安全性比较高的程序不能用root身份执行的,可以指定用"Run User's Name"指向的用户名来执行。例如: grind glass=/sbin/route 这一句说明用户grind可以在glass这台主机上运行查看路由表命令。 from: www.linuxaid.com.cn 此帖于 03-08-21 15:53 被 KornLee 编辑. |
|
|
|
|
|
|
|
第 48 帖 | ||
|
|
标题: 回复: 技巧:妙用watch命令实时观察内存变化 引用:
xterm -e command & 打开另一个终端执行command |
||
|
|
|
||
|
|
第 49 帖 | |
|
|
标题: 技巧:限时输入的实现 举例:
代码:
http://www.linuxsir.com/bbs/showthre...threadid=45871 此帖于 03-09-14 00:39 被 KornLee 编辑. |
|
|
|
|
|
|
|
第 50 帖 | |
|
|
转自:水木清华
著名的 rot13 密码, 通过把字母移动13个位置实现对文本的加密 tr "[a-m][n-z][A-M][N-Z]" "[n-z][a-m][N-Z][A-M]" < message > newmessage 然后可以用同样的命令进行解密 tr "[a-m][n-z][A-M][N-Z]" "[n-z][a-m][N-Z][A-M]" < newmessage > message 例如: 文件myfile: ksh The "Korn" shell, written by David Korn of AT&T Bell Labs (now Lucent). Written as a major upgrade to "sh", it is compatible with it, but has many more internal commands for the most frequently used functions. It also incorporates most of the same features from tcsh which enhance interactive use (command line history recall etc.). This shell is now available on most systems. It was slow to gain acceptance because earlier versions were encumbered by AT&T licensing. 加密: 代码:
xfu Gur "Xbea" furyy, jevggra ol Qnivq Xbea bs NG&G Oryy Ynof (abj Yhprag). Jevggra nf n znwbe hctenqr gb "fu", vg vf pbzcngvoyr jvgu vg, ohg unf znal zber vagreany pbzznaqf sbe gur zbfg serdhragyl hfrq shapgvbaf. Vg nyfb vapbecbengrf zbfg bs gur fnzr srngherf sebz gpfu juvpu raunapr vagrenpgvir hfr (pbzznaq yvar uvfgbel erpnyy rgp.). Guvf furyy vf abj ninvynoyr ba zbfg flfgrzf. Vg jnf fybj gb tnva npprcgnapr orpnhfr rneyvre irefvbaf jrer raphzorerq ol NG&G yvprafvat. 加密后的文件是无法阅读的! 解密: 代码:
|
|
|
|
|
|
|
|
第 51 帖 | |
|
|
标题: 技巧:查找特定字符所在行行号的方法 方法很多,介绍一下3个具有代表性的,
1,grep -n "string" filename 2,sed -n '/string/=' filename 3,awk '/string/{print FNR}' filename 当然,和nl配合使用效果基本一致! ![]() 此帖于 03-09-23 00:21 被 KornLee 编辑. |
|
|
|
|
|
|
|
第 52 帖 | |
|
|
我检索源代码一般用这种指令:
find ./ -type f -name '*.py' -exec grep -nH "keywords" {} \; 只想看文件名的话就把 grep 的参数改为 -l。
__________________
我是 xyb 的马甲,呵呵 ...."Have you mooed today?"... |
|
|
|
|
|
|
|
第 53 帖 | |
|
|
标题: 技巧:对数据文件的排序 如文件:
[/home/javalee/myshell]cat tmp1 23432|2345235|343|2342|3423234|2394|0 234|23423|578|345|345436674|23454|2342|2342 8848|345|32534|34534|254235|345235|234532|345 用sort -n的方法只能对第一列排序,而不能对其他列的数据排序,但是他的手册中有这样的描述 ... -k, --key=POS1[,POS2] start a key at POS1, end it at POS 2 (origin 1) -t, --field-separator=SEP use SEP instead of non- to whitespace transition ... 根据这样的描述,我们就可以对文件中任意列的内容排序啦~~ 如: [/home/javalee/myshell]sort -n -t"|" -k 4 tmp1 #-t指定文件的分隔符是|,-k 4指定为第4列 234|23423|578|345|345436674|23454|2342|2342 23432|2345235|343|2342|3423234|2394|0 8848|345|32534|34534|254235|345235|234532|345 |
|
|
|
|
|
|
|
第 54 帖 | |
|
|
标题: 如何限定用户空间[转自:www.douzhe.com] 在Linux中限制用户的磁盘使用空间使用的是Quota,一般Quota在安装Linux时就已包括在内核中,不需要另行安装。Quota可以从两方面指定磁盘的储存限制: 使用者所能够支配的索引节点(inodes)数量;以及使用者可以取用的磁盘区块数量。在使用Quota监视用户时,一旦用户使用空间超出缓冲值(soft)就会发出警告,如超出限定值(hard)就会禁止用户再储存文件。在 Linux上2.x 版的核心都可以使用 Quota 。使用步骤及方法如下:
⒈开启系统Quota功能: 1 修改/etc/fstab文件,2 下面是我在我的系统上设定的值: #device directory type options /dev/hda1 / ext2 default 1 1 /dev/hda2 /usr ext2 default 1 1 /dev/hda3 /home ext2 default,usrquota,grpquota 1 1 下画线部分(usrquota,grpquota)为另加的部分 3 修改/etc/rc.d/rc.local文件,在文件的最后面加入下面语句: if [ -x /usr/sbin/quotaon ] then echo "Quota now is turning on" /usr/sbin/quotaon -avug 4 在quota所在目录(本例为/usr/local/bin)执行quotacheck -avug,这时Quota开始检查所有子目录并建立两个文件:quota.user,quota.group 5 建立 "quota.user" 记录 quota 记录档(quota.user) 应该由 root 拥有,即 root 有读写的权限而其他任何 人都没有。以 root身份登录Linux服务器,进入想要启用 quota 分区最上层,即如想在/usr建立quota管理: [root@Server/usr]#touch /partition/quota.user #chmod 600 /partition/quota.user 6 重新启动计算机 ⒉设定用户或用户组的空间限定 ①设定用户的磁盘限制:edquota -u 用户名 如我系微机室设有一帐户wlx01,当使用命令edquota -u wlx01后出现Vi界面,如下所示: Quotaa for user wlx01: /dev/hda3:blocks in use:0,limits(soft=0,hard=0) inodes in use:9,limits(soft=0,hard=0) "blocks in use" 是使用者在某个分割区上已经使用的区块总数(以千位元组为单位) , "inodes in use" 是使用者在某个分割区上所拥有的文件总数。其中只需修改soft和hard两项后的值,单位都是kb。Soft指定占用空间达到多少时给以警告,hard则是为用户分配的可用空间大小 ②设定用户组的磁盘限制:edquota -g 用户组 ③重复操作:当以设定某个用户而想重复在其他用户上时: edquota -p 已设定用户 需设定用户 当使用 edquota -p wlx01 * 时所有用户都会与wlx01一样 ⒊常用命令: Repquota edquota -t:对 quota 使用者实行软性限制之前的时间限制。可以使用的时间单位是秒、分、小时、日、星期、以及月。软性限制指出 quota 使用者在分割区上拥有的磁盘用量总数。但是合并使用缓冲期间的时候,它的动作就如同一道临界线,当 quota 使用者超越时便发出有关他即将违犯 quota 的警告。 Time units may be: days, hours, minutes, or seconds Grace period before enforcing soft limits for users: /dev/hda2: block grace period: 0 days, file grace period: 0days 0 days 这个部份可变更为觉得合理的任何期限。 repquota -a : Repquota 产生文件系统关于的quota信息 Block limits File limits User used soft hard grace used softhard grace root -- 175419 0 0 14679 00 bin -- 18000 0 0 735 00 uucp -- 729 0 0 23 00 man -- 57 0 0 10 00 user1 -- 13046 15360 19200 806 15002250 user2 -- 2838 5120 6400 377 10001500 Quotaon 用来打开 quota 的计算; quotaoff 则是将其关闭,它们是在系统启动与关机时执行的。 Quota :显示用户的磁盘使用情况和上限。 参数 使用说明 -g 显示用户所在组的组配额 -u 显示用户配额 -v 显示没有空间分配的文件系统情况 -q 显示使用情况超过配额的简要信息 |
|
|
|
|
|
|
|
第 55 帖 | |
|
|
标题: 技巧:利用tput进行光标定位 我们可以利用tput的高级屏幕输出来实现光标的定位,如:
代码:
详细的用法,请man tput ![]() 附:tput常用参数: 一.使用 在使用tput前,需要在脚本或命令行中使用tput命令初始化终端。 $ tput init tput产生三种不同的输出:字符型、数字型和布尔型(真/假)。 /字符串输出/ 下面是大部分常用字符串: 名字含义 bel 警铃 blink 闪烁模式 bold 粗体 civis 隐藏光标 clear 清屏 cnorm 不隐藏光标 cup 移动光标到屏幕位置( x,y) el 清除到行尾 ell 清除到行首 smso 启动突出模式 rmso 停止突出模式 smul 开始下划线模式 rmul 结束下划线模式 sc 保存当前光标位置 rc 恢复光标到最后保存位置 sgr0 正常屏幕 rev 逆转视图 /数字输出/ 以下是大部分常用数字输出。 名字含义 cols 列数目 ittab设置宽度 lines 屏幕行数 /布尔输出/ 在tput中只有两种布尔操作符。 名字含义 chts 光标不可见 hs 具有状态行 例如:tput clear 清除屏幕 二.光标位置 可以用tput将光标放在屏幕任意位置。格式为: cup r c r为从上至下屏幕行数, c为穿过屏幕列数。 最好将之编成函数,这样就可以把行和列的值传递给它。 例子:tput cup 2 3命令将光标放到第2行、第3列。 三.菜单中使用颜色 对域使用颜色可以使数据输入屏幕看起来更加专业。下面将使用的颜色是A N S I标准颜 色,并不是所有颜色都适合于所有系统。下面列出了大部分常用颜色。 1. 前景色: 数字颜色数字颜色 3 0 黑色3 4 蓝色 3 1 红色3 5 紫色 3 2 绿色3 6 青色 3 3 黄(或棕)色3 7 白(或灰)色 2. 背景色: 数字颜色数字颜色 4 0 黑色4 4 青色 4 1 红色4 5 蓝色 4 2 绿色4 6 青色 4 3 黄(或棕)色4 7 白(或灰)色 例子:黑底绿字echo "\033[40;32m" 使用tput命令可以增强应用外观及脚本的控制。颜色设置可以增加应用的专业性。注意使 用颜色不要太过火,否则速度会非常的慢! 此帖于 03-11-30 20:41 被 KornLee 编辑. |
|
|
|
|
|
|
|
第 56 帖 | |
|
|
让XF86Config支持xtt字体,需要加入字体目录及Load "xtt",以下算法即可实现这一目的.
cat /etc/X11/XF86Config | while read LINE ; do echo "$LINE" >> /etc/X11/XF86Config-4 if echo $LINE | grep RgbPath | grep "/usr/X11R6/lib/X11/rgb" 1> /dev/null ; then # echo "FontPath \"/usr/share/fonts/local/\"" >> /etc/X11/XF86Config-4 echo "FontPath \"/usr/share/fonts/local/\"" >> /etc/X11/XF86Config-4 fi if echo $LINE | grep Load | grep type1 1> /dev/null ; then # X -configure is pretty broken... it leaves out the type1 and freetype # modules. We'll work around this. BTW, it matters not if these appear # multiple times, but matters A LOT if they don't appear at all. # echo "Load \"xtt\"" >> /etc/X11/XF86Config-4 echo "Load \"xtt\"" >> /etc/X11/XF86Config-4 fi |
|
|
|
|
|
|
|
第 57 帖 | |
|
|
标题: 恢复shell配置文件的方法 在对shell文件的配置和操作中,难免破坏shell的配置文件,除了做一个副本,还可以用下列命令恢复:
cp /etc/skel ~/ 试试看,看是否有用 ![]() |
|
|
|
|
|
|
|
第 58 帖 | |
|
|
标题: 在shell里进行算术运算常用的3种方法 1,expr
expr 1 + 2 #注意空格 2,(()) ((n=1+2)) 3,bc echo "1+2"|bc #优点可以取小数点的位数 4, echo $[1+2] 此帖于 03-12-31 20:51 被 KornLee 编辑. |
|
|
|
|
|
|
|
第 59 帖 | |
|
|
> echo "1+2"|bc #优点可以去小数点的位数
需要小数点的可以: echo "2/3" | bc -l 此帖于 03-12-31 17:15 被 KornLee 编辑. |
|
|
|
|
|
|
|
第 60 帖 | |
|
|
标题: 技巧:控制你的光标 在命令行中,控制光标的移动很重要,我写了一个小脚本,来感受一下吧!
代码:
此帖于 04-01-07 21:05 被 KornLee 编辑. |
|
|
|
|
|