文档视界 最新最全的文档下载
当前位置:文档视界 › linux的shell技巧(很实用)

linux的shell技巧(很实用)

linux的shell技巧(很实用)
linux的shell技巧(很实用)

引言

Shell作为Unix系操作系统当中最有魅力且不可或缺的组件,经过数十载的洗礼不仅没有被淘汰,而且愈加变得成熟稳健,究其原因,大概因为它是个非常稳固的粘合剂,能够把大量功能强大的组件任意配搭,总能很好很快地完成用户的任务。

1.以sudo运行上条命令

$sudo!!

大家应该都知sudo,不解释。但通常出现的情况是,敲完命令执行后报错才发现忘了sudo。这时候,新手用户就会:按上箭头,按左箭头,盯着光标回到开始处,输入sudo,回车;高手用户就蛋定多了,按Ctrl-p,按Ctrl-a,输入sudo,回车。

这里介绍这个是天外飞仙级别的,对,就直接sudo!!。

当然这几种解决方式效果是完全一样的,只是款不一样,嗯,不解释。

两个感叹号其实是bash的一个特性,称为事件引用符(event designators)。!!其实相当于!-1,引用前一条命令,当然也可以!-2,!-50。默认情况下bash会在~/.bash_history文件内记录用户执行的最近500条命令,history命令可以显示这些命令。

关于事件引用符的更多用法可以深入阅读The Definitive Guide to Bash Command Line History。

2.以HTTP方式共享当前文件夹的文件

$python-m SimpleHTTPServer

这命令启动了Python的SimpleHTTPServer模块,考虑到Python在绝大多数的Linux发行版当中都默认安装,所以这个命令很可能是最简单的跨平台传文件的方法。

命令执行后将在本机8000端口开放HTTP服务,在其他能访问本机的机器的浏览器打开ttp://ip:8000即打开一个目录列表,点击即可下载。

3.在以普通用户打开的vim当中保存一个root用户文件

:w!sudo tee%

这题目读起来纠结,其实是很常见的,常常忘记了sudo就直接用vim编辑/

etc内的文件,(不过也不一定,vim发现保存的文件无法保存时候会提示)等

编辑好了,保存时候才发现没权限。曲线方法是先保存个临时文件,退出后再sudo cp回去。不过实际上在vim里面可以直接完成这个过程的,命令就是如此。

查阅vim的文档(输入:help:w),会提到命令:w!{cmd},让vim执行一个外部命令{cmd},然后把当前缓冲区的内容从stdin传入。

tee是一个把stdin保存到文件的小工具。

而%,是vim当中一个只读寄存器的名字,总保存着当前编辑文件的文件路径。

所以执行这个命令,就相当于从vim外部修改了当前编辑的文件,好完工。

4.切换回上一个目录

$cd-

应该不少人都知道这个,横杆-代表上一个目录的路径。

实际上cd-就是cd$OLDPWD的简写,bash的固定变量$OLDPWD总保存着之前一个目录的路径。

相对地,$PWD总保存着当前目录的路径。这些变量在编写shell脚本时候相当有用。

5.替换上一条命令中的一个短语

$^foo^bar^

又是另外一个事件引用符(event designator),可以把上一条命令当中的foo 替换成bar。

在需要重复运行调试一道长长的命令,需要测试某个参数时候,用这个命令会比较实用;但多数人会首先选择按上箭头提出上道命令,再移动光标去修改某参数,这样更直观,但效率上就不够使用引用符高,而且在脚本中用这个方法可以简化很多。

这道命令的原始样式应该是这样的:

!!:s/foo/bar/

本文一开始介绍过!!,后面的一段大家应该很熟悉,vim、sed的替换操作都是这样的语法。

关于事件引用符的更多用法可以深入阅读The Definitive Guide to Bash Command Line History

6.快速备份一个文件

$cp filename{,.bak}

这道命令把filename文件拷贝成filename.bak,大家应该在一些比较复杂的安装教程里面见过这样的用法。其原理就在于bash对大括号的展开操作,filename{,.bak}这一段会被展开成filename filename.bak再传给cp,于是就有了备份的命令了。

大括号在bash里面是一个排列的意义,可以试试这个:

$echo{a,b,c}{a,b,c}{a,b,c}

将输出三个集合的全排列:

aaa aab aac aba abb abc aca acb acc

baa bab bac bba bbb bbc bca bcb bcc

caa cab cac cba cbb cbc cca ccb ccc

关于shell当中的集合操作,可深入阅读“Set Operations in the Unix Shell”

7.免密码ssh登录主机

$ssh-copy-id remote-machine

这个命令把当前用户的公钥串写入到远程主机的~/.ssh/authorized_keys内,这样下次使用ssh登录的时候,远程主机就直接根据这串密钥完成身份校验,不再询问密码了。前提是你当前用户有生成了公钥,默认是没有的,先执行ssh-keygen试试吧!

这个命令如果用手工完成,是这样的:

your-machine$scp~/.ssh/identity.pub remote-machine:

your-machine$ssh remote-machine

remote-machine$cat identity.pub>>~/.ssh/authorized_keys

如果你想删掉远程主机上的密钥,直接打开authorized_keys,搜索你的用户名,删除那行,即可。

8.抓取Linux桌面的视频

$ffmpeg-f x11grab-s wxga-r25-i:0.0-sameq/tmp/out.mpg

我们在一些视频网站上看到别人的3D桌面怎么怎么酷的视频,通常就是这么来的,ffmpeg可以直接解码X11的图形,并转换到相应输出格式。

ffmpeg的通常用法是,根据一堆参数,输出一个文件,输出文件通常放最后,下面解析下几个参数:

-f x11grab指定输入类型。因为x11的缓冲区不是普通的视频文件可以侦测格式,必须指定后ffmpeg才知道如何获得输入。

-s wxga设置抓取区域的大小。wxga是1366*768的标准说法,也可以换成-s 800×600的写法。

-r25设置帧率,即每秒抓取的画面数。

-i:0.0设置输入源,本地X默认在0.0

-sameq保持跟输入流一样的图像质量,以用来后期处理。

后记

说Shell是一种编程语言,可能有些尴尬,虽然很多人每天都在用Shell,但从来没见它荣登TIOBE编程语言排行榜之类的,可以说毫无名分,因为很多用户没意识到它是一种语言,只当做这是一个能够很好完成任务的工具,基本得理所当然,就好像GUI程序的菜单、按钮一样。

掌握Shell,通常能够让任务在数秒钟内完成,这就让Shell跟C、Perl、Python 这些语言区别开来,没人否认后者更能胜任更多的任务,但是他们是在不同的层面上去做,Shell依赖大量的系统组件黏合调用,而后者依赖各种库,各所擅长不同的应用领域,比喻就是,Shell是混凝土,可以很方便地粘合一些建筑组件而成为稳固的高楼大厦;但同样是粘合剂,粘玻璃窗、粘书报、粘皮鞋,混凝土是绝对不合适的,Shell并不擅长一些细致操作,比如它连浮点运算都不支持,更别提什么图形运算什么的。但这并不妨碍Shell来帮我们完成很多粗重任务。

Shell的工作方式,大多数入门用户会觉得枯燥难学,而所谓的经典教材也离不开《Advanced Bash-Scripting》、《Bash Guide for Beginners》,但类似本文这样的一些“雕虫小技”因为难登大雅之堂绝不会收录进去。这情况如果象国外一些unix用户比较多的地方会有很好改善,即使是新手,偶尔看看别人的操作都能“偷师”一手,我编译本系列文章其实也就希望稍微改善一下这个状况。

(二)

1.用你最喜欢的编辑器来敲命令

command

在已经敲完的命令后按,会打开一个你指定的编辑器(比如vim,通过环境变量$EDITOR指定),里面就是你刚输入的命令,然后爱怎么编辑就怎么编辑吧,特别是那些参数异常复杂的程序,比如mencoder/ffmpeg,一个命令动辄3、4行的,要修改其中的参数,这个方法最合适不过了,保存退出后自动执行这个程序。

实际上这是readline库的功能,在默认情况下,bash使用的是emacs模式的命令行操作方式,是调用这个功能的一个绑定。如果你习惯使用vi模式,按可以实现同样功能。

如果你喜欢别的编辑器,可以在~/.bashrc里面放上比如export EDITOR

=nano的命令。

另外一个修改命令的方法是使用fc命令(Fix Command),在编辑器里面打开上一句命令。我们的第一辑连载提过一个^foo^bar^命令可以用fc来实现:fc-s foo=bar。

2.清空或创建一个文件

>file.txt

>在shell里面是标准输出重定向符,即把(前部个命令的)命令行输出转往一个文件内,但这里没有“前部命令”,输出为空,于是就覆盖(或创建)成一个空文件了。

