本篇包含命令:
sort file uniq cut tee basename dirname diff col
fdisk 分区
alias 别名化命令
别名化命令 alias timedir="ls -art"
shell shell 控制命令
删除一个用户组时更改所有文件的组属性:
find / -gid
-exec chgrp {} \;
分区:fdisk -- 创建分区;设定分区类型:83为linux,82为交换分区
建文件系统:mkfs -t ext2 /dev/hda1
建交换分区:mkswap -c /dev/hda2 ;swapon /dev/hda2
/dev/console
/dev/tty
/dev/null
测试一个shell文件,并看到它运行的所有步骤 sh -x script-name
shell 命令:
read命令获得下一行的输入,并把它赋给变量 read filename
使用命令行参数: $0代表命令名称;$*代表所有参数列表;$#代表命令行参数的个数
命令行返回值: 也就是命令执行的返回值,同时$?保存命令返回值,0代表成功。
case 循环判断结构
case $ver in
pattern|pattern|* ) statements;;
esac
if判断结构
if 命令组(看最后一个的状态)
then 命令组
else 命令组
fi
使用test命令 检查文件状态、用户权限、变量性质判断;! 用于取反
- f | d | r | s | w | x
- eq | ne | ge | gt | le | lt
for循环结构
for i in
do 作用于$i的命令组
done
while循环
while 命令组
do 命令组
done
新shell的运行
无论何时发出一个命令,一个新的shell就启动了;它集成父shell的许多特性和环境
export 变量 把一个shell输出或传递到子shell序列中。
多用户和多任务命令
at 给定时间执行
batch 当系统负载允许时执行
cron 执行已安排好的命令
crontab 单个用户
kill 终止进程
nice 在进程启动前调整它的优先级
nohup 用户退出进程仍然执行
ps 显示进程信息
renice 调整正在运行的进程优先级
w 显示谁已登录和他们正在做什么
who 显示系统的登录用户
kill -9
861
kill -l 列出有效的信号
当用户推出时,Linux把一个挂起信号(信号值为1)发送给shell启动的所有后台进程。该信号终止那些进程,除非是nohup启动的
默认时,kill的信号是15,信号9为无条件撤销信号。(9立即杀死进程,进程无法完成一些动作会有副作用)
kill 0 为终止所有的后台作业
vi
a添加光标后;i添加光标前
w file_name 存文件
watch命令,可以反复执行某个命令。常用于监测文件变化
[macg@machome ~]$ watch ls -l test
Every 2.0s: ls -l
test
Sun Jul 16 21:53:59 2006
-rw-rw-r-- 1 macg macg 1558 Jul 16 21:52
test
|
whereis
[root@localhost macg]# whereis fdisk
fdisk: /sbin/fdisk /usr/share/man/man8/fdisk.8.gz
|
r指令不跟任何参数,是执行上一个指令
$ls -l
$r
ls -l
当你不确定command的具体拼写时,也可用man -k
$ man -k whoam
whoami
whoami
(1b)
- display the effective current username
/usr/openwin/share/man/windex: No such file or directory
whoami
whoami
(1b)
- display the effective current username
|
clear 清屏
[macg@localhost tiptest]$ clear
虚拟控制台 (telnet用不到)
Alt+F1~Alt+F4来访问
Ctrl+Alt+F1三个键,从图形界面进入字符界面
ctrl+alt+backspace,从图形界面退出到字符界面
startx 手动起xwin
startx
两个xwin下图形化应用
Clock&
|
直接起时钟,图形化
|
admintool&
|
图形化管理
|
可以将多个指令用";"分开同时执行.如
#ls -l;uname -a;more hosts
指令换行用\
常用于./configure这种参数很多的命令行,不同参数不同行
$./configure \
--prefix=/usr/local/apache2 \
--enable-so \
--enable-deflate \
--enable-ssl \
--with-ssl=/usr/local \
--enable-headers
指令里也可带pattern
[root@demo1 tftpboot]# umount /mnt/disk{1,2,3,4,5}
[root@demo1 tftpboot]# mkdir -p /mnt/disk{1,2,3,4,5}
管道 "|"
后面的指令,取前面指令的输出做为其最后一个参数
下面的指令是等价的
netstat -nr | grep 192.168
|
netstat –nr > tmp
grep 192.168 tmp
|
grep "hello" file.txt | wc -l |
grep "hello"
file.txt> tmp
wc -l tmp
|
三层管道过滤命令
,理解成一层一层向后送(从左向右)
rpm –qa | grep ed |
more
管道符号的缺陷-----后面的命令只能把前面命令的输出当作其“文件”参数,即后面的命令只能是文件处理命令如more,sort,grep等
如何使管道后面的非文件型命令把前面命令的输出当作自己的输入参数?xargs弥补了管道符号的缺陷.
比如下面,管道命令没起作用,就是单纯的ls -l
$find /export/home/macg -name "*.tar" | ls -l
total 5956
-rw-r--r-- 1
macg
other 1356798
Mar 2 03:18 119254-34.zip
-rw-r--r-- 1
macg
other
81408 Feb 3 1999 data.tar
drwxr-xr-x 7
macg
other
1024 Dec 28 22:33 mysqltmp
-rw-r--r-- 1
macg
other
3294 Feb 3 1999
test3.c
|
$find /export/home/macg -name
"*.tar" | xargs ls -l
-rw-r--r-- 1
macg
other
81408 Feb 3 1999
/export/home/macg/data.tar
-rw-r--r-- 1
macg
other
81408 Feb 3 1999
/export/home/macg/www/data.tar
-rw-r--r-- 1
macg
other
122880 Feb 26 23:00 /export/home/macg/www/test.tar |
find 到文件并且用file显示每个文件的类型
$find /export/home/macg -name "*.tar" | xargs file
/export/home/macg/data.tar:
USTAR tar archive
/export/home/macg/www/data.tar:
USTAR tar archive
/export/home/macg/www/test.tar:
USTAR tar archive |
标准文件0,1,2
- stdin 标准输入,文件描述符为0
- stdout 标准输出,文件描述符为1
- stderr 标准错误输出,文件描述符为2
command 1>file1
2>file2
执行一个命令
将stdout(1)输出到file1
将stderr(2)输出到file2
command
1>file1
2>&1
将stdout(1),stderr(2)都输出到file1
引用标准I/O文件,要加&
>&1
/dev/null
是一个特殊文件,所有输入到该文件的数据都会被丢弃
> /dev/null 的意思就是丢弃所有的输出内容,
用处在于,一些自动运行的程序,比如cron,不带> /dev/null
,会将输出发送到用户信箱中(send mail)
> /dev/null
2>&1
最彻底的输出关闭
一种全新的输出重定向(tail –f file+
command >file)
[macg@localhost tiptest]$ tail -f output
&
[1] 4068
|
必须运行在后台,否则系统会“等待”
|
[macg@localhost tiptest]$ ls -l
>> output |
执行命令,其输出重定向到前面的文件
此时系统不回显命令输出 |
[macg@localhost tiptest]$ total 1304
-rw-rw-r-- 1 macg
macg
108 Jan 20 02:21 111-tmp.txt
-rw-rw-r-- 1 macg macg 1269764
Jan 3 11:24 asian_0264_4.mpg
-rw-rw-r-- 1 macg
macg
175 Jan 21 00:51 autologin.sh
-rw-rw-r-- 1 macg
macg
156 Jan 20 10:05 in.sh
-rw-rw-r-- 1 macg
macg
0 Jan 21 01:32 output
-rw-rw-r-- 1 macg
macg
365 Dec 22 2006 testm.c
-rw-rw-r-- 1 macg
macg
156 Dec 3 2006 tt.c
-rw-rw-r-- 1 macg
macg
173 Jan 20 03:07 ttt1
[macg@localhost tiptest]$
|
但后台运行的tail –f output回显命令输出 |
重定向追加?
ps -ef > temp.log
ls -l > temp.log |
overwrite
写入文件并覆盖旧文件
|
>>
[mac@machome ~]$ more test.sh
expr 3 '+' 2
echo $?
[mac@machome ~]$ echo echo hello >>
test.sh
[mac@machome ~]$ more test.sh
expr 3 '+' 2
echo $?
echo hello
|
append
加到文件的尾部,保留旧文件内容
|
sort
对文件中的行按字母重新进行排序(显然只能针对文本文件)
$ more test.sh
expr 3 '+' 2
echo $?
$ sort test.sh
echo
$?
重新排序
expr 3 '+'
2 重新排序
sort –n 按数字排序
尽管也能用sort字母法排数字,但还是建议用sort –n排数字,因为字母排数字,是一个一个字符排的,会出现"99">"101"的错误
# ls -l | gawk '{print $5,$9}'|sort
107 checkstring.c
11147 tmp
240 tiptest.c
255 testtmp.tmp
289 testtmp
3301 file.c
3648 tmp.c
4715 checkstring
4823 tiptest
54
Makefile
sort 比较的是首数字(首字母),所以出现54反而大于4823的错误
7852
tmp.o
# ls -l | gawk '{print $5,$9}'|sort -n
54
Makefile
sort -n 才是真正的按整个数字排
107 checkstring.c
240 tiptest.c
255 testtmp.tmp
289 testtmp
3301 file.c
3648 tmp.c
4715 checkstring
4823 tiptest
7852 tmp.o
11147
tmp
sort是行排序,sort +num是列排序
· sort +num
对第几列(从0开始,以空格分列)按字母排
[macg@machome]:/export/home/macg>$ls -l |
sort +8
total 5956
0
1
2
3
4
5 6
7
8
-rw-r--r-- 1
macg
other 1356798
Mar 2 03:18 119254-34.zip
drwxr-xr-x 7
macg
other
1024 Dec 28 22:33 mysqltmp
drwxr-xr-x 4
macg
other
512 Dec 3 23:15 shellsample
drwxr-xr-x 2
macg
other
512 Dec 25 17:24 temp
drwxr-xr-x 4
macg
other
512 Dec 21 13:40 test
drwxr-xr-x 5
macg
other
1536 Feb 26 23:00 www