LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: KornLee

【shell技巧交流区】:[把你的shell技巧贴出来,让我们分享]

[复制链接]
 楼主| 发表于 2003-9-23 00:16:03 | 显示全部楼层

技巧:查找特定字符所在行行号的方法

方法很多,介绍一下3个具有代表性的,
1,grep -n "string" filename
2,sed -n '/string/=' filename
3,awk '/string/{print FNR}' filename
当然,和nl配合使用效果基本一致!
发表于 2003-9-23 16:00:22 | 显示全部楼层
我检索源代码一般用这种指令:
find ./ -type f -name '*.py' -exec grep -nH "keywords" {} \;
只想看文件名的话就把 grep 的参数改为 -l。
 楼主| 发表于 2003-9-28 00:57:23 | 显示全部楼层

技巧:对数据文件的排序

如文件:
[/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
 楼主| 发表于 2003-10-29 11:54:10 | 显示全部楼层

如何限定用户空间[转自: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 显示使用情况超过配额的简要信息
 楼主| 发表于 2003-11-14 00:27:54 | 显示全部楼层

技巧:利用tput进行光标定位

我们可以利用tput的高级屏幕输出来实现光标的定位,如:
  1. #!/bin/ksh
  2. #一个tput的简单例子,无实际用途!
  3. clear
  4. tput cup 2 0;echo "******************************************************************************"
  5. tput cup 3 15;echo "Name:";tput cup 3 30;echo "Age:";tput cup 3 45;echo "tel:"
  6. tput cup 4 0;echo "******************************************************************************"
  7. tput cup 3 20;read name;tput cup 3 34;read age;tput cup 3 49;read tel
  8. tput cup 5 0
复制代码
tput cup 行号 列号就可以轻松定位光标和在指定坐标上显示文本.
详细的用法,请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命令可以增强应用外观及脚本的控制。颜色设置可以增加应用的专业性。注意使
用颜色不要太过火,否则速度会非常的慢!
发表于 2003-12-10 20:03:54 | 显示全部楼层
让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
 楼主| 发表于 2003-12-30 00:32:19 | 显示全部楼层

恢复shell配置文件的方法

在对shell文件的配置和操作中,难免破坏shell的配置文件,除了做一个副本,还可以用下列命令恢复:
cp /etc/skel ~/
试试看,看是否有用
 楼主| 发表于 2003-12-31 14:11:06 | 显示全部楼层

在shell里进行算术运算常用的3种方法

1,expr
expr 1 + 2        #注意空格
2,(())
((n=1+2))       
3,bc
echo "1+2"|bc        #优点可以取小数点的位数
4,
echo $[1+2]       
发表于 2003-12-31 15:58:23 | 显示全部楼层
> echo "1+2"|bc #优点可以去小数点的位数

需要小数点的可以:
echo "2/3" | bc -l
 楼主| 发表于 2004-1-7 19:38:08 | 显示全部楼层

技巧:控制你的光标

在命令行中,控制光标的移动很重要,我写了一个小脚本,来感受一下吧!
  1. #!/bin/ksh
  2. #
  3. #开始
  4. #函数_a关闭显示和控制输入字符
  5. function _a {
  6. stty cbreak -echo
  7. dd if=/dev/tty bs=1 count=1 2>/dev/null
  8. stty -cbreak echo
  9. }
  10. clear
  11. #
  12. #初始光标位置
  13. echo -n "\\033[18;50H"
  14. #
  15. #i键=UP,k键=DOWN,j键=LEFT,l键=RIGHT,q键=EXIT
  16. while true;do
  17.         case $(_a) in
  18.         i)      echo -n "\\033[1A";;  #上移一行
  19.         k)      echo -n "\\033[1B";;  #下移一行
  20.         j)      echo -n "\\033[2D";;  #左移2个字符
  21.         l)      echo -n "\\033[2C";;  #右移2个字符
  22.         q)      echo -n "\\033[1;1H";clear;exit;;
  23.         esac
  24. done
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表