有些脚本的写法是:>file.txt,因为:是bash默认存在的空函数。

单纯创建文件也可以用$touch file.txt,touch本来是用作修改文件的时间戳,但如果文件不存在,就自动创建了。

3.用ssh创建端口转发通道

ssh-N-L2001:remotehost:80user@somemachine

这个命令在本机打开了2001端口,对本机2001端口的请求通过somemachine 作为跳板,转到remotehost的80端口上。

实现效果跟术语反向代理是相似的,实际上就是端口转发,注意上面的描述涉及了3台主机,但当然somemachine可以变成localhost。

这个命令比较抽象,但有时候是很有用的,比如因为众所周知的原因国内的IP 的80端口无法使用,又或者公司的防火墙只给外网开了ssh端口,需要访问内

部服务器一个web应用,以及需要访问某些限定了来源IP的服务,就可以用上这个方法了。

举一个具体例子,运行:

ssh-f-N-L0.0.0.0:443:https://www.docsj.com/doc/4a8642118.html,:https://www.docsj.com/doc/4a8642118.html,

ssh-f-N-L0.0.0.0:80:https://www.docsj.com/doc/4a8642118.html,:https://www.docsj.com/doc/4a8642118.html,

然后在/etc/hosts里面添加https://www.docsj.com/doc/4a8642118.html,,好吧剩下的你懂的。

当然通常做这个功能的反向代理,应该要用squid、nginx之类,ssh就算是轻量级的尝试吧!

4.重置终端

reset

如果你试过不小心cat了某个二进制文件,很可能整个终端就傻掉了,可能不会换行,没法回显,大堆乱码之类的,这时候敲入reset回车,不管命令有没有显示,就能回复正常了。

实际上reset命令只是输出了一些特殊字符,我们看BusyBox里面最简单的reset程序的实现:

printf("\033c\033(K\033[J\033[0m\033[?25h");

输出的这些字符对Shell是有特殊意义的:

\033c:“ESC c”–发送重置命令;

