粒子物理与核物理实验中的,粒子物理与核物理实验中的

语言 4
数据分析 杨振伟清华大学 第一讲:Linux环境下编程
(1) 本讲摘要 „什么是Linux„为什么使用Linux„登陆和使用Linux服务器„Linux简介(内核、shell以及目录结构等)„Linux终端的常用命令(!
!
!
)„Linux终端的常用编辑器(vi,emacs,pico,etc)„Linux环境变量与Shell脚本(!
!
!
)„Linux下编译运行c/c++,fortran程序 2009-3-11
2 什么是Linux
(1) 什么是Linux?Linux是众多操作系统的一种 主要特点源代码开放,自由软件/代码众多的不同发行版强大的shell指令以及shell编程功能: cd,ls,grep,find,sed…大量的科学计算、数据分析处理的程序包 (CERN、FermiLab、KEK以及其它众多机构提供支持) 2009-3-11
3 什么是Linux
(2) 粒子与核物理界普遍使用的是 Scientific
LinuxCERN(SLC)或ScientificLinux(SL),
(1)Redhat发行RedhatEnterpriseLinux(RHEL)发行版
(2)CERN与FermiLab基于RHEL内核,联合发行SL
(3)CERN在SL的基础上发行SLC 主要定制了CERNLIB包。
本课程服务器采用的是ScientificLinuxCERN3(SLC3)版本最新版为SLC5.3 http://linux.web.cern.ch/linux/ 2009-3-11
4 为什么使用Linux
(1) 为什么使用Linux? 源代码开放,自由软件/代码
Linux的强势不在桌面、游戏等方面Linux的强势主要在于科学研究方面 尤其是需要大量计算或编程进行数据分析的科研工作强大的shell命令和脚本,多任务长时间的运算 科研中可能会遇到的小问题(程序相关):
1.在某文件夹下有很多文件和子文件夹,需要将所有的.cpp文件中的yang_int改成yang_float2.同样该文件夹,有很多文件中可能包含某个函数,比如Fit_Landau(),需要找到函数的定义及使用
3.查看某个文本文件a.txt一共有多少行
4.某程序,需要变更其中的参数进行多次运行。
2009-3-11
5 为什么使用Linux
(2) 问题1可以用下面一行命令解决: find.-name"*.cpp"-execsed-i's/yang_int/yang_float/g'{}\; 即用find命令在当前目录寻找(递归)所有的cpp文件,找到后执行sed命令,其中-name和-exec是find命令的参数,分别表示按文件名寻找和执行指令。
sed指令在文件中寻找(s)字符串“yang_int”,替换为“yang_float”。
find后面的“.”表示在当前目录寻找,也可以改成其它想寻找的目录,比如 /home/yangzw/mywork 问题2可以用grep命令解决: grep-srn"Fit_Landau"/home/yangzw/mywork 即用grep命令递归查找/home/yangzw/mywork目录里面的所有文件,打印出所有包含“Fit_Landau”字符串的文件名称,以及该字符串出现的行号和该行的内容。
其中-srn是grep的参数,s表示忽略文件不存在或无法读取等错误信息,r表示在文件夹中递归查找,n表示打印出字符串出现的行号。
这些参数可以组合使用。
2009-3-11
6 为什么使用Linux
(3) 问题3可以用下面一行命令解决: wc-la.txt即用wc命令,计算a.txt文件有多少行,其中-l参数表示计算行号。
如果改成w,则表示计算有多少word。
问题4可以用shell脚本快速解决,详见shell脚本编程。
这仅仅是几个简单的例子,Linux提供的这种指令不
计其数。
一般通过baidu或者google都可以查到如何实现你需要的功能。
如何获取更多关于Linux的使用信息? 不得不说的一句:搜索引擎是个好东西!!! 思考题:如果在linux下获得系统当前时间并截取时间中的月份?可以baidu试一下。
2009-3-11
7 登录和使用Linux 前提:拥有帐号(包括密码),知道服务器的域名或ip课程服务器的域名/ip是: 166.111.32.64某用户的用户名为:yangzw 登录远程服务器一般用ssh方式:1)从Linux终端登录 输入服务器域名,用户名,密码选择ssh方式登录 sshyangzw@2)Windows下用ssh客户端软件登录 putty,SecureCRT,Xmanager,…登录之后就进入服务器的term终端,然后可以在提示行中键入shell指令 目录名2009-3-11提示行和提示符
8 Linux简介
(1)-内核和shell UNIX/Linux的任务可以简单地分为两部分:承担操作系统与计算机之间的互动工作--内核 (kernel),承担操作系统与用户之间的互动工作--shell. 目前广泛应用的几大类shell(即指令集): sh,csh,tcsh,bash,… 目前一般系统默认的是bash,高能物理里常用的为tcsh。
语法稍微有些区别,大同小异。
用自己习惯的就可以,无所谓优劣。
2009-3-11
9 Linux简介
(2)-目录 UNIX/Linux对文件与目录的管理,整体呈树状(tree)结构: / ←根(root)目录 usr/ bin/ home/sys/ ←操作系统设定 tmp/... chensm/ zhanghb/ ←系统管理员设定 yangzw/... WWW/ code/ thesis/ ←用户自己设定 ... Linux:public_html/ 2009-3-11 10 Linux简介
(3)-文件所有者和权限 所有者与权限:Linux文件都有特定的所有者和所有组。
文件具有3类权限:可读(r)、可写(w)、可执行(x)所有者有权规定3类用户对该文件的权限: 所有者自己(owner)、所有者同组成员(group)、其它用户(other) 最前面的字母”d”表示这是个目录 ”-”表明没有该位置对应的权限 2009-3-11 11 Linux简介
(4)-绝对和相对路径 一个完整文件名应指定出其所处在的路径
(path),路径有相对路径和绝对路径 绝对路径:/home/chensm/geom/geom.dat(都是以”/”开始) 一个‘~’符号可以用来简单表示home:(相对路径的例子)~/geom/geom.dat←所登录的用户(e.g.chensm)~zhanghb/geom/result.dat←不同的用户 单个点‘.’表示当前目录,两个点“..”表示上一层目录 /home/chensm/geom←当前目录 ../geom ←表示/home/chensm/geom 这种文件技巧对以后编写通用的shell脚本文件很有用。
2009-3-11 12 Linux终端的常用命令
(1) pwdpasswdls[-lahrt]cd[dir] cd,cdmkdirdfoorm[-rf]foormdirfoo cpfoobarmvfoobar 显示当前目录(printworkingdir)修改当前用户的密码列出当前目录中的文件(list)进入指定目录或从当前目录回到用户的home目录 foo,cd../cd/home/zhanghb/ 生成名为dfoo的子目录删除文件foo(参数rf表示强制删除文件夹,慎用)删除名为foo的子目录(foo应已经为空目录) 拷贝文件foo到另一文件bar更改文件foo的名称为bar manmand>显示mand指令说明 man-k寻找“keyword”指令说明页 history 列出最近使用过的指令很有用 du 显示当前目录所用空间大小 注注意意指指令令中2中0的0的9字-字3-母1母1大大小小写写。

