nohup /home/hu/projects/remap64/bin/demlinux.out 11 /home/hu/gt/N36E116/ /home/hu/gt/out1 /home/hu/gt/out1/base 2>&1 >demlog.log &
>覆盖,>>追加
2>&1 表示不仅命令行正常的输出保存到app.log中,产生错误信息的输出也保存到app.log文件中;
&
& 将任务放到后台运行
——-
Shell可以将标准输入(stdin)、标准输出(stdout)、标准错误输出(stderr)重定向为文件。也就是说,任何命令都可以用shell的“<”操作符将输入数据来源从stdin重定向为文件,比如:
$ mycommand < infile
同样,任何命令都可以将数据输出的目的地从stdout重定向为文件。
$ mycommand > outfile //创建或覆盖outfile
$ mycommand >> outfile //附加到outfile原有内容的末尾
一个命令也能够将stderr重定向到文件,同时仍然将写入标准输出的内容打印在屏幕上:
$ mycommand 2> errorfile
下面的命令将stdout及stderr都重定向到文件:
$ mycommand > outfile 2> errorfile //输出到不同文件
$ mycommand >& outfile //输出到一个文件
——
ps -ef | grep uname
pkill dout.out
——-
查看进程
ps 列出进程。
uptime 查看系统负载。
w 列出所有用户的活动进程。
top 监视进程资源占用情况。
gnome-system-monitor 监视系统负载和进程的图形化工具。
xload 监视系统负载情况的简单图形化工具。
free 显示可用内存情况。
进程(process)是Linux系统的工作单位。所运行的每个程序都会引发一个或多个进程。Linux提供了一些命令用于查看、操作这些进程。每个进程都以一个独有的数字代码标示,称作进程ID或PID。
进程与任务(参看第32页“Shell任务控制”)不同:进程是操作系统的一部分,任务却是更高层的结构,仅由其所在的shell控制。运行中的程序包含一个或多个进程;而任务包含一个或多个由shell命令执行的程序。
ps stdin stdout -file –opt –help –versionps [options]
ps命令显示正在运行的进程信息,也可显示其他用户的进程。
$ ps
ps
PID TTY TIME CMD
4706 pts/2 00:00:01 bash
15007 pts/2 00:00:00 emacs
16729 pts/2 00:00:00 ps
ps至少有80个选项,这里只讨论其中几个最有用的组合。如果你觉得选项名看起来杂乱无章,那是因为ps命令(GNU ps)刻意集成了一些其他Unix系统的ps命令的功能,试图兼容其他系统。
查看自己的进程:
$ ps -ux
查看用户smith的所有进程:
$ ps -U smith
查看特定程序引发的所有进程:
$ ps -C program_name
查看终端N的进程:
$ ps -tN
查看特定进程1,2及3505:
$ ps -p1,2,3505
对所有进程连同命令行,截断其超出屏幕宽度的部分:
$ ps -ef
所有进程连同完整的命令行:
$ ps -efww
以缩排方式呈现所有进程的层次关系:
$ ps -efH
记住,可以用grep或其他过滤程序从ps的输出中提取特定的信息。
$ ps -ux | grep myprogram
uptime stdin stdout -file –opt –help –versionuptime
uptime命令用于显示自上次启动后,系统运行了多长时间。
$ uptime
10:54pm up 8 days, 3:44, 3 users, load average: 0.89, 1.00, 2.15
自左至右,各字段的意义分别为:当前时间(10:54pm),系统运行时间(8 days,3hours,44minutes),当前登录的用户数(3),1分钟系统平均负载(0.89),5分钟系统平均负载(1.00),15分钟系统平均负载(2.15)。平均负载是单位时间段内活动进程的平均数。
w stdin stdout -file –opt –help –versionw [username]
w命令用于显示每个已登录用户的每个shell的当前进程:
$ w
10:51pm up 8 days, 3:42, 8 users,
load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
barrett pts/0 :0 Sat2pm 27:13m 0.07s 0.07s emacs
jones pts/1 host1 6Sep03 2:33m 0.74s 0.21s bash
smith pts/2 host2 6Sep03 0.00s 13.35s 0.04s w
第一行是uptime显示的。其后是各栏信息的标题,分别代表登录用户名、用户终端、源主机或X界面(如有)、登录时间、挂起时间、两种CPU时间的测量值(详情请参阅man w)和当前进程。如果只想看特定用户的信息,请为w提供该用户名。
如果需要精简的输出,试试w-hfs。
常用选项
-h 不显示标题行。
-f 不显示FROM字段。
-s 不显示JCPU列和PCPU字段。
top stdin stdout -file –opt –help –versiontop [options]
top命令用于监视最活跃的进程,并自动更新显示(比如每秒更新一次)。top是一个交互式的命令行程序,可以在屏幕上更新自己的显示。
$ top
94 processes: 81 sleeping, 1 running, 0 zombie, 11 stopped
CPU states: 1.1% user, 0.5% system, 0.0% nice, 4.5% idle
Mem: 523812K av, 502328K used, 21484K free, 0K shrd, …
-dN 每N秒更新一次显示。
-pN-pM… 只显示PID为N,M,…(最多20个)的进程。
-c 显示进程的命令行参数。
-b 直接在标准输出上显示,不进行屏幕控制。可以使用top-b-n1>outfile将画面快照保存到文件中。
gnome-system-monitor stdin stdout-file–opt–help–versiongnome-system-monitor
gnome-system-monitor是一个图形工具,用于显示每个进程的系统负载、活动进程列表、存储器信息、文件系统信息及其他信息。
xload stdin stdout -file –opt –help –versionxload
xload是X window环境下一个简单的监视工具,能够显示处理器负载(Y轴)与时间(X轴)的关系。如果你的系统是多处理器或多核的,xload将不能为每个处理器或核进行单独显示,只能使用更为强大的工具,诸如gnome-system-monitor等。
常用选项
-update N 每N秒更新一次显示(默认为10秒)。
-scale N 将Y轴N等分(默认为1)。负载增加时,xload将自动增加更多的划分。
-hl color 比例划分线以color颜色显示。
-label X 在图片上打印X字符串(默认为你的主机名)。
Linux内核尽可能地将内存用作缓存区,因此上述例子中,估计的空闲内存包含buffers/cache行,free栏(如,299000K)。
常用选项
-s N 连续运行,每N秒更新一次显示。
-b 以字节为单位显示。
-m 以兆字节为单位显示。
-t 在最后新增行显示总的统计信息。
-o 不显示“buffers/cache”行。
进程控制
kill 终止进程(或传送信号到某进程)。
nice 以特定的优先级启动程序。
renice 进程运行过程中改变其优先级。
进程启动后,可以被停止、重启、终止或者改变优先级。在第32页“shell任务控制”中已经讨论过部分操作,这里将讨论终止和改变优先级操作。
kill stdin stdout -file –opt –help –versionkill [options] [process_ids]
kill命令可以发送信号给进程,可以终止(terminate)(默认操作)、中断(interrupt)、
$ ps -uax | grep emacs
或者,更好的方法是试试pidof命令,它依据进程的名字查找并打印出该进程的PID:
$ pidof emacs
8374
现在,你即使只知道进程的名字,也可以在一条命令行中结束该进程:
$ kill `pidof emacs`
除了位于文件系统中的kill程序外(通常是/bin/kill),许多shell也内置kill命令,虽然两者语法和行为不尽相同。但两者都支持以下用法:
$ kill -N PID
$ kill -NAME PID
上面N是信号的数值,NAME是不含前缀“SIG”的信号名(比如,使用-HUP发送SIGHUP信号)。运行kill-l命令可以查看kill发送信号的完整列表。它的输出取决于是shell内置的kill,还是文件系统中的kill程序。
关于各种信号的说明,请参阅man 7 signal。
nice stdin stdout -file –opt –help –versionnice [-level] command_line
当启动一个需要占用大量系统资源的程序时,你可以通过降低它的优先级,达到“善待”其他进程(或用户)的目的。nice命令的作用是为进程设置一个nice值(nice level),以便减少Linux进程调度器对它的关注。下面例子中,要求系统以优先级7来排序一个超大文件:
$ nice -7 sort VeryLargeFile > outfile
如果运行nice命令时没有指定优先级,则默认为10级。通常进程运行在0级,你可以通过运行不带参数的nice命令查看:
$ nice
0
superuser也可以降低nice级别,提升进程的优先级:
# nice –10 myprogram
(没错,这是“dash负10”。)可以通过ps命令输出的“NI”列查看任务的nice级别:
$ ps -o pid,user,args,nice
renice stdin stdout -file –opt –help –version
renice [+-N] [options]PID
nice命令可以让你按指定的优先级启动程序,而renice命令可以改变正在运行的进程的优先级。
下面的例子中,进程28734的nice级别增加(优先级降低)了5级:
$ renice +5 -p 28734
普通用户可以增加自己的进程nice级别,只有superuser可以降低(增加优先级)进程nice级别,并且可以对所有进程进行操作。级别的可用范围是−20至+20,但是要避免太小的负值,以免干扰关键的系统进程。
常用选项
-p pid 只影响给定PID的进程。也可以省略-p,只提供PID(如,renice+528734)。
-u username 影响给定用户的所有进程。这称为“优化”进程。也许你听过把它当做动词的说法:“进程优先级优化到12。”返回
Shell任务控制
jobs 列出所有运行的任务
& 将任务放到后台运行
^Z 暂停当前(前台)任务
suspend 暂停shell
fg 恢复任务,前台运行该任务
bg 将已暂停的任务放到后台运行
所有Linux的shell都具备任务控制的能力,即有能力在后台(后台多任务运行)或前台(实时现场)运行程序。任务只是shell的工作单位。交互运行命令时,shell将其视为任务,并进行记录。命令结束时,相关任务也就结束了。任务是比Linux进程更高一层次的概念。事实上,Linux OS对任务一无所知,任务仅是由shell进行控制的。
关于任务控制的几个重要术语介绍如下:
前台任务(Foreground job)
在shell中运行,任务完成前shell提示符不会出现,因而不能同时运行其他任务。后台任务(Background job)
在shell中运行,但不独占shell,任务完成前shell提示符就能出现,因而可以在同一个shell下同时运行其他任务。暂停(Suspend)
临时停止执行前台任务。恢复(Resume)
让暂停的任务继续执行。
jobs
内置命令jobs用于列出shell中正在运行的任务。
$ jobs
[1]- Running emacs myfile &
[2]+ Stopped su
左侧的数字是任务编号,+表示该任务默认是受fg(foreground,前台)和bg(background,后台)命令影响的。
&
命令行末尾加上&符号,表示要求shell将该命令放到后台执行。
$ emacs myfile &
[2] 28090
shell运行命令后,输出任务编号2和命令的进程ID:28090。然后立刻输出提示符,不管后台任务是否执行完毕。
^Z
前台任务正在运行时,按下^Z,该任务将被挂起。挂起的任务只是暂停运行,但是其状态会被继续记录。
$ mybigprogram
^Z
[1]+ Stopped mybigprogram
$
对于已挂起的任务mybigprogram,可以通过bg命令将其放到后台继续执行,也可以使用fg命令将其恢复到前台继续执行。
suspend
内置命令suspend的作用是暂停shell,就像对shell本身按下了^Z一样。例如,运行su命令进入另一个shell后,想回到原来的shell中,则可以运行以下命令:
$ whoami
smith
$ su -l
Password: **************
# whoami
root
# suspend
[1]+ Stopped su
$ whoami
smith
bgbg [%jobnumber]
内置命令bg的作用是将挂起的任务放到后台运行。bg命令没有指定参数时,只对最近被挂起的任务起作用。要影响其他某个特定的任务时(可以通过命令jobs列出任务的详细参数),可以在该任务编号前加上百分号,比如:
$ bg %2
某些交互式任务不能保持在后台运行,比如正在等待输入数据的任务。如果你尝试将其放到后台,shell将暂停该任务并显示:
[2]+ Stopped command line here
这时候可用fg将任务放到前台继续运行。
fgfg [%jobnumber]
内置命令fg的作用是将挂起或后台运行的任务放到前台运行。没有指定参数时,fg将自动选择一个任务,通常是最近挂起的任务或者最近放到后台运行的任务。要影响其他某个特定的任务时(可以通过命令jobs列出任务的详细参数),可在该任务编号前加上百分号,比如:
$ fg %2
结束运行中的命令
如果你在shell中启动了一个命令,但是随后希望能立即停止该命令,这时可以按^C。shell会将^C解读为“立即终止当前的前台命令”。因此,在浏览非常长的文件(比如使用cat命令)过程中,可以按^C停止显示:
$ cat bigfile
This is a very long file with many lines. Blah blah blah
blah blah blah blah blah blah ^C
$
要终止后台运行的程序,可以先用fg命令将其放到前台,然后再按下^C;或者,使用kill命令终止它运行(参见第117页“进程控制”)。
通过按^C来终止程序是一种不太友好的方式。如果程序自身有退出的方法,那就应该尽可能
通过按^C来终止程序是一种不太友好的方式。如果程序自身有退出的方法,那就应该尽可能去使用。
程序终止之后的清理
使用^C终止程序可能会使shell处于一种奇怪的状态,比如屏幕显示的不是你输入的字符,而是其他的东西。这是由于程序被终止后,没有机会清理自身。发生这种现象时,可以按以下步骤解决问题:
1.按^J使shell输出提示符。这和Enter键(换行)的作用一样,但在Enter键失效时还可以使用。
2.输入reset命令(即使在你输入时它没有显示,也照样输入),然后再次按下^J,运行该命令。这将让shell回到正常状态。
^C仅在shell环境下才起作用,非shell窗口内按^C是不起作用的。而且,有些程序会拦截^C并忽略,比如文本编辑器emacs。
结束shell
终止shell运行的方法有两个:执行exit命令或按^D:
$ exit
配置shell
为了使shell按照某种特定方式运行,需要对用户目录下的.bash_profile文件和.bashrc文件进行配置。这两个文件都是shell脚本程序(即包含shell命令的可执行文件,详见第187页“shell脚本编程”),每次你登录到系统时,~/.bash_profile都会自动执行;当shell被打开时,~/.bashrc也会自动执行。在这两个文件中,你可以设置变量和别名、运行程序、输出你的星座,或者其他任何你想做的事情。
以上是对Linux和shell的总体介绍,后面的内容将转入Linux命令,会罗列并解释最常用的那些命令,包括文件操作、进程管理、用户操作、网络、多媒体等相关的命令。