Skip navigation.

极湖

无不用其“极”

Posts tagged with "Command"

让 root 用户不能直接删除文件的方法

,

有时候为了加强对文件的保护,让 root 用户也不能直接删除某些文件。
chattr 命令给文件设置属性,即可实现以上目标。

例:
# touch test
# chattr +i test
# man chattr
# rm -f test
rm: cannot remove `.htaccess': Operation not permitted
root:~# echo $?
1


若要恢复,只需把命令中的 + 号变成 - 号:
# chattr -i test
# rm test
# echo $?
0


若要查看文件属性,用 lsattr 命令
# lsattr test
----i-------- test


以上方法,对 cp,mkdir, mv, chmod, chown 等命令同样适用。

让 secureCRT 定时发送命令的脚本

,

想让secureCRT在一定时间后发送命令,为此做了一个脚本如下:
var startTime = (new Date()).getTime();
var afterSeconds = 60;
var executed = false;

function main() {
    crt.Screen.Send("date\n");
    while(!executed) {
        sendCommand();
    }
}

function sendCommand() {
    if((new Date()).getTime() > (startTime + (afterSeconds*1000))) {
        crt.Screen.Send("echo It is time to execute command\n");
        crt.Screen.Send("date\n");
        executed = true;
    }
}

保存成文件,然后通过菜单 script -> Run 选择该文件即可。

用 tar 和 NFS 实现网络文件快速拷贝

, , ,

(本文部分翻译自: fast network file copying using tar and nfs)

先在远程机器(例如:192.168.1.3)配置 NFS 的输出路径,允许从本地拷贝文件(例如:/remotedir)。

在本地机器上创建新的空路径,然后 mount 上远程目录。命令如下:

mkdir /remotedir
mount 192.168.1.3:/remotedir /remotedir


完成以上步骤之后,即可在本地机和远程机之间拷贝文件:

tar -c localdir/ | tar -C /remotedir/ -xv

该命令将本地当前路径 localdir 之下的内容全部拷贝到远程机器的 /remotedir 之下。

注: 拷贝通常用 cp 命令,以上用的是 tar, 是不是更快,需要您自己验证。

Unix 下文本操作的利器

, ,

■ cut

cut 命令可用来截取文本中特定的字段。

(例)
$ cut -c1 file1.txt
截取文件 file1.txt 各行的第1个字符并输出

$ cut -c1-10 file1.txt
截取文件 file1.txt 各行的第1到第10个字符并输出

$ cut -c20- file1.txt
截取文件 file1.txt 各行第20个字符至末尾的字符串并输出

$ cut -d: -f1 file1.txt
截取文件 file1.txt 各行以冒号( : )分割的第1个字符串

$ cut -d' ' -f1,2 file1.txt
截取文件 file1.txt 各行以空格( )分割的第1和第2个字符串

■ paste

paste 命令可用来拼接两个文本文件中的数据。

(例)
文件 file1.txt 的内容:
1
2
3

文件 file2.txt 的内容:
One
Two
Three

$ paste file1.txt file2.txt
显示结果:
1 One
2 Two
3 Three

$ paste -d, file1.txt file2.txt
显示结果:
1,One
2,Two
3,Three

paste -s 可以把一个文件的各行拼接成一整行。

$ paste -s file1.txt
显示结果:
1 2 3

■ sed

sed 是一个数据流编辑器。

(例)
$ sed 's/Unix/UNIX/' file1.txt
把文件 file1.txt 中的字符串 Unix 替换成 UNIX 并输出

$ sed -n '1,2p' file1.txt
  输出文件 file1.txt 的头两行

$ sed -n '/UNIX/p' file1.txt
  输出文件 file1.txt 中包含 UNIX 的行

$ sed '1,2d' file1.txt
  删除文件 file1.txt 的头两行并输出

$ sed '/UNIX/d' file1.txt
  删除文件 file1.txt 中包含 UNIX 的行并输出

■ tr

tr 命令用作字符串变换的过滤器。

(例)
$ tr e x < file1.txt
  将文件 file1.txt 内的字符'e'替换成字符'x'并输出

$ tr '[a-z]' '[A-Z]' < file1.txt
  将文件 file1.txt 内的小写字母替换大写字母并输出

$ tr ' ' '\11' < file1.txt
  将文件 file1.txt 内的空格替换为Tab(缩进)并输出

$ tr -s ' ' '\11' < file1.txt
  将文件 file1.txt 内连续的空格替换为一个Tab(缩进)并输出

$ tr -d ' ' < file1.txt
  删除文件 file1.txt 内所有空格并输出

■ grep

grep命令用于在一个或多个文件中查找符合特定模式的行。

(例)
$ grep '[A-Z]' file1.txt
  在文件 file1.txt 中查找包含英文大写字母的行并输出

$ grep '[A-Z]...[0-9]' file1.txt
  在文件 file1.txt 中查找包含英文大写字母开头并以数字结尾的行并输出

$ grep -v 'UNIX' file1.txt
  在文件 file1.txt 中查找不包含 UNIX 的行并输出

$ grep -l 'Unix' *.txt
  在 *.txt 中查找包含 Unix 的文件并输出文件名

$ grep -n 'Unix' file1.txt
  在文件 file1.txt 中查找不包含 UNIX 的行并带行号输出

■ sort

sort 命令用来对输入行进行排序并输出。

(例)
$ sort < file1.txt
以升序输出 file1.txt 的各行

$ sort -u < file1.txt
以升序输出 file1.txt 的各行,重复的行只输出一次

$ sort -r < file1.txt
以降序输出 file1.txt 的各行

$ sort file1.txt -o file2.txt
将 file1.txt 的各行排序并输出到文件 file2.txt

$ sort -n file1.txt
将 file1.txt 的各行以数值排序并输出

$ sort +1n file.txt
将 file1.txt 的各行根据第2字段(空格分割)以数值排序并输出
  第2フィールドを使って数値的に並び替える。

$ sort +2n -t: file1.txt
将 file1.txt 的各行根据第3字段(冒号分割)以数值排序并输出

■ uniq

uniq 命令用于查找文件中的重复行(输出不重复的行)。

(命令格式) uniq in_file out_file

(例)
$ uniq file1.txt
输出 file1.txt 中不重复的行

$ uniq -d file1.txt
输出 file1.txt 中有重复的行

$ uniq -c file1.txt
统计 file1.txt 中各行的重复次数并输出

※注: 本文翻译整理自《UNIXツール

用命令一次替换多个文件中的字符串

, ,

下面这个命令,不时要翻出来用一下:

find /path/to/ -name "*.html" -type f | xargs grep -l -e "StringOrPattern" | xargs -n 100 perl -e "s/StringOrPattern/AfterReplace/g;" -pi

没有 Perl 的 Linux/Unix 环境应该很少吧?如果没有perl,这个命令可不好使。

命令太长,难记,因此在这儿纪录一下。

几则 Solaris 命令

,

查看OS版本
$ uname -aX

查看硬盘序列号
$ iostat -En

查看系统安装日期
$ ls -l /var/sadm/system/admin/INST_RELEASE
$ cat /var/sadm/system/admin/INST_RELEASE


查看内存使用率
$ ps -e -opid,vsz,rss,args | awk '{t=t+$2}END{print t/1024}'
$ ps -e -opid,vsz,rss,args | sort -nr +1


查看剩余inode数
$ df -e /

在Perl程序中关闭输入回显功能

, ,

在Perl程序中,若有输入密码的功能,或许你不想让输入的内容回显到屏幕上,这时候可以用stty命令让echo无效。

程序例:
#!/usr/bin/perl

system("stty -echo");
print "Enter your password: ";
chomp($passwd = <>);
print "\n(Test) Your password is $passwd\n";
system("stty echo");

ncftp命令用法小结

,

对我来说,用ncftp的目的是一次取得目录下的所有文件。其用法如下:

# ncftp
> open -u user -p passwd server_ip_or_name
> cd remote_dir
> get [-R] file_or_dir
> bye

Linux用户通讯命令小结

,

命令: talk write wall mesg

talk

功能:
与其他在线用户对谈。

格式:
$ talk user [tty]

使用例:
$ talk jlake
$ talk jlake@linuxbox1 pts/2


write

功能:
给其他在线用户发送消息。

格式:
$ write user [tty]

使用例:
$ write jlake
$ write jlake@linuxbox2 pts/2


wall

说明:
发消息给系统中所有用户。(write all)

格式:
$ wall

使用例:
$ wall
hello everyone!
<Crtl+D>


mesg

功能:
允许或禁止其他人发送消息到自己的终端。

格式:
$ mesg [y|n]

y : 接受消息。
n : 不接受消息。

使用例:
$ mesg ←显示当前状态。
$ mesg n ←接收消息。
$ mesg y ←不接受消息。


提示:
rusers 命令可以列出所有局域网上的登录用户。

IP forwarding设置纪录

, , ,

### 背景 ###

server1 和 server2 所处的网段不一样,从 server1 不能直接访问 server2。

server1的IP地址:
eth0 10.224.17.10/255.255.255.0


server2的IP地址:
eth0 172.16.0.20/255.255.255.0


中间有一个服务器server3,有两个网卡,可以同时访问server1和server2

server3的IP地址:
eth0 10.224.17.30/255.255.255.0
eth1 172.16.0.30/255.255.255.0


这时候,只要在server3上进行IP forwading的设置,并在server1和server2进行静态路由的设置,就能实现server1和server2间的互访。
即: server1 <--> server3 <--> server2

### 设置纪录 ###

server3的设置

# vi /etc/hosts.allow
追加
ALL : 10.224.17.10 172.16.0.20

# vi /etc/hosts.deny
追加
ALL : ALL

# vi /etc/sysctl.conf
修改或追加
net.ipv4.ip_forward = 1

# sysctl -w 'net.ipv4.ip_forward=1'

server1的设置

# vi /etc/sysconfig/static-routes
追加
any net 172.16.0.0 netmask 255.255.255.0 gw 10.224.17.30 dev eth0

# /etc/init.d/network restart

server2的设置

# vi /etc/sysconfig/static-routes
追加
any net 10.224.17.0 netmask 255.255.255.0 gw 172.16.0.30 dev eth0

# /etc/init.d/network restart
November 2009
S M T W T F S
October 2009December 2009
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30