\033(K:“ESC(K”–重载终端的字符映射;

\033[J:“ESC[J”–清空终端内容;

\033[0m:“ESC[0m”–初始化字符显示属性;

\033[?25h:“ESC[?25h”–让光标可见;

其中字符显示属性经常用来设定打印字符的颜色等,可参考这个博文。

5.在午夜的时候执行某命令

echo cmd|at midnight

说的就是at这个组件,通常跟cron相提并论,不过at主要用于定时一次性任务,而cron定时周期性任务。

at的参数比较人性化,跟英语语法一样,可以tomorrow,next week之类的,详细的查看手册man at。

6.远程传送麦克风语音

dd if=/dev/dsp|ssh username@host dd of=/dev/dsp

没错就是实现一个喊话器的功能。

/dev/dsp是Linux下声卡的文件映射(Digital Signal Proccessor),从其中读数据就是录音,往里面写数据就是播放,相当简单!

dd是常用的数据拷贝程序,如果不同时指定if、of,就直接使用stdin

/stdout来传输。

如果你没有远程主机,可以试试这样:

dd if=/dev/dsp of=/dev/dsp

直接回放麦克风的声音,只是有一点延时。

但是如果有别的程序正在使用声卡,这个方法就不凑效了,因为一般的声卡都不允许多个音频流同时处理,可以借用alsa组件的工具,arecord跟aplay:

arecord|ssh username@host aplay

本地回放就是:

arecord|aplay

如果你想吓吓别人:

cat/dev/urandom|ssh username@host aplay

7.映射一个内存目录

mount-t tmpfs-o size=1024m tmpfs/mnt/ram

这个命令开了一块1G内存来当目录用。不过放心,如果里面没文件,是不会占用内存的,用多少占多少。

不过一般来说没必要手动挂载,因为多数发行版都会在fstab内预留了一个内存目录,挂载在/dev/shm,直接使用即可;

最常见的用途是用内存空间来放Firefox的配置,可以让慢吞吞的FF快很多,参见Shellex的博文:用tmpfs让Firefox在内存中飞驰,以及后来的改进:用tmpfs让Firefox在内存中飞驰II,其中提到的脚本来自speeding up firefox with tmpfs and automatic rsync。

那个破烂LinuxQQ也可以用这个方法,减少因为大量磁盘IO导致的问题。

8.用diff对比远程文件跟本地文件

ssh user@host cat/path/to/remotefile|diff/path/to/localfile-

diff通常的用法是从参数读入两个文件,而命令里面的-则是指从stdin读入了。

善用ssh可以让web开发减少很多繁琐,还有比如sshfs,可以从编辑-上传-编辑-上传的人工循环里面解脱出来。

9.查看系统中占用端口的进程

netstat-tulnp

Netstat是很常用的用来查看Linux网络系统的工具之一,这个参数可以背下来:

-t:显示TCP链接信息

-u:显示UDP链接信息

-l:显示监听状态的端口

-n:直接显示ip,不做名称转换

-p:显示相应的进程PID以及名称(要root权限)

如果要查看关于sockets更详细占用信息等,可以使用lsof工具。

三.

1.更友好的显示当前挂载的文件系统

1

mount|column-t

这条命令适用于任何文件系统,column用于把输出结果进行列表格式化操作,这里最主要的目的是让大家熟悉一下columnt的用法。

下面是单单使用mount命令的结果:1

2 3 4 5$mount

/dev/root on/type ext3(rw)/proc on/proc type proc

(rw)/dev/mapper/lvmraid-home on/home type ext3(rw,noatime)

而加了column-t命令后就成为这样了:1

2 3 4 5$mount|column-t

/dev/root on/type ext3(rw)/proc on/proc type proc

(rw)/dev/mapper/lvmraid-home on/home type ext3(rw,noatime)

另外你可加上列名称来改善输出结果

1 2 3 4 5 6$(echo"DEVICE-PATH-TYPE FLAGS"&&mount)|column-t

DEVICE-PATH-TYPE FLAGS

/dev/root on/type ext3(rw)/proc

on/proc type proc(rw)/dev/mapper/lvmraid-home on/home type ext3(rw,noatime)

列2和列4并不是很友好,我们可以用awk来再处理一下

1 2 3 4 5 6$(echo"DEVICE PATH TYPE FLAGS"&&mount|awk'$2=$4="";1')| column-t

DEVICE PATH TYPE FLAGS

/dev/root/ext3(rw)/proc

/proc proc(rw)/dev/mapper/lvmraid-home/home ext3

(rw,noatime)

最后我们可以设置一个别名,为nicemount

1$nicemount(){(echo"DEVICE PATH TYPE FLAGS"&&mount|awk '$2=$4="";1')|column-t;}

试一下

1 2 3 4 5 6$nicemount

DEVICE PATH TYPE FLAGS

/dev/root/ext3(rw)/proc

/proc proc(rw)/dev/mapper/lvmraid-home/home ext3 (rw,noatime)

2.运行前一个Shell命令,同时用“bar”替换掉命令行中的每一个“foo”

1

!!:gs/foo/bar

!!表示重复执行上一条命令,并用:gs/foo/bar进行替换操作。

关于!!这个用法在前一篇文章中已有详细的介绍。

3.实时某个目录下查看最新改动过的文件

1watch-d-n1'df;ls

-FlAt/path'

watch是实时监控工具,-d参数会高亮显示变化的区域,-n1参数表示刷新间隔为1秒。

df;ls-FlAt/path运行了两条命令,df是输出磁盘使用情况,ls-FlAt则列出/path下面的所有文件。

ls-FlAt的参数详解:

·-F在文件后面加一个文件符号表示文件类型,共有/=>@|这几种类型,表示可执行文件,/表示目录,=表示接口(sockets),>表示门,@表示符号链接,|表示管道。

·-l以列表方式显示

·-A显示.和..

·-t根据时间排序文件

4.通过SSH挂载远程主机上的文件夹

1

sshfs name@server:/path/to/folder/path/to/mount/point

这条命令可以让你通过SSH加载远程主机上的文件系统为本地磁盘,前提是你需要安装FUSE及sshfs这两个软件。

译者注:关于sshfs实际上我之前写过一篇文章介绍过,详见在Ubuntu上使用sshfs映射远程ssh文件系统为本地磁盘。

卸载的话使用fusermount或umount命令:

1 2$fusermount-u/path/to/mount/point #umount/path/to/mount/point

5.通过DNS来读取Wikipedia的词条

1

dig+short txt.wp.dg.cx

这也许是最有趣的一条技巧了,David Leadbeater创建了一个DNS服务器,通过它当你查询一个TXT记录类型时,会返回一条来自于Wikipedia的简短的词条文字,这是他的介绍。

这里有一个样例,来查询“hacker”的含义:

1 2 3 4 5 6 7 8$dig+short txt hacker.wp.dg.cx

"Hacker may refer to:Hacker(computer security), someone involved

in computer security/insecurity,Hacker(programmer subculture),a

programmer subculture originating in the US academia in the1960s,

which is nowadays mainly notable for the free software/”“open

source movement,Hacker(hobbyist),an enthusiastic home computer

hobbyist http://a.vu/w:Hacker"

这里使用了dig命令,这是标准的用来查询DNS的系统管理工具,+short参数是让其仅仅返回文字响应,txt则是指定查询TXT记录类型。

更简单的做法是你可以为这个技巧创建一个函数:

1 2wiki(){dig+short txt$1.wp.dg.cx;}#然后试试吧:

3 4 5wiki hacker

"Hacker may refer to:Hacker(computer security),…"

如果你不想用dig,也可以用host命令:

1

host-t txt hacker.wp.dg.cx

另外在Twitter上看过某人的创意,用普通的dns来作为程序版本更新的查询服务器:设定域名https://www.docsj.com/doc/4a8642118.html,的A记录为1.2.40.3,对比自己的版本号,嗯,有更新了!

6.用Wget的递归方式下载整个网站

1wget--random-wait-r-p-e robots=off-U Mozilla

https://www.docsj.com/doc/4a8642118.html,

参数解释:

–random-wait等待0.5到 1.5秒的时间来进行下一次请求

-r开启递归检索

-e robots=off忽略robots.txt

-U Mozilla设置User-Agent头为Mozilla

其它一些有用的参数:

·–limit-rate=20K限制下载速度为20K

·-o logfile.txt记录下载日志

·-l0删除深度(默认为5)

·-wait=1h每下载一个文件后等待1小时

7.复制最后使用的命令中的参数

1or

>

这个快捷键只能工作于shell的emacs编辑模式,它可以从最后使用的命令行中复制参数到当前命令行中,下面是一个样例:

1 2 3 4$echo a b c

a b c

$echo

5$echo c

你可以重复执行该快捷键,以便获取自已需要的参数,以下是样例:

1 2 3 4 5 6 7 8 9 10$echo123123 $echo a b c

a b c

$echo $echo c

$echo again

$echo3

另外,假如你想指定第1个或第2个,或者是第n个参数的话,可以按ALT+1 (或ESC+1)或ALT+2(或ESC+2)这样形式的快捷键。

以下是样例:

1 2 3 4 5 6 7 8 9 10$echo a b c

a b c

$echo

$echo a

a

$echo

$echo b

b

查看Emacs Editing Mode Keyboard Shortcuts一文获取更多类似的快捷键。

8.执行一条命令但不保存到history中

1

$command

这条命令可运行于最新的Bash shell里,在其它shell中没测试过。

通过在命令行前面添加一个空格,就可以阻止这条命令被保存到bash history (~/.bash_history)文件中,这个行为可以通过$HISTIGNORE shell变量来控制。我的设置是HISTIGNORE=”&:[]*”,表示不保存重复的命令到history 中,并且不保存以空格开头的命令行。$HISTIGNORE中的值以冒号分隔。

如果你的命令内包含密码,比如mysqladmin,不把它记录在历史当中是好主义。

深入了解的话,可进一步看此文The Definitive Guide to Bash Command Line History

9.显示当前目录中所有子目录的大小

1

du-h--max-depth=1

–max-depth=1参数可以让du命令显示当前目录下1级子目录的统计信息,当然你也可以把1改为2,进一步显示2级子目录的统计信息,可以灵活运用。而-h参数则是以Mb、G这样的单位来显示大小。

译者注:在此推荐一个小工具ncdu,可以更方便的达到此效果。

10.显示消耗内存最多的10个运行中的进程,以内存使用量排序

1

ps aux|sort-nk+4|tail

显然这并不是最好的方法,但它确实用起还不错。

这是一个典型的管道应用,通过ps aux来输出到sort命令,并用sort排序列出4栏,再进一步转到tail命令,最终输出10行显示使用内存最多的进程情况。

假如想要发现哪个进程使用了大量内存的话,我通常会使用htop或top而非ps。

11.用python快速开启一个SMTP服务

1

python-m smtpd-n-c DebuggingServer localhost:1025

这是一个用Python标准库smtpd(用-m smtpd指定)实现在简易SMTP服务,运行于1025端口。

另外三个参数的解释:

-n参数让Python不要进行setuid(改变用户)为“nobody”,也就是说直接用你的帐号来运行

-c DebuggingServer参数是让Python运行时在屏幕上输出调试及运行信息

*localhost:1025参数则是让Python在本地的1025端口上开启SMTP服务

另外,假如你想让程序运行于标准的25的端口上的话,你必须使用sudo命令,因为只有root才能在1-1024端口上开启服务。如下:

1

sudo python-m smtpd-n-c DebuggingServer localhost:25

四.

1.查看ascii码表

1

man7ascii

很多人初学编程都会接触到ascii码的概念,有时候为了查某个符号的ascii值,可能还得翻箱倒柜找出当年的课本?Linux Manpage里面其实包含了很多类似

的实用资料,上述命令就能很详细的方式解释ascii编码,当然这里还有在线版。man命令的第二个参数是区域码,用来区分索引词的范围,比如printf,在C

标准库里面的printf跟bash当中的printf是不同的,前者的查询是man3 printf,后者是man1printf。如果这个区域码省略,就会从1开始搜索,直到找到为止。

命令man man可以看到详细的解释。

manpages里面还有一些有趣而且实用的资料,可能鲜为人知:

·man1intro–一篇对从未接触过Linux的用户的简明教程。

·man2syscalls–内核系统请求的列表,按内核版本注释分类,系统编程必备。

·man2select_tut–关于select()系统请求的教程。

·man3string–在头文件内的所有函数。

·man3stdio–关于头文件的使用,标准输入/输出库的说明。

·man3errno–所有errorno的取值及说明。(C语言内类似其他语言的异常告知机制)

·man4console_codes–Linux的终端控制码及其使用解释。

·man4full–介绍/dev/full这个总是处于“满”状态的磁盘。(对应/ dev/null这个总是空的设备)

·man5proc–介绍/proc下的文件系统。

·man5filesystems–各种Linux文件系统。

第7区里面的资料通常最酷:

·man7bootparam–详细解释内核启动参数。

·man7charsets–解释各种语言的编码集。(gbk,gb2312等)

·man7glob–解释glob文件名管理机制的工作过程。

·man7hier–解释Linux文件系统结构各个部分的作用。

·man7operator–C语言的运算符的列表。

·man7regex–介绍正则表达式。

·man7suffixes–常见文件后缀名的列表跟解释。

·man7time–Linux的时钟机制解释。

·man7units–数值单位及其数值的解释。

·man7utf8–描述UTF-8编码。

·man7url–解释URL、URI、URN等的标准。

2.简易计时器

1

time read

运行命令开始算起,到结束时按一下Enter,就显示出整个过程的时间,精确到ms级别。

time是用来计算一个进程在运行到结束过程耗费多少时间的程序,它的输出通常有三项:

1 2 3 4 5 6$time ls /opt ...

real

0m0.008s user

0m0.003s sys

0m0.007s

real指整个程序对真实世界而言运行所需时间,user指程序在用户空间运行的时间,sys指程序对系统调用锁占用时间。

read本来是一个读取用户输入的命令,常见用法是read LINE,用户输入并回车后,键入的内容就被保存到$LINE变量内,但在键入回车前,这个命令是一直阻塞的。

可见time read这命令灵活地利用了操作系统的阻塞。用这个命令来测试一壶水多久煮滚应该是不错的。

3.远程关掉一台Windows机器

1

net rpc shutdown-I IP_ADDRESS-U username%password

Windows平台上的net命令是比较强大的,因为其后台是一个RPC类的系统服务,大家应该看过win下用net use\\ip\ipc$*这样一个命令建立IPC空连接,入侵主机的事情。

Linux下的net命令是samba组件的程序,通常包含在smbclient内,可以跟windows主机的文件、打印机共享等服务进行通讯,但是也支持rpc命令。

上述命令就是在远程Windows主机上执行了shutdown命令。当然这不一定成功,关系到win主机上面的安全设置。net命令能够控制到win主机就是了。

4.在一个子shell中运行一个命令

1

(cd/tmp&&ls)

当然这只是演示,要查看目录当然可以ls/tmp。

好处就是不会改变当前shell的目录,以及如果命令中设计环境变量,也不会对当前shell有任何修改。

在Shell编程中还有很多使用上引号来括住一个命令:`ls/tmp`,这也是子shell过程。可是上引号的方法无法嵌套,而使用小括号的方法可以,一个比较纠结的例子是:

1

echo$(echo-e\\x$(printf"%x"65))

5.利用中间管道嵌套使用SSH

1

ssh-t host_A ssh host_B

如果目标机器host_B处于比较复杂的网络环境,本机无法直接访问,但另外一台host_A能够访问到host_B,而且也能被本机访问到,那上述命令就解决了方便登录host_B的问题。

但理论上这个过程是可以无限嵌套的,比如:

1ssh-t host1ssh-t host2ssh-t host3ssh-t

host4...

嗯那神马FBI CIA的,有本事来捉我吧~

6.清空屏幕

1

这个跟之前介绍的reset命令重置终端的作用有些类似,其实都只是发送一段控制序列,让终端的显示复位。

还可以这样运行:

1

tput clear

tput是专门用来控制终端的一个小工具,也挺强大的,详细信息运行man tput 查看。

7.我想知道一台服务器什么时候重启完

1

ping-a IP

系统管理员最常做的事情是重启系统。但是服务器的重启过程往往得花上好几分钟,什么你的服务器4个scsi卡?16个硬盘?系统是RedHat?还完全安装所有组件?好吧,它重启的时间都够你吃顿饭了,所以我很想知道它什么时候回来。ping命令有个audible ping参数,-a,当它终于ping通你的服务器时会让小喇叭叫起来。

8.列出你最常用的10条命令

1history|awk'{a[$2]++}END{for(i in a){print a[i]""i}}'|sort -rn|head

这行命令组合得很妙:

history输出用户了命令历史;awk统计并输出列表;sort排序;head截出前10行。

9.检查Gmail新邮件

1 2 3 4 5 6curl-u you@https://www.docsj.com/doc/4a8642118.html,--silent

"https://https://www.docsj.com/doc/4a8642118.html,/mail/feed/atom"|

perl-ne\

'

print"Subject:$1"if/(.+?)<\/title>/&& $title++;</p><p>print"(from$1)\n"if/<email>(.+?)<\/email>/;</p><p>'</p><p>Gmail的一个特色是支持Atom feed输出邮件列表,所以总是见到很多Gmail邮件提醒器之类的,因为开发特简单,atom很方便。</p><p>这里只是利用了perl的正则来解析atom(sed/awk也能做到)。</p><p>10.用Telnet看《星球大战》</p><p>1telnet</p><p>towel.blinkenlights.nl</p><p>没什么好解释的,就是ASCII艺术之一。如果你有ipv6连接,还能看到彩色版的。牛吧?</p><!--/p19--><!--rset--><h2>经典shell 脚本实例</h2><p>Linux shell 脚本实例 1. 写一个脚本,利用循环计算10的阶乘#!/bin/sh factorial=1 for a in `seq 1 10` do factorial=`expr $factorial \* $a` done echo "10! = $factorial" 2. 写一个脚本,执行后,打印一行提示“Please input a number:",要求用户输入数值,然后打印出该数值,然后再次要求用户输入数值。直到用户输入"end"停止。#!/bin/sh unset var while [ "$var" != "end" ] do echo -n "please input a number: " read var if [ "$var" = "end" ] then break fi echo "var is $var" done ////////////////////////////////////////// #!/bin/sh unset var while [ "$var" != "end" ] do echo -n "please input a number: " read var if [ "$var" = "end" ] then break fi echo "var is $var" done 3. 写一个脚本,利用循环和continue关键字,计算100以内能被3整除的数之和 4.一个函数,利用shift计算所有参数乘积,假设参数均为整数 #! /bin/sh result=1 while [ $# -gt 0 ] do result=`expr $result * $1` shift done echo $result 5.写一个脚本,可以根据参数文件名,以正确的参数调用tar来解压缩tar.gz或tar.bz2文件。#!/bin/shcase ${1##*.tar.} in bz2) tar jxvf $1 ;; gz) tar zxvf $1 ;; *) echo "wrong file type"esac6.写一个脚本以方便用户查询rpm的相关信息。这个脚本首先提示用户选择查询依据,比如文件名,包名,全部等。然后提示用户选择查询信息,比如包名,包里所包含的所有文件,包的信息等。然后询问是否继续查询,是则循环刚才的过程,否则退出。</p><h2>Red_Hat_Linux常用命令大全</h2><p>Red Hat Linux常用命令汇总 Linux 常用命令汇总 ls命令: 1. ls //列出当前目录的文件和文件夹 2. ls –a //列出当前目录的文件和文件夹,包含隐藏文件 3. ls –l //列出详细信息 4. ls 目录 //列出某目录下的文件 pwd命令 //查看当前所在位置 du 命令 1. du 目录 //查看目录的总容量以及子目录的容量 2. du –s 目录 //查看目录总容量 cd 命令 1.cd .. //回上一级目录 2.cd / //回根目录 3. cd //回用户主目录 4.cd 目录路径 //去某目录 mkdir 目录名 //创建目录 rmdir 空目录名 //删除空目录 rm 文件名 //删除文件 rm –rf 目录名 //删除目录以及目录下所有文件 mount 命令 1.mount /dev/cdrom /mnt/cdrom //挂载光驱到 /mnt/cdrom目录下2.mount -t vfat /dev/sda1 /mnt/u //挂载U盘到 /mnt/u目录下</p><p>3. umount /mnt/cdrom //卸载光驱 fdisk –l //查看本机存储设备 file 文件名 //查看文件类型 find 目录名–name “*.c” //在某目录下查找文件为*.c的文件 whereis 文件名 //查找文件在哪些目录下 cat 文件名 //显示文件内容 cat 文件名 | grep 文字 //只显示包含文字相关的内容 cat 文件名 | more //分页显示文件内容 tail 文件名 //查看文件末尾 head 文件名 //从头查看文件 cp 命令: cp 文件1 文件2 //复制文件1 到文件2 cp 文件1 目录1 //复制文件1到目录1下 cp 目录1/文件1 目录2 //复制目录1下的文件1到目录2下 cp –r 目录1 目录2 //复制目录1下所有内容到目录2 mv 命令: mv 文件1 文件2 //重命名文件1为文件2 mv 文件1 目录1 //移动文件1到目录1下 mv 目录1/文件1 目录2 //移动目录1下的文件1到目录2下 mv –r 目录1 目录2 //移动目录1下所有内容到目录2 chmod 命令: chmod u+x g+r o-w 文件名 //为文件设置权限(用户,组,其他人)chmod 744 文件名 //为文件设置权限(1-执行,2-写,4-读) chown 命令: chown 用户文件名 //把文件改为用户所有</p><h2>Linux系统的常用命令和服务器配置</h2><p>Linux系统的常用命令和服务器配置 一、添加用户useradd命令 例子: -m 自动创建用户的主目录,并把框架目录(/etc/skel)文件复制到用户目录上。 -g 设置基本组,用户将在该组中。 -G 把用户加到所有逗号间隔的分组中。 -s 制定使用的shell。 -c 描述信息。 -d 为账号设置主目录。 -r 系统帐号,无需再/home下创建主目录。 最后的是用户名。 二、指定口令(密码)passwd 例子: #passwd 用户名 回车就会提示输入密码了。 三、删除用户userdel 例子: #userdel 用户名 #userdel –r 用户名 -r 删除其主目录(/home/…..) 四、文件系统命令</p><p>4.1 fdisk命令 (1)fdisk –l :显示硬盘上的所有分区。既分区类型(FAT32、Ext3)。 (2)df –h :显示文件系统是如何挂载的。 (3)fdisk /dev/hdb1 :格式化第二个IDE磁盘 4.2 mount命令挂载文件系统 (1)mount (不使用参数)查看系统挂载情况。 (2)mount /mnt/cdrom :挂载光驱,可用cd /mnt/cdrom 后ls查看光盘上的内容。 (3)mount /mnt/floppy :挂载软盘,可用cd /mnt/floppy 后ls查看软盘上的内容。 2、3中可以使用/dev/cdrom和/dev/fd0代替挂载点,得到同样的效果! (4)mount –t msdos /dev/fd0 /mnt/floppy :挂载DOS软盘到/mnt/floppy下。 (5)挂载Windows分区 #fdisk -l :列出硬盘分区。 #mkdir /mnt/win :创建一个目录,用于挂载。 #mount -t vfat /dev/hda1 /mnt/win :假设Windows在第一个IDE硬盘的第一个分区上。 注:可以使用–t auto 参数令系统自动监测文件类型! -r 以只读方式挂载。 -w 读写方式挂载。 4.3 umount命令卸载文件系统 (1) umount /mnt/floppy 将设备(如/dev/fd0)从挂载点/mnt/floppy卸载。也可以使用下列方式完成这一工作: umount /dev/fd0为了使该分区对于Linux永久可用,需在/etc/fstab文件中添加如下一行: /dev/hda1 /mnt/win vfat defaults 0 0 五、文件相关命令 5.1 文件权限chmod 例子:</p><h2>Shell脚本编程详解-吐血共享</h2><p>第12章 Shell 脚本编程 ● Shell 命令行的运行 ● 编写、修改权限和执行Shell 程序的步骤 ● 在Shell 程序中使用参数和变量 ● 表达式比较、循环结构语句和条件结构语句 ● 在Shell 程序中使用函数和调用其他Shell 程序 12-1 Shell 命令行书写规则 ◆ Shell 命令行的书写规则 对Shell 命令行基本功能的理解有助于编写更好的Shell 程序,在执行Shell 命令时多个命令可以在一个命令行上运行,但此时要使用分号(;)分隔命令,例如: [root@localhost root]# ls a* -l;free;df 长Shell 命令行可以使用反斜线字符(\)在命令行上扩充,例如: [root@localhost root]# echo “ this is \ >long command ” This is long command 注意: “>”符号是自动产生的,而不是输入的。 12-2 编写/修改权限及执行Shell 程序的步骤 ◆ 编写Shell 程序 ◆ 执行Shell 程序 Shell 程序有很多类似C 语言和其他程序设计语言的特征,但是又没有程序语言那样复杂。Shell 程序是指放在一个文件中的一系列Linux 命令和实用程序。在执行的时候,通过Linux 操作系统一个接一个地解释和执行每条命令。首先,来编写第一个Shell 程序,从中学习Shell 程序的编写、修改权限、执行过程。</p><p>12-2-1 编辑Shell程序 编辑一个内容如下的源程序,保存文件名为date,可将其存放在目录/bin下。 [root@localhost bin]#vi date #! /bin/sh echo “Mr.$USER,Today is:” echo &date “+%B%d%A” echo “Wish you a lucky day !” 注意: #! /bin/sh通知采用Bash解释。如果在echo语句中执行Shell命令date,则需要在date 命令前加符号“&”,其中%B%d%A为输入格式控制符。 12-2-2 建立可执行程序 编辑完该文件之后不能立即执行该文件,需给文件设置可执行程序权限。使用如下命令。[root@localhost bin]#chmod +x date 12-2-3 执行Shell程序 执行Shell程序有下面三种方法: 方法一: [root@localhost bin]#./ date Mr.root,Today is: 二月 06 星期二 Wish you a lucky day ! 方法二: 另一种执行date的方法就是把它作为一个参数传递给Shell命令: [root@localhost bin]# Bash date Mr.root,Today is: 二月 06 星期二 Wish you a lucky day ! 方法三: 为了在任何目录都可以编译和执行Shell所编写的程序,即把/bin的这个目录添加到整个环境变量中。 具体操作如下: [root@localhost root]#export PATH=/bin:$PATH [root@localhost bin]# date Mr.root,Today is: 二月 06 星期二 Wish you a lucky day !</p><h2>Linux常用命令</h2><p>(1)基于虚拟机的Linux操作系统的使用 1.启动VMware Workstation应用程序,启动Windows以后,选择开始—程序——VMware—VMware Workstation,出现如图7—1所示窗口。 2.选择File—Open选择安装好的Linux虚拟机文件,或者直接单击Start this virtual machine 启动Linux操作系统。 3.启动系统后需要输入用户名和密码,如图7—2所示,用户名为“root”,密码为“jsjxy308”。 4.启动终端,成功进入系统后,选择“应用程序”—“系统工具”—“终端”。 5.在终端中执行Linux 命令,终端运行以后,就可以在这里输入Linux命令,并按回车键执行。 (2)文件与目录相关命令的使用 1.查询/bin目录,看一看有哪些常用的命令文件在该目录下: ll /bin 2.进入/tmp目录下,新建目录myshare: cd /tmp mkdir myshare ls –ld myshare/ 3.用pwd命令查看当前所在的目录: pwd 4.新建testfile文件: touch testfile ls -l 5.设置该文件的权限模式: chomd 755 testfile ls -l testfile 6.把该文件备份到/tmp/myshare目录下,并改名为testfile.bak: cp testfile myshare/testfile.bak ls -l myshare/ 7.在/root目录下为该文件创建1个符号连接: ln -s /tmp/testfile /root/testfile.ln ls -l /root/testfile.ln 8.搜索inittab 文件中含有initdefault字符串的行: cat /etc/inittab | grep initdefault (3)磁盘管理与维护命令的使用 1)Linux 下使用光盘步骤 1.确认光驱对应的设备文件: ll /dev/cdrom 2.挂载光盘: mout -t iso9600/dev/cdrom test/dir 1.查询挂载后的目录: ll /media/cdrom 2.卸载光盘: umount /dev/cdrom 2)Linux下USB设备的使用</p><h2>Linux服务器常用命令(简化版)</h2><p>Linux服务器常用命令(简化版) 信息来源:网络整理:HY 日期:2011-5-27 Intel Fortran编译 Linux shell管道命令(pipe)使用及与shell重定向 Linux命令替换 Linux 任务控制(bg jobs fg nohup &) Linux进程查看 Linux账户管理 Linux系统与硬盘信息查询 Linux VIM语法高亮与程序段错误 Linux十大常用命令</p><p>Intel Fortran编译 完整编译顺序 $ ifort -c Hello.f90 -o Hello.o编译源文件(.f90)生成目标文件(.o) $ ifort Hello.o -o Hello链接目标文件生成可执行程序Hello $./Hello 执行可执行程序 默认(常用编译方法) $ ifort Hello.f90编译&链接 $./a.out 执行a.out(默认可执行程序名) 后台运行 $ ./a.out & 后台运行,退出shell会使程序停止,输出信息会显示在屏幕,不建议这样使用$nohup ./a.out & 输出到屏幕的信息输出到nohup.out文件 $nohup ./a.out > screen.txt & 输出到屏幕的信息输出到screen.txt文件(推荐) Linux shell管道命令(pipe)使用及与shell重定向 Ref:https://www.docsj.com/doc/4a8642118.html,/chengmo/archive/2010/10/21/1856577.html 重定向 详细解释参考:https://www.docsj.com/doc/4a8642118.html,/view/2173319.htm 在Linux命令行模式中,如果命令所需的输入不是来自键盘,而是来自指定的文件,这就是输入重定向。同理,命令的输出也可以不显示在屏幕上,而是写入到指定文件中,这就是输出重定向。 重定向分为: 重定向分为 输出重定向、输入重定向和错误重定向。 < 实现输入重定向。 >或>> 实现输出重定向,用户可以使用输出重定向把一个命令的输出重定向到一个文件 1)ls –l /etc>dir 将ls命令生成的/etc目录下的一个清单存到当前目录 中的dir文件,而不在屏幕输出。 2)ls –l /usr>>dir 将ls命令生成的/usr目录的一个清单以追加的方式存 到当前目录中的dir文件中。 重定向连接两个或多个文件? 使用cat命令并重定向输出到一个文件可以连接两个或多个文件。 重定向追加到一个文件:可以使用双重定向输出符号“>>”,保留文件以前的内容。 这种情况下,命令输出追加到另一个文件中。 重定向重定向标准输出到一个设备? 除了重定向一个命令的输出到一个文件,也可以把它重定向到一个设备,因为UNIX系统将设备当做文件。 $echo “Hello! I am petter!” > /dev/tty01 重定向标准输入? 使用“<”重定向输入。例如:用户已经创建好了一个文件letter。如果希望通过电子邮件发送给用户petter。可以使用下面方式:$mail petter < letter 重定向标准错误重定向? 没有专门的符号用于重定向stderr。我们可以同样使用“< ”或“>”符号,但需在它前面补一个数字2。 PS:重定向的优先级大于管道的优先级!^_^ 管道右边的命令只能对管道左边的命令的标准输出(输出到屏幕)起作用,不对错误输出(也输出到屏幕)起作用。 一个命令的执行首先决定0,1,2设备的定向,然后才执行命令,可以将定向理解为命令执行</p><h2>LinuxShell脚本教程(一):Shell入门</h2><p>LinuxShell脚本教程(一):Shell入门 LinuxShell脚本教程(一):Shell入门 在这里我们介绍的是Bashshell(BourneAgainShell),它是目前大多数GUN/Linux系统默认的shell环境。书中所有的实验都是在Ubuntu14.04LTS环境下完成的。 在ubuntu14.04LTS系统中,已经默认安装了一个Terminal,我们可以通过多种方法打开终端。这里介绍两种: 方法一:通过系统自带的检索系统,我们可以轻松找到终端(Terminal),单击即可打开。检索系统可以通过快速启动栏右上角的按钮启动。 方法二:为了之后可以方便的打开终端,建议将终端固定在快速启动栏。操作方法为:通过方法一打开终端后,快速启动栏会出现一个终端的图表,在图表上单击鼠标右键,选择“固定在启动栏”即可将终端固定在快速启动栏。 默认情况下,终端提示符为:username@hostname或者 root@hostname#。代表普通用户,#代表root用户。 例如:我在打开终端后,提示符为:wxb@ubuntu:~$。 root是linux系统中权限最高的用户,能力大风险也大,因此不介意使用root用户作为登陆系统的.默认用户。 通常情况下,对于个人版linux操作系统,系统上会存在两个用户,即用户自己以及root用户。对于使用者来说,时有需要切换用户,以执行一些普通用户不能执行的操作,此处提供两种方法切换用户。 方法一:临时切换。顾名思义,这种切换方法仅仅是临时的,当指令执行完成后,就会切换到原来的用户。切换指令为:sudocommand,sudo是superuserdo的简写。</p><h2>SuSE Linux常用命令</h2><p>Novell的Suse Linux常用命令举例讲解 2008-03-28点击: 1128 Novell的Suse Linux常用命令举例讲解 1.修改vftpd配置文件 vi /etc/vsftpd.conf #listen=YES vi /etc/xinetd.d/vsftpd 将“disable=yes” 改为“disable=no”使xinetd服务启动后接收到ftp连接请求时,能够自动启动vsftpd服务进程 2. mkdir -p /srv/ftp/linux-10 创建文件夹-p 如果文件夹不存在自动创建 3. chown -R ftp:ftp /srv/ftp/linux-10 指定linux-10目录及其子目录的拥有者为ftp用户和ftp组 4. chmod -R 755 /srv/ftp/linux-10 指定linux-10目录及其子目录的访问权限 5. mount /dev/hdc /srv/ftp/linux-10/disk1 将设备中的内容挂载到disk1中 umount /srv/ftp/linux-10/disk1 卸载掉disk1中挂载的文件 6. /etc/init.d/xinetd start 启动FTP服务 7. df命令 功能:检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。 语法:df [选项] 说明:df命令可显示所有文件系统对i节点和磁盘块的使用情况。 该命令各个选项的含义如下: -a 显示所有文件系统的磁盘使用情况,包括0块(block)的文件系统,如/proc文件系统。 -k 以k字节为单位显示。</p><h2>linux Shell(脚本)编程入门 实例讲解详解</h2><p>linux Shell(脚本)编程入门实例讲解详解 为什么要进行shell编程 在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活的工具。Shell不仅仅是命令的收集,而且是一门非常棒的编程语言。您可以通过使用shell使大量的任务自动化,shell特别擅长系统管理任务,尤其适合那些易用性、可维护性和便携性比效率更重要的任务。 下面,让我们一起来看看shell是如何工作的: 建立一个脚本 Linux中有好多中不同的shell,但是通常我们使用bash (bourne again shell) 进行shell编程,因为bash是免费的并且很容易使用。所以在本文中笔者所提供的脚本都是使用bash(但是在大多数情况下,这些脚本同样可以在bash 的大姐,bourne shell中运行)。 如同其他语言一样,通过我们使用任意一种文字编辑器,比如nedit、kedit、emacs、vi等来编写我们的shell程序。程序必须以下面的行开始(必须方在文件的第一行): 符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。当编辑好脚本时,如果要执行该脚本,还必须使其可执行。 要使脚本可执行: 然后,您可以通过输入: ./filename 来执行您的脚本。 注释 在进行shell编程时,以#开头的句子表示注释,直到这一行的结束。我们真诚地建议您在程序中使用注释。如果您使用了注释,那么即使相当长的时间内没有使用该脚本,您也能在很短的时间内明白该脚本的作用及工作原理。 变量 在其他编程语言中您必须使用变量。在shell编程中,所有的变量都由字符串组成,并且您不需要对变量进行声明。要赋值给一个变量,您可以这样写:</p><h2>Linux常用命令详解(配合示例说明,清晰易懂)</h2><p>Linux常用命令详解 (常用、详细) BISTU 自动化学院 刷碗小工(frisen.imtm) 2010年11月 开源社区,造福大家,版权所有,翻录不究(初次接触Linux命令可能对以下说明有不少疑问,可待看完一遍后再回头细看) (配合Ctrl + F可快速查找你想了解的命令)</p><p>索引:(待完善) 文件说明:Linux命令很多,但最常用的80个左右 文档内容充实,用示例说明命令如何使用笔者力求语言简洁,清晰易懂 由于忙于其他事情,改进排版的工作只能搁置了 最后,望此文档能为大家Linux学习之路献微薄之力 一、路径: 执行命令前必须要考虑的一步是命令的路径,若是路径错误或是没有正确的指定,可能导致错误的执行或是找不到该命令。要知道设置的路径,可执行以下命令: 一般而言,本书的命令位于/bin、usr/bin、/sbin、/usr/sbin之中。若读者执行了命令却出现“command not find”或是“命令不存在”的字样,就必须要确定该命令的位置是否在命令的路径中,或是系统上根本没有安装该套件。 二、命令顺序: 若在shell内置的命令/bin以及/usr/bin之下都出现了命令pwd,那当我们执行该命令时,会执行哪一个?答案是第一优先执行shell内置的命令,再执行路径中的设置;因此若有相同名称的命令时,必须要注意顺序设置,或是直接输入完整路径。 三、参数(或称选项)顺序: 一般除了特殊情况,参数是没有顺序的。举例而言,输入“–a –v”与输入“–v –a”以及“–av”的执行效果是相同的。但若该参数后指定了要接的文件或特殊对象,如“–a cmd1 –v cmd2”,则不能任意改变选项顺序。 四、常用参数: 下面所列的是常见的参数(选项)意义: --help,-h 显示帮助信息 --version,-V 显示版本信息 -v 繁琐模式(显示命令完整的执行过程) -i 交谈模式(指定界面) -l 长列表输出格式 -q,-s 安静模式(不显示任何输出或错误信息) -R 递归模式(连同目录下所有文件和子目录一起处理) -z 压缩 五、命令的结合与定向: 命令中除了一般命令外,还有管道(或称途径)(|)与定向(>或>>)。 管道(途径)的用法: “命令一[选项]”| “命令二[选项]”,也就是将“命令一[选项]”的输出结果传到“命令二[选项]”,通过命令二的处理之后才输出到标准输出(屏幕)上。比如“ls /etc”会列出etc下的所有文件,若加上“| less”,也就是“ls /etc | less”,则会将“ls /etc”的结果通过less分页输出。 定向的用法: 将结果定向到命令的输出设备,一般不加文件名意为将结果输出到屏幕,若是在定向后加上文件名,则会将命令的执行结果输出到定向的文件,例如“ls > temp.txt”,就会将ls 的结果输出到文件temp.txt中。“>”与“>>”的差异在于前者是覆盖,而后者是附加。 六、命令中的命令: 许多命令在执行后,会进入该命令的操作模式,如fdisk、pine、top等,进入后我们必须要使用该命令中的命令,才能正确执行;而一般要退出该命令,可以输入exit、q、quit或是按【Ctrl+C】组合</p><h2>Shell编程基础教程</h2><p>1. Linux 脚本编写基础 1.1 语法基本介绍 1.1.1 开头 程序必须以下面的行开始(必须放在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。 当编辑好脚本时,如果要执行该脚本,还必须使其可执行。要使脚本可执行: chmod +x filename 这样才能用./filename 来运行 1.1.2 注释 在进行shell编程时,以#开头的句子表示注释,直到这一行的结束。我们真诚地建议您在程序中使用注释。如果您使用了注释,那么即使相当长的时间内没有使用该脚本,您也能在很短的时间内明白该脚本的作用及工作原理。 1.1.3 变量 在其他编程语言中您必须使用变量。在shell编程中,所有的变量都由字符串组成,并且您不需要对变量进行声明。要赋值给一个变量,您可以这样写: #!/bin/sh #对变量赋值: a="hello world" # 现在打印变量a的内容: echo "A is:" echo $a 有时候变量名很容易与其他文字混淆,比如: num=2 echo "this is the $numnd" 这并不会打印出"this is the 2nd",而仅仅打印"this is the ",因为shell会去搜索变量numnd的值,但是这个变量时没有值的。可以使用花括号来告诉shell我们要打印的是num变量: num=2 echo "this is the ${num}nd"</p><p>这将打印: this is the 2nd 1.1.4 环境变量 由export关键字处理过的变量叫做环境变量。我们不对环境变量进行讨论,因为通常情况下仅仅在登录脚本中使用环境变量。 1.1.5 Shell命令和流程控制 在shell脚本中可以使用三类命令: 1)Unix 命令: s虽然在shell脚本中可以使用任意的unix命令,但是还是由一些相对更常用的命令。这些命令通常是用来进行文件和文字操作的。 常用命令语法及功能: echo "some text": 将文字内容打印在屏幕上 ls: 文件列表 wc –l filewc -w filewc -c file: 计算文件行数计算文件中的单词数计算文件中的字符数 cp sourcefile destfile: 文件拷贝 mv oldname newname : 重命名文件或移动文件 rm file: 删除文件 grep 'pattern' file: 在文件内搜索字符串比如:grep 'searchstring' file.txt cut -b colnum file: 指定欲显示的文件内容范围,并将它们输出到标准输出设备比如:输出每行第5个到第9个字符cut -b5-9 file.txt千万不要和cat命令混淆,这是两个完全不同的命令 cat file.txt: 输出文件内容到标准输出设备(屏幕)上 file somefile: 得到文件类型 read var: 提示用户输入,并将输入赋值给变量 sort file.txt: 对file.txt文件中的行进行排序 uniq: 删除文本文件中出现的行列比如: sort file.txt | uniq expr: 进行数学运算Example: add 2 and 3expr 2 "+" 3 find: 搜索文件比如:根据文件名搜索find . -name filename -print tee: 将数据输出到标准输出设备(屏幕) 和文件比如:somecommand | tee outfile basename file: 返回不包含路径的文件名比如: basename /bin/tux将返回 tux</p><h2>Linux常用命令小结</h2><p>Linux常用命令小结 scp 远程文件复制 主机A:192.168.1.240, 主机B:192.168.1.102,其ssh都允许root登录,要把A上的/root/abc.zip复制到B的/persistent目录, 可在A机上使用命令: scp /root/abc.zip root@192.168.102:/persistent/ 若端口非22,比如8022,则加-P参数: scp -P 8022 /root/abc.zip root@192.168.1.102:/persistent/ 也可在B机上使用命令: scp root@192.168.1.240:/root/abc.zip /persistent/</p><p>vi 文件编辑 vi file 编辑或创建文件file vi分为编辑状态和命令状态。输入i进入编辑状态,按ESC键退出编辑状态。 命令状态下,常用命令有: :q(退出) :q!(不保存退出,强制退出) :w(保存文件) :w!(不询问方式写入文件) :1,20w ! tmp (第1行到第20行保存到文件tmp) :r file(读文件file) :%s/oldchars/newchars/g(将所有字串oldchars换成newchars) :0,$s/string1/string2/g(0,$:替换范围从第0行到最后一行) :%s/^[ ]\+/^I/ (将一行开头的若干空格替换成Tab) /string(查找string字符串) ?string(向上查找string字符串) :1,8d (删除第1行到第8行) :%s/^.\{5}//gic (删除每行的前5个字符) :%s/^M/ /g (删除^M) :g/^$/d (删除空行(只含有回车)) :g/^[^I| ]*$/d (删除所有空行(^I表示Tab,(空行中含有空格或Tab或者只有回车或者既有空格又有Tab)))</p><h2>部署常用Linux命令</h2><p>部署常用Linux命令 一、常用命令 1、cd切换目录,如:cd /:切换到根目录,cd /usr/VI3.0:切换到/usr/VI3.0目录下,cd ..返回上一级 目录,如当前目录是/usr/VI3.0,cd ..后就到了/usr目录下,suse linux下可以直接使用..来返回 上一级目录,…返回前两级目录。 2、ls,ll都可以查看当前目录下的文件,ll详细列出了目录下文件的信息。 3、mkdir file创建文件夹 4、unzip 文件名:解压ZIP包,对zip文件进行解压,如:unzip data.zip; 5、cp –r /usr/data /usr/VI3.0/:拷贝目录下的所有文件到另一个目录下; 6、rm:删除rm –R log/ 删除log文件夹下所有信息,rm –rf log/ tmp/ work/ 同时删除多个文件 夹下的信息; 7、find –name ‘f.processed’ | xargs rm –rf {} 8、chown:改变文件的拥有者,如:chown ftpuser:ftp file.txt 将file.txt文件的所有者改为ftpuser 用户; 9、chmod:给文件加权限(r:读取权限,数字代号为“4”,w:写入权限,数字代号“2”,x:执行或 切换权限,数字代号为“1”,-:不具有任何权限,数字代号为“0”),chmod abc file(其中a、 b、c各为数字,分别表示User、Group、及Other的权限),如:chmod 777 file 就是给file 文件添加了所有用户的权限,任何用户都能操作file文件,其实这样是不安全的,chmod 775 file 就行了; 10、vi、cat、tail都有查看文件的功能,如果需要查看并修改文件使用vi file,为避免误操作查看文 件使用cat file,动态查看文件,文件内容有更新时使用tail –f file; 11、ps –ef|grep java :查看Java进程; 12、top :查看服务器运行状态; 13、df –h :查看服务器硬盘使用情况; 14、rabbitmqctl list_queues –p / :查看安装的信息队列信息。 15、rsync –delete-before –d /home/tmep /data/VoiceFiles/G/1/0/20130221用/home/tmep 下文件替换/data/VoiceFiles/G/1/0/20130221下文件,/home/tmep下是空目录,即删除</p><h2>shell脚本实例</h2><p>shell脚本实例 1. 写一个脚本,利用循环计算10的阶乘 #!/bin/sh factorial=1 for a in `seq 1 10` do factorial=`expr $factorial \* $a` done echo "10! = $factorial" 注:上面有一行,for a in `seq 1 10`,其中seq 1 10 , 即列出现1到10之间所有的数字,这一行也可改为:for a in "1 2 3 4 5 6 7 8 9 10" 2. 写一个脚本,执行后,打印一行提示“Please input a number:",要求用户输入数值,然 后打印出该数值,然后再次要求用户输入数值。直到用户输入 "end"停止。 #!/bin/sh</p><p>while [ "$var" != "end" ] do echo -n "please input a number: " read var if [ "$var" = "end" ] then break fi echo "var is $var" done 3. 写一个脚本,利用循环和continue关键字,计算100以内能被3整除的数之和#!/bin/sh sum=0 for a in `seq 1 100` do if [ `expr $a % 3` -ne 0 ] then continue</p><p>echo $a sum=`expr $sum + $a` done echo "sum = $sum" 4.一个函数,利用shift计算所有参数乘积,假设参数均为整数( 特殊变量$# 表示包含参数的个数) #! /bin/sh result=1 while [ $# -gt 0 ] do result=`expr $result \* $1` shift done echo $result 5.写一个脚本,可以根据参数文件名,以正确的参数调用tar来解压缩tar.gz或tar.bz2文件。 #!/bin/sh</p><h2>PowerShell基础教程</h2><p>PowerShell基础教程一:Windows PowerShell简介 XP/Server 2003/Vista/Server 2008操作系统的脚本语言。包括 Cmd.exe 、SH、KSH、CSH以及BASH Unix在内的大多数外壳程序的操作方式都是在新的进程中执行命令或实用工具程序,并以文本格式向用户显示结果。多年以来,许多文本处理实用工具程序,如sed、AWK 和 PERL,都已逐渐发展为支持这种交互模式。 这些外壳程序也会提供内置于外壳程序中并在外壳程序处理器中执行的 命令,例如KSH 中的typeset命令和以及 Cmd.exe 中的 dir 命令。在大多数外壳程序中,由于内置命令数量少,从而导致许多实用工具程序应运而生。 针对这一点,Windows PowerShell 有不同的做法。 ◆ Windows PowerShell 并不处理文本,而是处理以.NET平台为基础的对象; ◆Windows PowerShell 附带了数量庞大的内置命令集和一致的接口; ◆对于各个工具,全部的外壳程序命令都使用相同的命令剖析器,而非使用不同的剖析器,这项特点会使你更容易学会每种命令的使用方式。 其中最棒的就是你完全不需要舍弃已使用习惯的工具,你可以继续在Windows PowerShell 中使用诸如Net、SC 和 Reg.exe 等传统的 Windows 工具。 Windows PowerShell Cmdlet Cmdlet (发音如“command-let”) 是指在 Windows PowerShell 中用来操作对象的单一功能命令。你可以依据其名称格式来加以辨识 Cmdlet -- 以破折号 (-) 分隔的动词和名词,例如Get-Help、Get-Process 和 Start-Service。 在传统的外壳程序中,命令是极为简单 (例如 attrib.exe) 到极为复杂 (例如 netsh.exe) 范围内的可执行程序。 在 Windows PowerShell 中,大多数Cmdlet 都相当简单,而且设计成与其他Cmdlet 结合使用。例如,"get" Cmdlet 只提取数据,"set" Cmdlet 只创建或修改数据,"format" Cmdlet 只格式化数据,而 "out" Cmdlet 只将输出导向到指定的目的地。每种 Cmdlet 都具备可在输入下列命令时加以显示的说明文件:</p><h2>Suse_Linux常用命令小结</h2><p>Suse Linux常用命令 目录 1、Suse9下配置默认网关 (1) 2、Suse9下开启telnet服务 (1) 3、Suse9下开启FTP服务 (2) 4、Suse9下配置rlogin (2) 5、查看版本、内核 (2) 6、查看CPU、MEM (3) 7、查看操作系统位数 (3) 8、查看VCS双机软件版本 (3) 9、主机名修改 (3) 10、检查系统分区 (4) 11、检查内存空间 (4) 12、检查时区设置 (4) 13、修改时区设置 (4) 14、系统时间设置 (4) 15、重新设置光纤驱动 (4) 16、检查磁盘分区信息 (4) 17、创建物理卷 (4) 18、查看已经创建的PV (5) 19、创建卷组 (5) 20、创建逻辑卷 (5) 21、查看创建的卷组和逻辑卷 (5) 22、创建文件系统 (5) 23、激活/去激活卷组 (5) 24、查找卷组信息 (5) 25、IP地址配置(临时生效,系统重启后会丢失) (5) 26、IP地址配置(永久生效) (6) 27、配置IP地址与节点名映射关系 (7) 28、激活/去激活网卡 (7) 29、配置双机ssh信任关系(两个节点上都要执行该操作) (7) 30、配置用户的.rhosts文件 (8) 31、配置心跳网卡信息 (8) 32、修改主机名 (9) 33、VCS涉及主机名的修改 (10) 34、XDM配置 (10) 35、Suse10sp1下开启FTP服务 (11) 36、查看操作系统补丁 (12) 37、查看操作版本 (12)</p><p>1、Suse9下配置默认网关 a、在/etc/sysconfig/network/routes文件下添加如下行: default 网关IP地址 - - b、重启网络服务 # /etc/init.d/xinetd restart # rcnetwork restart c、查看路由 # netstat -r 2、Suse9下开启telnet服务 a、修改/etc/xinetd.d/telnet文件:disnable=no 如果/etc/xinetd.d下不存在telnet文件,可能是telnet服务包没有安装,需要通过光盘安装好。 b、修改/etc/pam.d/login文件,注释如下行,允许root用户telnet "auth required pam_securetty.so" c、编辑/etc/securetty文件 # vi /etc/securetty 在文件中增加下面的内容: pts/0 pts/1 pts/2 pts/3 pts/4 pts/5 pts/6 pts/7 pts/8 pts/9 d、重启网络服务</p><h2>Linux(centos)的常用基本命令</h2><p>Linux的常用基本命令。 首先启动Linux。启动完毕后需要进行用户的登录,选择登陆的用户不同自然权限也不一样,其中“系统管理员”拥有最高权限。 在启动Linux后屏幕出现如下界面显示: …… Red Hat Linux release 9 (Shrike) Kernel2.4.20.8 on an i686 login: 输入:root(管理员名)后,计算机显示输口令(password:),输入你的口令即可。当计算机出现一个“#”提示符时,表明你登录成功! 屏幕显示Linux提示符:[root@localhost root]#_ 这里需要说明的是“Red Hat Linux release 9 (Shrike)”表示当前使用的操作系统的名称及版本。“2.4.20.8”表示Linux操作系统的核 心版本编号。“i686”表示该台电脑使用的CPU的等级。 下面我们来介绍常用基本命令 一,注销,关机,重启 注销系统的logout命令 1,Logout 注销是登陆的相对操作,登陆系统后,若要离开系统,用户只要直接下达logout命令即可: [root@localhost root]#logout Red Hat Linuxrelease 9(Shike) Kernel2.4.20.8 on an i686 Login: ←回到登陆的画面 2,关机或重新启动的shutdown命令 Shutdown命令可以关闭所有程序,依照用户的需要,重新启动或关机。 参数说明如下:  立即关机:-h 参数让系统立即关机。范例如下: [root@localhost root]#shutdown –h now ←要求系统立即关机  指定关机时间:time参数可指定关机的时间;或设置多久时间后运行shutdown命令,范例如下: [root@localhost root]#shutdown now ←立刻关机</p></div> </div> <div> <div>相关文档</div> <div class="relatedtopic"> <div id="tabs-section" class="tabs"> <ul class="tab-head"> <li id="14665756"><a href="/topic/14665756/" target="_blank">shell脚本教程</a></li> <li id="21732563"><a href="/topic/21732563/" target="_blank">linux常用命令和服务</a></li> </ul> </div> </div> </div> </div> <div class="category"> <span class="navname">相关文档</span> <ul class="lista"> <li><a href="/doc/69439309.html" target="_blank">LinuxShell脚本教程(一):Shell入门</a></li> <li><a href="/doc/a415283580.html" target="_blank">shell脚本实例</a></li> <li><a href="/doc/0618092155.html" target="_blank">经典shell 脚本实例</a></li> <li><a href="/doc/876900534.html" target="_blank">linux Shell(脚本)编程入门 实例讲解详解</a></li> <li><a href="/doc/ca4145322.html" target="_blank">经典shell脚本实例</a></li> <li><a href="/doc/4116020464.html" target="_blank">Shell脚本从入门到精通</a></li> <li><a href="/doc/ac4906899.html" target="_blank">Linux 基础教程--Shell脚本编程</a></li> <li><a href="/doc/8d5685025.html" target="_blank">最新shell脚本教程详细讲解(很好)幻灯片</a></li> <li><a href="/doc/bc8975286.html" target="_blank">Linux shell脚本入门教程</a></li> <li><a href="/doc/1e14130586.html" target="_blank">Shell脚本编程详解-吐血共享</a></li> <li><a href="/doc/995738470.html" target="_blank">Shell编程基础教程</a></li> <li><a href="/doc/607714725.html" target="_blank">自己总结的Linux Shell 脚本讲解+示例 精典版</a></li> <li><a href="/doc/bd6624471.html" target="_blank">PowerShell基础教程</a></li> <li><a href="/doc/1f6682576.html" target="_blank">Shell脚本-从入门到精通</a></li> <li><a href="/doc/839087517.html" target="_blank">Shell脚本-从入门到精通</a></li> <li><a href="/doc/d311695064.html" target="_blank">很实用的Shell脚本(实践版)</a></li> </ul> <span class="navname">最新文档</span> <ul class="lista"> <li><a href="/doc/1e19319250.html" target="_blank">高考英语词汇归类复习总结</a></li> <li><a href="/doc/1319319249.html" target="_blank">高考前重点词语复习05_高考英语词汇</a></li> <li><a href="/doc/9819165769.html" target="_blank">员工转正个人述职报告(15篇)</a></li> <li><a href="/doc/7719318083.html" target="_blank">员工转正个人述职报告(13篇)</a></li> <li><a href="/doc/6719016538.html" target="_blank">员工转正工作述职报告(15篇)</a></li> <li><a href="/doc/fb19254277.html" target="_blank">转正个人述职报告范文10篇</a></li> <li><a href="/doc/fc19254278.html" target="_blank">转正工作述职报告(15篇)</a></li> <li><a href="/doc/e719047055.html" target="_blank">员工转正的述职报告10篇</a></li> <li><a href="/doc/a819221789.html" target="_blank">新员工个人转正述职报告(10篇)</a></li> <li><a href="/doc/8619177096.html" target="_blank">转正述职报告(精选19篇)</a></li> <li><a href="/doc/2a19377810.html" target="_blank">员工转正个人述职报告(5篇)</a></li> <li><a href="/doc/1419319248.html" target="_blank">员工个人转正述职报告10篇</a></li> <li><a href="/doc/1a19319247.html" target="_blank">员工个人转正述职报告7篇</a></li> <li><a href="/doc/d919193107.html" target="_blank">转正述职报告(5篇)</a></li> <li><a href="/doc/2a19377809.html" target="_blank">Word操作技巧大全(汇总)</a></li> <li><a href="/doc/f819254276.html" target="_blank">word具有的功能是</a></li> <li><a href="/doc/e019047053.html" target="_blank">office常用功能介绍</a></li> <li><a href="/doc/ec19047054.html" target="_blank">Word软件的基本功能与操作</a></li> <li><a href="/doc/db19193106.html" target="_blank">Word的常用功能及操作详解</a></li> <li><a href="/doc/cf19079334.html" target="_blank">Word功能区全介绍</a></li> </ul> </div> </div> <script> var sdocid = "4724041fa8114431b90dd82b"; </script> <div class="footer"> <p><a href="/tousu.html" target="_blank">侵权投诉</a>  © 2013-2023 www.docsj.com  <a href="/sitemap.html">站点地图</a> | <a href="https://m.docsj.com">手机版</a></p> <p><a href="https://beian.miit.gov.cn" target="_blank">闽ICP备11023808号-7</a>  本站文档均来自互联网及网友上传分享,本站只负责收集和整理,有任何问题可通过上访投诉通道进行反馈</p> </div> <script type="text/javascript">foot();</script> </div> </body> </html>