bash编程需要掌握的基础命令

bash编程需要掌握的基础命令

引用:
### bash是一种胶水语言,通过调用各种命令来完成任务
### 掌握的命令越多,需要自己实现的过程就越少,从而快速完成任务/实现目的

### bash编程需要掌握的基础命令


## 文本
cat,zcat,bzcat
tac
echo
tail
head
cut
awk
grep
sed
diff
sort
uniq
tr
wc
tee
paste
iconv

## 算术运算
bc
awk

## 进程,命令间协作、管理
xargs
nohup
eval
kill
trap
builtin
command
sleep
ps
wait
which

## 网洛管理
ping
arping
ifconfig
netstat
route
nmap
netcat
iptables
sysctl

## 系统信息及管理
uptime
uname
free
fdisk
du
mount,umount
shutdown
hostname

## 帐号,用户
id
who
whiami
last
w
groups
useradd,userdel
chmod
chown

## 时间、日期
date
cal
ntpdate

## 文件,目录
ls
stat
md5sum
file
tar
gzip,gunzip
bzip2,bunzip2
basename
dirname
find
install
mktemp
mkdir -p
mv
rm -f
cp
readlink
touch
rename
rsync
ln
pwd

## 人机交互
read
stty -echo

## 定时作业
crontab

## 其它
seq
umask

## 变量
$RANDOM
$SECONDS
$SSH_CONNECTION
$UID
$LOGNAME
$PS1,$PS2,$PS3
$HOSTNAME
$PWD
暂时想到这么多,将不断更新
不想一一解释这些命令怎么用
因为很多人不是不了解一个命令怎么用,而是根本不知道有这样的命令
如果知道有这些命令,再通过搜索引擎,man,info手册等文档来了解、学习就可以了

这些命令都很相当常用,相当好用
了解的程度要达到了解常用的选项,用法,和影响其行为的配置文件或其行为影响的文件

举些例子
ls的 -l, -1, -lrt等选项
并能掌握 ls abc* &>/dev/null && echo "Some files exist"
mkdir的-p选项
可以通过install -m 755 src dest来代替 cp srt desc && chmod 755 desc
并尝试使用各种不同的命令,选项来达到同一目的,并对比效率,可读性等

bash编程的水平,和掌握的命令/工具的数量是有很大关系的
初学者有时候会对一个简单的问题不知从何下手
如“如何得到开机时间多长”,“如何到得网卡ip,mac”
“如何得到cpu,内存、磁盘容量信息”等
如果知道uptime,ifconfig,free, fdisk,等命令这些问题就迎刃而解了

欢迎大家跟帖补充命令
如果觉得哪个命令有不常用但又非常好用的用法, 也欢迎共享

      
li 兄 的帖,该顶      
真好啊       
好,如果加以说明每个用法的功能,将更好.      
引用:
原帖由 guanghai 于 2008-3-31 10:16 发表
好,如果加以说明每个用法的功能,将更好.
我已经在一楼说明了
关键在于知不知道这一个命令的存在, 而不应该是知不知道这个命令要怎么用

如果我再说明一下用法功能
估计还是有人跳出来说, 再举些例说明, 再给些脚本示范

100个命令, 用不了几天就可以把常用的用法掌握
再说不是小学生了, 学习靠主动      
linux程序设计,用心学习中      
很喜欢这个论坛,因为有很多热心人,好心人,爱好者

开源盛世,盛世爱好。身边软件,软件梦想。      
引用:
原帖由 c-aries 于 2008-4-1 02:42 发表
很喜欢这个论坛,因为有很多热心人,好心人,爱好者

开源盛世,盛世爱好。身边软件,软件梦想。
你快乐, 所以我快乐       
##文本
加入數個指令

1) fold
用來指定行長度
复制内容到剪贴板
代码:
fang@bash ~
$ perl -e '$x="long line" x 100; print $x' > junk

fang@bash ~
$ cat junk
long linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong linelong line
fang@bash ~
$ fold -w 30 < junk
long linelong linelong linelon
g linelong linelong linelong l
inelong linelong linelong line
long linelong linelong linelon
g linelong linelong linelong l
inelong linelong linelong line
long linelong linelong linelon
g linelong linelong linelong l
inelong linelong linelong line
long linelong linelong linelon
g linelong linelong linelong l
inelong linelong linelong line
long linelong linelong linelon
g linelong linelong linelong l
inelong linelong linelong line
long linelong linelong linelon
g linelong linelong linelong l
inelong linelong linelong line
long linelong linelong linelon
g linelong linelong linelong l
inelong linelong linelong line
long linelong linelong linelon
g linelong linelong linelong l
inelong linelong linelong line
long linelong linelong linelon
g linelong linelong linelong l
inelong linelong linelong line
long linelong linelong linelon
g linelong linelong linelong l
inelong linelong linelong line
2) diff3
   比較三個檔案