实实际际上上LLiinnuuxx区区分分一一切切大大小小写写,,指指令令,,文文件件名名,,目目录录1名3名 Linux终端的常用命令
(2) more
foo 显示名为foo的文件(按空格键换页) lessfoo 与morefoo类似,但可以往回翻页(按q退出) emacsfoo&用emacs编辑名为foo的文件(&为提交后台进程) vi,pico,nano,…这些命令都以可编辑方式打开文件 ps 显示正在运行的进程 kill345 删除进程345(如果不行可尝试使用kill-9) ./foo 在当前目录运行可执行文件foo ctrl-c 中断目前在前台执行的进程 ln–ssourcelinkname为source建立一个符号链接linkname locatefoo 在所有目录中寻找有文件名foo的路径 find.–namefile1在当前目录中寻找文件名为file1的路径 grepTH1Ffoo 显示文件foo中含“TH1F”的每一行 sed–e“s/str1/str2/g”foo>bar将文件foo中字符串 “str1”改为“str2”并将修改后的文件写到新文件bar上,foo保持不变。
2009-3-11 14 Linux终端的常用命令
(3) chmod
755更改文件file的属性,1:x2:w4:r5:rx7:rwx chmodug+xfoo使文件foo对用户与同小组成员增加执行权限 difffile1file2比较文件file1和file2的不同 tar–zcvf1.tgzfile1file2压缩file1,file2为1.tgz tar–zxvf1.tgz 解压缩1.tgz test.c–otry1用C编译器编译test.c,生成可执行文件try g++test.cpp–otry2用C++编译器编译程序 date 显示系统当前时间 sleep10 暂停10秒钟 wc[–lw]file 显示file的行数/字数等信息 echo“etoLinuxWorld!
”屏幕显示指定字符串 filefile1 显示文件file1的属性 注注::LLiinnuuxx有有些些特特殊殊字字符符,,比比如如>>,,||,,&&等等符符号号 llss>>hheehhee..ttxxtt将将llss的的结结果果写写入入hheehhee..ttxxtt,,即即重重定定向向 ppssaauuxx20||09g-gr3r-ee1p1pyyaannggzzww显显示示跟跟用用户户yyaannggzzww有有关关的的进进程程,,即即通通道道 15 Emacs、Vi编辑器的基本指令 emacs:很好很强大 打开文件emacs[filename]保存文件^x^s退出文件^x^c nano(pico):简单文本编辑打开文件nano[filename]保存文件^o退出文件^x vi(vim):古老,不过也很强大 打开文件vi[filename] 保存文件:w (注意:是输入冒号然后输入w或q或q!
) 退出文件:q 不存退出

