Download presentation
Presentation is loading. Please wait.
Published byAri Wibowo Modified 5年之前
1
Linux, C++, ROOT 朱相雷 清华大学 威海暑期学校 2014年7月21日 杨振伟,《粒子物理与核物理实验中的数据分析》
2
Linux
3
本节摘要 什么是Linux 为什么使用Linux 使用Linux虚拟机 Linux简介(内核、shell以及目录结构等)
Linux终端的常用编辑器(vi, emacs, pico, ...) Linux 环境变量与Shell脚本(!!!) 2019/2/23
4
什么是Linux(1) 什么是Linux? Linux是众多操作系统的一种 主要特点 源代码开放,自由软件/代码 众多的不同发行版
强大的shell指令以及shell编程功能: cd, ls, grep, find, sed … 大量的科学计算、数据分析处理的程序包 (CERN、FermiLab、KEK以及其它众多机构提供支持) 2019/2/23
5
什么是Linux(2) 高能物理界普遍使用的是
Scientific Linux(SL) 或者Scientific Linux CERN(SLC) 与桌面系统结合得比较好的是ubuntu,目前最新版为ubuntu14.04 (1)Redhat发行Redhat Enterprise Linux(RHEL)发行版 (2)CERN与FermiLab基于RHEL内核,联合发行SL (3)CERN在SL的基础上发行SLC 主要定制了CERNLIB包。 本课程采用的是ubuntu LTS版本 2019/2/23
6
为什么使用Linux(1) 为什么使用Linux? 科研中可能会遇到的小问题(程序相关): 源代码开放,自由软件/代码
尤其是需要大规模集群计算进行数据分析的科研工作 强大的shell命令和脚本,多任务长时间的运算 科研中可能会遇到的小问题(程序相关): 1.在某文件夹下有很多文件和子文件夹,需要将所有的.cpp文件中的int改成float 2.同样该文件夹,有很多文件中可能包含某个函数,比如Fit_Landau(),需要找到函数的定义及使用 3.查看某个文本文件a.txt一共有多少行 4.某程序,需要变更其中的参数进行多次运行。 2019/2/23
7
为什么使用Linux(2) find . -name "*.cpp" -exec sed -i 's/int/float/g' {} \;
问题1可以用下面一行命令解决: find . -name "*.cpp" -exec sed -i 's/int/float/g' {} \; 即用find命令在当前目录寻找(递归)所有的cpp文件,找到后执行sed命令, 其中-name和-exec是find命令的参数,分别表示按文件名寻找和执行指令。 sed指令在文件中寻找(s)字符串“int”,替换为“float”。 find后面的“.”表示在当前目录寻找,也可以改成其它想寻找的目录,比如/home/geant4/mywork 问题2可以用grep命令解决: grep -srn "Fit_Landau" /home/geant4/mywork 即用grep命令递归查找/home/geant4/mywork目录里面的所有文件,打印出所有包含“Fit_Landau”字符串的文件名称,以及该字符串出现的行号和该行的内容。其中-srn是grep的参数,s表示忽略文件不存在或无法读取等错误信息,r表示在文件夹中递归查找,n表示打印出字符串出现的行号。这些参数可以组合使用。 2019/2/23
8
为什么使用Linux(3) wc -l a.txt 问题3可以用下面一行命令解决:
即用wc命令,计算a.txt文件有多少行,其中-l参数表示计算行数。如果改成-w,则表示计算有多少word。 问题4可以用shell脚本快速解决,详见shell脚本编程。 这仅仅是几个简单的例子,Linux提供的这种指令不计其数。一般通过baidu或者google/bing都可以查到如何实现你需要的功能。如何获取更多关于Linux的使用信息?不得不说的一句:搜索引擎是个好东西!!! 思考题:如何在linux下获得系统当前时间并截取时间中的月份?可以baidu试一下。 2019/2/23
9
使用Linux虚拟机 前提:安装了虚拟机软件VMware或者Virtual Box
下载或复制对应的ubuntu LTS虚拟机到本地硬盘 解压缩,开机 默认用户名:geant4 密码:geant4 登录之后点击左侧的 terminal图标, 获得一个shell界面 2019/2/23
10
Linux简介(1)-内核和shell UNIX/Linux 的任务可以简单地分为两部分:
承担操作系统与计算机之间的互动工作--内核(kernel), 承担操作系统与用户之间的互动工作--shell. 目前广泛应用的几大类shell (即指令集) : sh, csh, tcsh, bash, … 目前一般系统默认的是bash,高能物理里常用的为tcsh。 语法稍微有些区别,大同小异。 用自己习惯的就可以,无所谓优劣。 2019/2/23
11
Linux简介(2)-目录 / ← 根(root)目录 ← 操作系统设定 ← 系统管理员设定 ← 用户自己设定
UNIX/Linux 对文件与目录的管理,整体呈树状(tree)结构: / ← 根(root)目录 ← 操作系统设定 usr/ bin/ home/ sys/ tmp/ ... ← 系统管理员设定 zhux/ geant4/ yangzw/ ... ← 用户自己设定 Documents/ workdir/ geant4-exercises/ ... 2019/2/23
12
Linux简介(3)-文件所有者和权限 所有者与权限: Linux文件都有特定的所有者和所有组。
文件具有3类权限:可读(r)、可写(w)、可执行(x) 所有者有权规定3类用户对该文件的权限: 所有者自己(owner)、所有者同组成员(group)、其它用户(other) 最前面的字母”d”表示这是个目录 ”-”表明没有该位置对应的权限 2019/2/23
13
Linux简介(4)-绝对和相对路径 一个完整文件名应指定出其所处在的路径 (path),路径有相对路径和绝对路径
绝对路径: /home/geant4/workdir/vimrc (都是以”/”开始) 一个‘~’符号可以用来简单表示home: (相对路径的例子) ~/workdir/vimrc ← 所登录的用户 (e.g. geant4) ~geant4/workdir/vimrc ← 不同的用户 单个点‘.’ 表示当前目录, 两个点“. .”表示上一层目录 /home/geant4/workdir/pythia ← 当前目录 ../root ← 表示 /home/geant4/workdir/root 这种文件技巧对以后编写通用的 shell 脚本文件很有用。 2019/2/23
14
Linux终端的常用命令(1) pwd 显示当前目录(print working dir) passwd 修改当前用户的密码
ls [-lahrt] 列出当前目录中的文件(list) cd [dir] 进入指定目录或从当前目录回到用户的home目录 cd,cd foo,cd ../ cd /home/geant4/ mkdir dfoo 生成名为 dfoo 的子目录 rm [-rf] foo 删除文件 foo(参数rf表示强制删除文件夹,慎用) rmdir foo 删除名为 foo的子目录(foo 应已经为空目录) cp foo bar 拷贝文件 foo 到另一文件 bar cp –rp dfoo dbar 拷贝目录dfoo到另一个dbar,保持所有权限! mv foo bar 更改文件 foo 的名称为 bar man <command> 显示 command指令说明 man -k <keyword> 寻找 “keyword”指令说明页 history 列出最近使用过的指令很有用 du 显示当前目录所用空间大小 注意指令字母大小写。实际上Linux区分一切大小写,指令,文件名,目录名 2019/2/23
15
Linux终端的常用命令(2) more foo 显示名为foo 的文件(按空格键换页)
less foo 与 more foo类似,但可以往回翻页(按q 退出) vi foo 用vi 编辑名为 foo 的文件 (也可用pico,nano) emacs foo & 用emacs编辑foo文件 (& 为提交后台进程) ps 显示正在运行的进程 kill 345 删除进程 345 (如果不行可尝试使用kill -9) ./foo 在当前目录运行可执行文件 foo ctrl-c 中断目前在前台执行的进程 ln –s source linkname 为source建立一个符号链接linkname locate foo 在所有目录中寻找有文件名 foo 的路径 find . –name file1在当前目录中寻找文件名为file1的路径 grep TH1F foo 显示文件 foo 中含 “TH1F” 的每一行 sed –e “s/str1/str2/g” foo > bar 将文件foo中字符串 “str1”改为“str2”并将修改后的文件写到新文件bar,foo保持不变。 2019/2/23
16
Linux终端的常用命令(3) chmod 755 <file> 更改文件file的属性,1:x 2:w 4:r 5:rx 7:rwx chmod ug+x foo 使文件 foo对用户与同小组成员增加执行权限 diff file1 file2 比较文件file1和file2的不同 tar zcvf 1.tgz file1 file2 压缩file1,file2为1.tgz tar zxvf 1.tgz 解压缩1.tgz gcc test.c –o try1 用C编译器编译test.c,生成可执行文件try g++ test.cpp –o try2 用C++编译器编译程序 date 显示系统当前时间 sleep 暂停10秒钟 wc [–lw] file 显示file的行数/字数等信息 echo “Welcome to Linux World!” 屏幕显示指定字符串 file file 显示文件file1的属性 注:Shell有些特殊字符,比如 >, |, &等符号 ls > hehe.txt 将ls的结果写入hehe.txt,即重定向 ps aux | grep geant4 显示跟用户geant4有关的进程,即通道 2019/2/23
17
vi/emacs编辑器的基本指令 emacs:神的编辑器 vi(vim):编辑器之神 打开文件 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的常用命令 熟练使用一种编辑器可以极大提高工作效率,建议多多练习。 2019/2/23
18
Shell、环境变量和脚本(1) 承担操作系统与用户之间的互动工作--shell.
常用的shell (即指令集) : tcsh, bash, … chsh 该命令改变shell,输入密码后输入/bin/tcsh或/bin/bash shell中有很多环境变量,有的是系统的环境变量,有的是用户自己定义的环境变量,为系统和用户程序服务。 环境变量一般用大些字母定义(有些类似于C语言的宏定义) 比如PATH,PWD,USER,GROUP等都是系统环境变量。 查看所有环境变量: env或者printenv 查看环境变量PATH的值:echo $PATH或printenv PATH 定义环境变量 export GEANT4DIR=/home/geant (bash) setenv GEANT4DIR /home/geant (tcsh) 取消环境变量 unset GEANT4DIR 2019/2/23
19
Shell、环境变量和脚本(2) 什么是脚本(script): 脚本就是用于实现某种目的的命令集合。
为什么需要用脚本: 很多工作是重复性的,脚本可以让你更高效。 比如用脚本循环修改程序的某一部分,自动运行。 目 标: 1)知道什么是shell脚本(script),如何写自己的脚本 2)可以看懂别人的脚本 执行shell脚本,比如有脚本test.sh: ./test.sh 注:运行前确保用户对test.sh有可执行权限,否则, chmod u+x test.sh 2019/2/23
20
Shell、环境变量和脚本(3) 例:最简单的一个脚本 编写一个shell脚本test.sh:
#!/bin/bash # This is a simple test shell script echo “Hello everyone!” ls /home/$USER date echo $PWD 注:1) 标准的脚本都以“#!”开头,后面跟随bash/tcsh或其它脚本程序的路径(用which bash指令可以查看bash的路径) 2)注释行以“#”开头(第一行的#!除外) 3)需要执行的指令(一般每行一个指令) 2019/2/23
21
Shell、环境变量和脚本(4) 脚本中变量和循环的例子: bash vs tcsh #!/bin/bash #!/bin/tcsh
# Another test shell script ####for循环#### for i in `ls /home/yangzw` do echo $i done ####while循环### num=1 DIR=“testDir” while (( $num < 5 )) if [ -d $DIR$num ]; then echo “$DIR$num exist!!“ else mkdir $DIR$num fi let num+=1 #!/bin/tcsh # Another test shell script ####for循环#### foreach i `ls /home/yangzw` echo $i end ####while循环### num=1 DIR=“testDir” while ( $num < 5 ) if ( -d $DIR$num ) then echo “$DIR$num exist!!“ else mkdir $DIR$num endif set num=`expr $num +1` 2019/2/23 脚本中变量和循环的例子: bash vs tcsh
22
练习 到~/workdir目录下以linux为名建立目录, 然后在此目录中创建目录dir1,dir2, dir3,
以及文件file1,file2,index1.htm,index2.htm,test1.txt (提示:创建文件有多种方法,简单的方法是用touch命令) 设定以下两个环境变量WORKDIR和MYNAME,让它们分别等于 ~/workdir/linux 和 ${USER}_${GROUP} 2. 编写脚本myscript1.sh, 要求: 1)显示开始运行的时间; 2)在屏幕上打印出当前目录,当前用户名以及SHELL类型 3)显示WORKDIR与MYNAME的值 4)显示当前$WORKDIR目录所用磁盘空间 5)间隔5秒钟之后再显示出当前时间 2019/2/23
23
练习 3. 编写脚本looptest.sh, 要求: 1)将练习1中所有文件属性改成只有自己可以读/写/执行, 其他人只能读
2)将$WORKDIR目录中*.htm文件改成*.html (提示,可以用rename命令,也可以用for循环) 4. 在$WORKDIR目录,利用命令man vim > test1.txt创建临时文件test1.txt,再把test1.txt备份成test1.txt.bak。 练习用sed修改其中的字符串,用grep查找其中的字符串, 比如:1)查找其中包含”Vim”的行,并将结果写入final1.txt 2)不区分大小写查找包含”vim”的行,显示查找出多少行 3)用sed将其中的”vim”修改成”Vim” 4)比较test1.txt与test1.txt.bak的差别 5)删除final1.txt …… 5. 练习使用其它常用的Linux命令 6. 利用test1.txt熟悉vi编辑器 2019/2/23
24
本节总结 介绍Linux操作系统以及常用命令 Linux终端的常用编辑器(vi, emacs, pico, etc)
介绍shell、环境变量和脚本 目的:了解Linux操作系统的基本概念 熟练掌握Linux操作系统的常用命令 了解Shell脚本编程的基本概念 2019/2/23
25
参考资料 鸟哥的Linux私房菜 Linux从入门到精通,Phil Cornes著; 童寿彬等译
RedHat Linux 9系统管理,李蔚泽编著 精通Shell编程,Sriranga Veeraraghavan著; 卢涛译 Linux命令、编辑器与Shell编程,Mark Sobell著,杨明军等译 (一些Shell脚本编程的资料,以及vi的快速入门) Google, Bing, Baidu !!!! 2019/2/23
26
备用(vi常用指令) vi 的常用技巧 1. 显示行号 :se nu 2. 移动光标到第5行 :5 3. 移动光标到行首 ^
4. 移动光标到行尾 $ 5. 移动光标到文件头 gg 6. 移动光标到文件尾 G 7. 向后移动3个字 3w 8. 向前移动4个字 4b 9. 删除光标所在字 dw 10. 删除光标所在字符 x 11. 删除行 dd 12. 删除光标后3行 3dd 13. 删除光标至行尾 D 14. 用某字母(如”k”)替换光标所在字符 r k 15. 向下新增一行 o 16. 向上新增一行 O 17. 复制光标所在行 yy 18. 将复制的行粘贴到光标所在行下方 p 19. 将复制的行粘贴到光标所在行上方 P 20. 查找字符串”Abc” /Abc 21. 全局替换”Abc”为”ABC“ :%s/Abc/ABC/g 22. 将3-9行的”Abc”替换为”ABC” :3,9s/Abc/ABC/g 23. 将3-6行复制到第9行 :3,6 co 9 24. 将3-6行移动到第9行 :3,6 m 9 25. 删除3-6行 :3,6 d 行行首加上”ABC” :3,6s/^/ABC/g 行行首加上”//”,即C++注释 :3,6s/^/\/\//g 行行尾添加”ABC” :3,6s/$/ABC/g 29. 将光标的下一行连接到光标所在行 J 30. 将光标所在处字母变更大小写 ~ 31. 取消操作(undo) u 32. 重复操作(redo) . 33. 全文加亮光标当前变量 gd 34. 保存文件 :w 35. 保存退出 :wq 36. 不保存退出 :q! 37. 进入输入模式 i 38. 进入命令模式 ESC 39. 在行首进入输入模式 I 40. 在行尾进入输入模式 A 2019/2/23
Similar presentations