复制内容到剪贴板
代码:
$ diff3 bin/pass bin/pass.awk bin/pass.pl
====
1:1,24c
  #! /bin/bash
  # password generator Usage: $0 [argument]
  # [email]twf_cc@yahoo.com.hk[/email]
  
  keyword=({0..9} {a..z} {A..Z})
  length=${#keyword[@]}   
  output=""
  argu=$1
  howmany=${argu:-8}
  step=1
  
    if [[ $argu =~ [^0-9]+ ]]
      then
        howmany=8
    fi
    while (( step <= howmany ))
      do
        char=${keyword[$(( RANDOM % length ))]} # get 1 char, using RANDOM to
        output="${output}${char}"               # gain subscript of array
        (( step++ ))
      done
  
    printf '%s\n' "$output"
  
2:1,16c
  #! /bin/gawk -f
  # password generator, [email]twf_cc@yahoo.com.hk[/email]
   
  BEGIN{
        word="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
        wlength=length(word)
        picks=8  # change if you need more than 8 chars
        
          for (i=1;i<=picks;i++){
             srand()
             random=int(rand() * wlength * i) % wlength
             char=substr(word, random, 1)
             output=output char
            }
             print output
       }
3:1,17c
  #! /usr/bin/perl
  
  $base = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" ;
  $out = "" ;
  $howmany = $ARGV[0] ;
  $length = length($base) ;
   
    $howmany = 8 if (@ARGV <= 0 || $howmany =~ /\D+/) ;
   
    for ($i = 1 ; $i <= $howmany ; $i++) {
      srand ;
      $random = int(rand() * $length * $$) % $length ;
      $char = substr($base, $random, 1) ;
      $out = "$out$char" ;
      }
   
    print "$out\n"
3) sdiff
   
垂直比較兩個檔案
复制内容到剪贴板
代码:
$ sdiff bin/pass.awk bin/pass
#! /bin/gawk -f                                               | #! /bin/bash
# password generator, [email]twf_cc@yahoo.com.hk[/email]                     | # password generator Usage: $0 [argument]
                                                              | # [email]twf_cc@yahoo.com.hk[/email]
BEGIN{                                                        |
      word="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLM | keyword=({0..9} {a..z} {A..Z})
      wlength=length(word)                                    | length=${#keyword[@]}   
      picks=8  # change if you need more than 8 chars         | output=""
                                                              | argu=$1
        for (i=1;i<=picks;i++){                               | howmany=${argu:-8}
           srand()                                            | step=1
           random=int(rand() * wlength * i) % wlength         |
           char=substr(word, random, 1)                       |   if [[ $argu =~ [^0-9]+ ]]
           output=output char                                 |     then
          }                                                   |       howmany=8
           print output                                       |   fi
     }                                                        |   while (( step <= howmany ))
                                                              >     do
                                                              >       char=${keyword[$(( RANDOM % length ))]} # get 1 char, u
                                                              >       output="${output}${char}"               # gain subscrip
                                                              >       (( step++ ))
                                                              >     done
                                                              >
                                                              >   printf '%s\n' "$output"
                                                              >
4) fmt
   用 fold 會把字硬生生截開, fmt -s 可不會
复制内容到剪贴板
代码:
fang@bash ~
$ perl -e '$x="long line" x 100; print $x' > junk

fang@bash ~
$ fmt -w40 < junk
long linelong linelong linelong
linelong linelong linelong linelong
linelong linelong linelong linelong
linelong linelong linelong linelong
linelong linelong linelong linelong
linelong linelong linelong linelong
linelong linelong linelong linelong
linelong linelong linelong linelong
linelong linelong linelong linelong
linelong linelong linelong linelong
linelong linelong linelong linelong
linelong linelong linelong linelong
linelong linelong linelong linelong
linelong linelong linelong linelong
linelong linelong linelong linelong
linelong linelong linelong linelong
linelong linelong linelong linelong
linelong linelong linelong linelong
linelong linelong linelong linelong
linelong linelong linelong linelong
linelong linelong linelong linelong
linelong linelong linelong linelong
linelong linelong linelong linelong
linelong linelong linelong linelong
linelong linelong linelong linelong
line
      
journalist
真好!真好!又长知识了!