:q!
注:vi有两种模式,命令模式和输入模式 按小写字母”i”进入输入模式,按”esc”键进入命令模式 在命令模式中可以输入命令很方便的进行编辑修改 讲义最后列了一些vi的常用命令 熟熟练2练0使0使9用-用3-任1任1何何一一种种编编辑辑器器都都可可以以极极大大提提高高工工作作效效率率,,建建议议多多多多练练习习。

16 Shell、环境变量和脚本
(1) 承担操作系统与用户之间的互动工作--shell.

常用的shell(即指令集):tcsh,bash,… chsh该命令改变shell,输入密码后输入/bin/tcsh或/bin/bash shell中有很多环境变量,有的是系统的环境变量,有的是用户 自己定义的环境变量,为系统和用户程序服务。
环境变量一般用大些字母定义(有些类似于C语言的宏定义) 比如PATH,PWD,USER,GROUP等都是系统环境变量。
查看所有环境变量: env或者printenv 查看环境变量PATH的值:echo
$PATH或printenvPATH 定义环境变量 exportYANGDIR=/home/yangzw(bash) setenvYANGDIR/home/yangzw (tcsh) 取消环境变量unsetYANGDIR 2009-3-11 17 Shell、环境变量和脚本
(2) 什么是脚本(script):脚本就是用于实现某种目的的命令集合。
这些命令集合放在一个文件中,由shell来解析执行。
为什么需要用脚本:很多工作是重复性的,脚本可以让你更高效。
比如用脚本循环修改程序的某一部分,自动运行。
目标:1)知道什么是shell脚本(script),如何写自己的脚本2)可以看懂别人的脚本 执行shell脚本,比如有脚本test.sh: ./test.sh注:运行前确保用户对test.sh有可执行权限,否则, chmodu+xtest.sh 2009-3-11 18 Shell、环境变量和脚本 例:最简单的一个脚本编写一个shell脚本test.sh: #!
/bin/bash#Thisisasimpletestshellscript echo“Helloeveryone!
”ls/projects/$USERdateecho$PWD 注:1)标准的脚本都以“#!
”开头,后面跟随bash/tcsh或其它脚本程序的路径(用whichbash指令可以查看bash的路径) 2)注释行以“#”开头(第一行的#!
除外)3)需要执行的指令(一般每行一个指令) 2009-3-11 19 Shell、环境变量和脚本 #!
/bin/bash#Anothertestshellscript #!
/bin/tcsh#Anothertestshellscript ####for循环####foriin`ls/home/yangzw`do echo$idone####while循环###num=1DIR=“testDir”while(($num<5))do if[-d$DIR$num];thenecho“$DIR$numexist!
!
“ elsemkdir$DIR$num filetnum+=1done ####for循环####foreachi`ls/home/yangzw` echo$iend ####while循环###num=1DIR=“testDir”while($num<5) if(-d$DIR$num)thenecho“$DIR$numexist!
!
“ elsemkdir$DIR$num endifsetnum=`expr$num+1`end 2009-3-11脚本中变量和循环的例子:bashvstcsh 20 练习
1.到/projects目录下以$USER为名建立自己的工作目录,在$HOME目录下建立一个符号链接“workdir”,链接到/projects/$USER(提示:可以用echo或printenv看看USER和HOME两个环境变量的值)然后到workdir中创建目录dir1,dir2,dir3,以及文件file1,file2,index1.htm,index2.htm,test1.txt(提示:创建文件有多种方法,简单的方法是用touch命令)设定以下两个环境变量WORKDIR和MYNAME,让它们分别等于 /projects/$USER ${USER}_${GROUP}
2.编写脚本myscript1.sh,要求:1)显示开始运行的时间;2)在屏幕上打印出当前目录,当前用户名以及SHELL类型3)显示WORKDIR与MYNAME的值4)显示当前$WORKDIR目录所用磁盘空间5)间隔5秒钟之后再显示出当前时间 2009-3-11 21 练习
3.编写脚本looptest.sh,要求:1)将练习1中所有文件属性改成只有自己可以读/写/执行,其他人只能读2)将$WORKDIR目录中*.htm文件改成*.html(提示,可以用rename命令,也可以用for循环)
4.将/projects/yangzw/Lec_materials/test1.txt拷贝到自己的工作目录,再把test1.txt备份成test1.txt.bak。
练习用sed修改其中的字符串,用grep查找其中的字符串,比如:1)查找其中包含”Vim”的行,并将结果写入final1.txt2)不区分大小写查找包含”vim”的行,显示查找出多少行3)用sed将其中的”vim”修改成”Vim”4)比较test1.txt与test1.txt.bak的差别5)删除final1.txt ……
5.练习使用其它常用的Linux命令 2009-3-11 22 总结 „介绍Linux操作系统以及常用命令„Linux终端的常用编辑器(vi,emacs,pico,etc)„介绍shell、环境变量和脚本„介绍Linux下c/c++程序的编译指令 目的:了解Linux操作系统的基本概念熟练掌握Linux操作系统的常用命令了解Shell脚本编程的基本概念 2009-3-11 23 参考资料
1.Linux从入门到精通,PhilCornes著;童寿彬等译
2.RedHatLinux9系统管理,李蔚泽编著
3.精通Shell编程,SrirangaVeeraraghavan著; 卢涛译
4.Linux命令、编辑器与Shell编程,MarkSobell 著,杨明军等译5./~yangzw/Cours eDataAna/(一些Shell脚本编程的资料)
6.Googleand/orBaidu!
!
!
!
2009-3-11 24 备用(vi常用指令) vi的常用技巧 13.删除光标至行尾
1.显示行号
D :senu2.移动光标到第5行 14.用某字母(如”k”)替换光标所在字符 :53.移动光标到行首 ^
4.移动光标到行尾 rk15.向下新增一行 o $ 16.向上新增一行
5.移动光标到文件头gg
6.移动光标到文件尾G
7.向后移动3个字3w O17.复制光标所在行 yy18.将复制的行粘贴到光 标所在行下方
8.向前移动4个字 p 4b9.删除光标所在字 19.将复制的行粘贴到光标所在行上方 dw10.删除光标所在字符 x11.删除行 P20.查找字符串”Abc” /Abc dd 21.全局替换”Abc” 12.删除光标后3行 为”ABC“ 3dd2009-3-11:%s/Abc/ABC/g 22.将3-9行的”Abc”替换为”ABC” :3,9s/Abc/ABC/g23.将3-6行复制到第9行 :3,6co924.将3-6行移动到第9行 :3,6m925.删除3-6行 :3,6d26.3-6行行首加上”ABC” :3,6s/^/ABC/g27.3-6行行首加上”//”, 即C++注释 :3,6s/^/\/\//g28.3-6行行尾添加”ABC” :3,6s/$/ABC/g29.将光标的下一行连接 到光标所在行 J30.将光标所在处字母变 更大小写 ~31.取消操作(undo) u32.重复操作(redo) . 33.全文加亮光标当前变量 gd34.保存文件 :w35.保存退出 :wq36.不保存退出 :q!
37.进入输入模式 i38.进入命令模式 ESC39.在行首进入输入模式 I40.在行尾进入输入模式 A 25

标签: #做什么 #做什么 #做什么 #做什么 #费用 #什么是运维管理 #物体 #命令