Linux illustration

Download Report

Transcript Linux illustration

Linux illustration
content








why we use linux
Basic concept for linux newbie
Useful commands in linux
System configuration howto
How to work efficiently
Programming under linux
Remote operation howto
About our work
Why we use linux
Linux is more efficient
 Linux is more stable
 For compatibility
 Linux is free
 Linux is more flexible

新手上路之基本概念
预备知识
 文件系统
 进程
 Linux环境

预备知识
登陆到linux
 从linux注销
 控制台和视窗环境
 重起活着关闭linux
 Linux中最有用的命令

登陆到linux
字符界面登陆,蓝色字符表示输入
Red Hat Linux release 9 (Shrike)
Kernel 2.4.20-mosix on an i686
login: dhh
Password:这里输入密码,没有回显
Last login: Tue Apr 6 18:05:38 from 10.14.122.253
You have new mail.
[dhh@d6 dhh]$
最后一行是命令提示符号,表示进入了shell.

登陆到linux
图形界面登陆
这种登陆界面和windows的登陆界面类似。所以这
里就不详细介绍了。
至于用那种模式登陆取决于文件
/etc/inittab. 在这个文件中有一行包含字符:
“id:3:initdefault:”,其中的数字3指定了登陆的
模式为字符界面的。如果把3改成5就是图形界面
登陆模式。具体可以参照man inittab。

从linux注销
[dhh@d6 dhh]$ exit
 [dhh@d6 dhh]$ Ctrl-d
输入exit按回车或者直接按Ctrl和d的复合键
就可以从linux中退出。如果在图形界面的
情况下面有菜单可以选择退出或者关机。

控制台和视窗环境


[dhh@d6 dhh]$
当你在字符模式下面登陆到linux的时候,你处于控制台
(你处于一个正在运行的shell中),你可以通过Ctrl和Fn键
来切换控制台,这里的n指的是数字,譬如说F1,F2等等。
一般来说,linux默认有6个控制台可以切换。如果你愿意
的话,你可以把它添加到上百个。上面的字符就是linux的
shell的提示符号的一种。
进入视窗环境
[dhh@d6 dhh]$ startx
startx是进入视窗环境的一个命令
重起或者关闭linux
shutdown
 init
 halt
 reboot
这里的有些命令默认只能由root来执行。比较
常用的是shutdown,halt和reboot

Linux中最有用的命令
man – 按格式打印出linux的在线文档
命令举例: man man
man ls
按 q 来退出man。
下面就是man g77的一段:
G77(1)
GNU

NAME
g77 - GNU project Fortran 77 compiler
SYNOPSIS
G77(1)
文件系统
文件系统的结构是树状的
[dhh@d6 dhh]$ tree bin
bin
|-- flitter
|-- rpm2targz
| |-- README
| |-- rpm2targz
| `-- rpmoffset.c
`-- tmp
1 directory, 6 files
[dhh@d6 dhh]$
和windows不一样的是,linux只有一个根(root) 或者说/
文件系统
mount – 挂载一个文件系统
[dhh@d6 dhh]$ cat /etc/fstab
LABEL=/
/
ext3
defaults
11
none
/dev/pts
devpts
gid=5,mode=620 0 0
LABEL=/home
/home
ext3
defaults
12
none
/proc
proc
defaults
00
none
/dev/shm
tmpfs
defaults
00
LABEL=/usr
/usr
ext3
defaults
12
LABEL=/var
/var
ext3
defaults
12
/dev/hda5
swap
swap
defaults
00
/dev/fd0
/mnt/floppy
auto
noauto,owner,kudzu 0 0
none
/mfs
mfs
dfsa=1
00
[dhh@d6 dhh]$
Fstab里面写的是系统启动的时候挂载的分区列表。
尝试用命令 fdisk –l 来察看磁盘的分区结构.

文件系统
ls – 列出文件或者目录
命令举例: ls -lh *.html
ls -ltr
 cp – 拷贝文件或者目录
命令举例: cp file1.c ~/tmp/file2.c
 mv – 移动或者重命名文件
命令举例: mv ising.c ising.c.old
mv ising.c ~/backup/

文件系统
rm – 移除/删除文件
命令举例:
rm -rf ~/bin
命令 rmdir 只删除空目录
 pwd – 打印工作目录(当前目录)
 cd – 改变当前目录到其他目录
命令举例:
cd ..
cd /home
cd –
 chgrp – 改变文件或者目录的属组
命令举例: chgrp users filename
这样就把filename这个文件改成属于users这个组。

文件系统
chown – 改变文件的属主
命令举例: chown -R dhh.users bin/
 chmod – 改变文件的存取权限
举例: 当你用ls –l来察看文件的时候,会看到类似情况:
-rwxr-x--x 表示文件是一个普通文件。文件的主人可以读
(r),写(w) 和执行(x)文件。在同一个组的用户可以读可执
行文件,而其他的用户只有执行文件的权限。
试试 chmod 600 filename ; chmod +x filename
看看文件的权限在命令前后有什么变化?
试试 chmod –x filename ,然后去执行这个文件?

文件系统
控制台下面察看文件的命令
more – 分屏显示文件,翻页用f(forward),b(backward)或者
空格,可以按回车单向逐行翻动显示内容。
cat – 连接文件并且在标准输出输出文件内容,普通用法和
more类似,但是不会分屏显示,而是一下子全部输出。
命令举例: cat file
cat file1 file2
less – 分屏显示文件,可以用方向键逐行翻动文件
你可以按q来退出more或者less的察看文件的状态。按键q可
以使得你能在linux的很多暂停状态下面退出来,譬如在运
行命令top的时候。

进程
[dhh@z3 dhh]$ date;who
Tue Apr 6 15:55:57 CST 2004
dhh
pts/0
Apr 6 15:0 (10.14.122.253)
[dhh@z3 dhh]$
当你运行程序的时候,那就是说,linux里面有进程在运行。
进程是linux运行的程序单位。
你可以给正在运行的进程发送信号。如果你在shell的前台运
行程序,你可以按Ctrl-c来向当前进程发送SIGINT这样的
信号。默认的对信号SIGINT的处理方式是终止进程。
问题: date && who和上面的data;who有什么区别?
进程
举例:
[dhh@z3 dhh]$ ./ising
Ctrl-c
[dhh@z3 dhh]$
进程ising也许需要运行10天才能正常结束。这里的 Ctrl-c
中断了进程的继续运行。
每个运行中的进程有唯一的一个整数和它对应,我们称呼 这
个整数为进程id,往往用pid作为缩写。
你可以用命令ps或者top来找到进程的进程id。
尝试用Ctrl-c来终止一个进程?
进程
top – 显示最占用cpu/内存等等的程序
 ps – 报告进程状态的命令
命令举例: ps -u dhh
ps –aux
尝试在ps的输出项中找到pid项。
 nohup – 运行一个程序,忽略挂起信号,同时使得输出为
非终端。往往用在需要长期运算的程序。
 nice – 运行一个进程优先级别经过调整的程序。
 at – 调整或设定计划任务(单次执行)
命令举例:at now+5min < file

进程
在后台运行进程
[dhh@z3 dhh]$ nohup nice ./ising > /dev/null &
[1] 4931
[dhh@z3 dhh]$ jobs
[1]+ Running
nohup nice ./ising >/dev/null &
[dhh@z3 dhh]$ fg %1
nohup nice ./ising >/dev/null
Ctrl-c
[dhh@z3 dhh]$ jobs
[dhh@z3 dhh]$

进程
在后台运行进程
[dhh@z3 dhh]$ ./ising
Ctrl-z
[1]+ Stopped
./ising
[dhh@z3 dhh]$ bg
[1]+ ./ising &
[dhh@z3 dhh]$
这里的Ctrl-z向进程发送了信号SIGSTP。命令 bg 把进程放
到了后台,相反的命令是 fg. 命令jobs 列出了被放到后台
的可以由shell控制的进程列表。

进程
kill – 终止/杀死进程
事实上,kill只是向进程发送信号。默认的发送给进程的信号是
SIGTERM。这个信号往往会让进程体面的终止它自己。
用法举例:
[dhh@z3 dhh]$ ps -u dhh
PID TTY
TIME CMD
4635 pts/0 00:00:00 bash
5026 pts/0 00:00:00 ps
[dhh@z3 dhh]$ kill –s SIGSTP 4635
如果你想让操作系统,而不是进程来终止进程,你可以这样运行命令:
kill -9 4635。这个命令并不是发送信号。没有9这样的信号。

进程
关于信号的一个有趣的练习
[dhh@z3 dhh]$ more trap.sh
#!/bin/sh
trap 'echo sigint catched' 2
trap 'echo oh! My god! someone want kill me!' 15
read in
echo "$in is inputed"
[dhh@z3 dhh]$
运行命令chmod +x trap.sh. 运行这个脚本,按 Ctrl-c 或者
尝试 kill 来杀死进程,看看发生了什么?
Linux环境
新手上路-怎样执行一个程序?
通过绝对路径来执行命令:
/sbin/ifconfig
通过一个相对路径来执行命令:
cd /sbin
./ifconfig

Linux环境
Shell是怎样找到命令的?
[dhh@z3 dhh]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/ho
me/dhh/bin
[dhh@z3 dhh]$
这里的 PATH 是一个系统的环境变量。

Linux环境
管道和I/O重定向
who | wc -l
“|” 这里就是一个管道。通过管道的连接命令“who”
的输出就作为了命令“wc -l”的输入。
ls -l > ls.out
“>” 是 I/O 重定向指示符。可以察看文件ls.out来获
得输出内容。
比较who | sort 和who > sort之间的区别。

Linux环境
管道和I/O重定向
在一般的环境下面,每个进程在启动的时候有三
个文件描述符和它关联,其中之一是对应标准输
入(3),其中之一对应标准输出(1),另外一个用来
打印诊断和错误信息,那就是标准错误 (2)。
f77 –o ising ising.f90 2>&1 | more
f77 -o ising ising.f 2 > err.log

Linux中有用的命令
grep –打印匹配的内容
用法举例:
[dhh@d6 dhh]$ who
econo3 tty1
Apr 6 23:27
dhh
pts/1
Apr 7 01:41 (10.14.122.253)
econo3 pts/0
Apr 6 23:31 (:0.0)
[dhh@d6 dhh]$ who | grep dhh
dhh
pts/1
Apr 7 01:41 (10.14.122.253)
[dhh@d6 dhh]$ who | grep -v dhh
econo3 tty1
Apr 6 23:27
econo3 pts/0
Apr 6 23:31 (:0.0)
[dhh@d6 dhh]$ who | grep -v "eco*"
dhh
pts/1
Apr 7 01:41 (10.14.122.253)
[dhh@d6 dhh]$

Linux中有用的命令
find – 在指定的目录中找查找文件
用法举例:
find . -name “*.mp3” -exec rm {} \;
 locate – 在一个updatedb产生的数据库里面查找文件
 who – 显示谁在线
 which – 显示被使用的命令的全路径
注:可能多个相同命名的程序,可以找到当前被执行的是哪个。
 whereis – 定位一个命令的可执行文件,源码和手册的路径
用法举例:
 [dhh@d6 dhh]$ whereis ls
 ls: /bin/ls /usr/share/man/man1/ls.1.gz
 [dhh@d6 dhh]$

Linux中有用的命令
su – 运行一个具有不同用户id和组id的shell,或者说切换
用户。
用法举例: su - dhh
 tar – GNU版本的打包工具
用法举例: tar jxvf file.tar.bz2
tar zxvf file.tar.gz
tar jcvf file.tar.bz2 ./file/
tar zcf file.gz ./file/*
 gzip – 压缩或者解压缩文件(zip)
 bzip2 – 一个块压缩/解压缩工具(bzip2)

Linux中有用的命令
passwd – 更新/修改用户的密码
 adduser – 新建用户
用法举例: adduser dhh -g users
 file – 判断文件类型的命令
 tail – 输出文件的最后部分
 head – 输出文件的最前面部分
 wc – 打印出文件的大小,单词个数或者行数。
用法举例: wc -l result.dat
用现有的命令怎么打印出文件的第一行?

Linux中有用的命令
sed 和 awk
用法举例:more file | sed s/abc/def/g
cat file | sed –n 5p
sed s&<[^>]*>&&g file
awk ‘{print $5}’ file
我确实看到过有一本很厚的书仅仅用来讲 sed 和
awk的用法。命令sed 和 awk 的威力是远远超出
你的想像能力的。

系统配置howto
ftp服务
/etc/init.d/vsftpd start/stop/restart
 telnet 服务 (不安全)
修改 /etc/xinetd.d/telnet, 修改 disable = yes 为
disable = no. 然后运行 /etc/init.d/xinetd
restart.
 ssh 服务 (推荐)
/etc/init.d/sshd start/stop/restart
在 ssh 中传输的数据是加密过的,所以它比较安全

系统配置howto
ftp客户端
在linux下面: gftp, lftp, ncftp, ftp
在windows下面: leapftp等等
 telnet 客户端
Linux下面:gnome-terminal->telnet
Windows下面 telnet, putty,fterm (推荐)
 ssh client
Linux下面 ssh, scp, sftp
Windows下面 sshwinclient, putty,fterm
其中 sshwinclient 支持 sftp 文件传输

系统配置howto
lftp的一个例子
[dhh@hhding dhh]$ lftp 10.14.122.166 -u dhh
Password:
lftp [email protected]:~> ls
drwxrwxr-x 3 505
100
4096 Mar 30 11:29 bin
drwxr-xr-x 7 505
100
4096 Apr 04 21:19 dl
drwxrwxr-x 6 505
100
4096 Apr 03 07:31 doc
drwxr-xr-x 2 505
100
4096 Apr 06 19:25 src
drwxr-xr-x 3 505
100
4096 Apr 08 16:30 tmp
drwxr-xr-x 4 505
100
4096 Apr 06 11:27 work
lftp [email protected]:~> bye
[dhh@hhding dhh]$

系统配置howto
lftp里面的一些命令
get – 从服务器取得单个文件
mget – 从服务器取得多个文件(支持通配符)
put – 上传文件到服务器
mput – 上传多个文件到服务器
binary – 设置传输模式为二进制(这个命令可以简写为bin)
lcd – 改变上传的本地目录
! – 在不退出ftp状态的情况下切换到一个shell环境中
open – 连接指定端口的远程主机
user –指定用户名
bye – 断开连接
几乎所有的基于字符界面的ftp客户端都支持以上命令。
mirror && mirror –R
queue – 把一个任务放入队列
我们可以象在shell中那样按 Ctrl-z 把任务放到后台运行。
lftp支持 TAB 自动补全,我们将会在稍后介绍。
系统配置howto
和ssh有关的几个命令
ssh -l dhh 10.14.122.166
ssh -l -X [email protected]
最后的那个命令使得X forward生效。
Public key (公共密匙?)验证
第一步: ssh-keygen -t dsa
第二步: scp ~/.ssh/id_dsa.pub
target_host:~/.ssh/authorized_keys
这里的target_host应该替换成为远程主机的实际的机器名或
者ip。

系统配置howto
软件安装howto
在linux世界里面,往往存在两大类安装方式
的软件,其中一种是源代码安装方式,另
外一种是二进制的文件安装方式。所以我
们应该用不同的方式处理这两种软件。

系统配置howto
源代码方式
一般来说每个安装软件都有安装文档,他们们可能
是 README 或者 INSTALL ,里面一般都有详
细的安装过程介绍。最普通的安装软件方式,也
是比较通用的安装软件的步骤是:
./configure
make
make install
以上命令应该在源代码所在目录运行。

系统配置howto
二进制软件
我们常用的redhat公司发布的linux,常见的的二进
制软件包是rpm包。
我们可以在Xwindows的gnome窗口环境下通过双击
rpm包来安装rpm包。如果在命令行的情况下面,
可以通过运行命令 rpm -ivh file.rpm 来安装软件,
可以通过运行 rpm -e file 来卸载软件。
具体信息可以通过察看 rpm 的手册来获得。

系统配置howto
ifup && ifdown – 激活或者禁用网络设备
 ifconfig – 配置网络设备
应用举例: /sbin/ifconfig eth0 10.14.122.167
/sbin/ifconfig eth0
什么文件控制了网络配置信息?
看看文件 /etc/sysconfig/network-scripts/ifcfgeth0 的内容或者看在下面的目录中包含的文件:
/etc/sysconfig/networking/profiles/default/

系统配置howto
uname – 打印出系统基本信息
 free – 显示被使用和空闲的内存
 df - 显示文件系统的磁盘使用情况
 du – 估计文件占用磁盘空间情况
用法举例: du -sh *
 vmstat – 显示虚拟内存统计情况

系统配置howto

存取外部设备
我们怎样存取软驱,光驱或者u盘?
/dev/cdrom
/mnt/cdrom
udf,iso9660 noauto,owner,kudzu,ro 0 0
/dev/fd0
/mnt/floppy
auto noauto,owner,kudzu 0 0
前面两行是从文件/etc/fstab拷贝过来的, 他们指定了挂载光驱和软驱的选项,
通过这些选项,每个用户都可以存取这两个设备。
挂载U盘的命令:
mount -t vfat /dev/sda1 /the/mount/point/
mount的几个常用用法
挂载软驱 mount -t ext3 /dev/fd0 /mnt/floppy
挂载光驱 mount -t iso9660 -o loop /dev/cdrom /mnt/cdrom
挂载iso文件 mount -t iso9660 -o loop /dir/file.iso /target/directory
高效工作的技巧
Shell脚本
 无法归类的技巧
 定制你的工作环境

Shell脚本
假设在当前目录下面有10000个压缩文件,假设文件类似
0001.tar.bz2,0002.tar.bz2,你怎样才能把所有的这些文
件解压缩?输入下面的命令:
[dhh@d6 dhh]$ for fn in *.tar.bz2
> do tar jxf $fn
> done
[dhh@d6 dhh]$
 Ok, 你会发现所有的文件都被解压缩了。这只不过是shell
的一个小技巧而已。如果你愿意的话,你可以把这些命令
写到文件里面,那么这个文件就叫做shell脚本了。

Shell 脚本
我的一个简单的shell脚本
[dhh@d6 bin]$ more gg
#!/bin/sh
infile=$1
/usr/bin/gcc -ggdb -o ${infile%.c} $infile -lm
[dhh@d6 src]$ ls ising.c
ising.c
[dhh@d6 src]$ gg ising.c
ising.c: In function `main':
ising.c:27: warning: return type of `main' is not `int'
[dhh@d6 src]$
这样你就不用输入很长的gcc –ggdb –o ising ising.c –lm了

无法归类的技巧
关于 TAB
这里有一个文件名很长的文件:“who am I, I am dhh, do
you know me, who are you”, oh, my god! 这确实是一个文
件名!我想察看文件内容,那么我应该输入所有的这些文
字吗?
[dhh@d6 test]$ ls
current ising_Metropolis_current.c who am I, I am dhh, do
you know me , who are you
[dhh@d6 test]$ more who\ am\ I\,\ I\ am\ dhh\,\ do\
you\ know\ me , who\ are\ you
我所输入的是:more w<TAB>, 然后就可以了。Is it great?

无法归类的技巧
alias
我在~/.bashrc里面的部分alias:
alias cx='chmod u+x'
alias c=clear
alias vv='konqueror &'
alias mm='mozilla &'
alias 88='lftp 10.13.22.88 -p 52088‘
不错, 命令 alias 是命令的缩写,如果你运用这个技巧的话,
可以节省很多时间。如果你不再需要某些 alias ,你可以
用命令 unalias 来使得这些alias失效。

无法归类的技巧




alias 的几个例子
在fortran的编程中,我们经常做一些烦琐的事情。举例
rm 输出文件, 编译fortran文件, 而且这种过程要重复非常
多次。让我们采取一些技巧来简化这些问题。
假设我们需要编译的文件是test.f, the binary file test will
output 2 files named ising.dat and sum.dat.
Ok, 输入以下命令: alias r=“rm ising.dat sum.dat”;alias
f=“f77 –o test test.f”; alias e=“./test &”;alias p=“r;f”;
这样,你就可以节省很多时间了。
无法归类的技巧
当你结束工作的时候退出linux
 The xwindows or screensaver will cost a
lot of source: maybe 100-200M memory
and 3%-40% cpu time. So logout after you
finished the work is a good idea.

定制你的工作环境
正如上面提到的那样,你可以定制你的工作环境。
 ~/.bashrc
这个文件会在启动shell的时候被执行。
 ~/.bash_profile
这个文件会在你登陆linux的时候被执行
 ~/.vimrc
我的 .vimrc 的内容
:map <F3> :w^M:!gcc -ggdb -o %< % -lm ^M
:syntax on

在linux工作环境中编程
f77 – gnu的fortran 77编译器。
应用举例: f77 -o file file.for
 gcc – gnu的C和C++编译器集合
应用举例: gcc -ggdb -o file file.c -lm
 gdb – gnu的调试器
 ddd – ddd 是 gdb的图形版本?
好像还没有能比较好调试fortran的调试器,不过已经有商业
版本的fortran调试器已经被开发出来。 gdb 可以调试
fortran,但是到目前为止,它对fortran的调试支持的还不
是很好。

在linux工作环境中编程
gdb
[dhh@d6 src]$ gdb -q ising_Metropolis
(gdb) list
20
void neighbor(int i, int nn[ ]);
21
void monte_carlo();
22
void energy(double *);
23
24
/* The main program */
25
26
void main()
27
{
28
int i, mc;
29
double e = 0;
(gdb) break main
Breakpoint 1 at 0x8048430: file ising_Metropolis.c, line 29.

在linux工作环境中编程
gdb中的几个基本命令
run – 运行程序,可以加命令行参数
list – 列出源码
break – 设定断点
watch – 设定需要被watch的变量
bt – print backtrace of all stack frames
打印出所有函数间的调用关系
print – 打印出变量数值等等
shell – 暂时到一个shell里面
step – 单步执行,调试子函数
next – 单步执行,遇到子函数不进入子函数执行

在linux工作环境中编程
几个在调试的时候的技巧
在屏幕上打印出你想知道的信息,这种做法有些时
候比使用调试器还要有用。这也许是在没有调试
器的时候调试程序的唯一方法。
一些在运行程序时候的错误信息:
Segmentation fault(段错误)? 这种错误往往发生在
类似情况:你开了一个数组:a[0:100], 但是在你
的程序中,你去存取 a[102], 这个时候错误就发生
了。

在linux工作环境中编程
源码编辑器
 gedit
(推荐新手使用)
 nedit
(推荐新手使用)
 vim
( 功能很多,但是上手有些麻烦)
 emacs (专家使用)
我从来没学过 emacs. 这个编辑器太复杂,看
起来比较的可怕。

远程操作howto
从windows远程操作
所需软件:
xwin32 和 (telnet 或者 ssh 客户端)
[dhh@d6 dhh]$ alias pp
alias pp='export DISPLAY=10.14.122.253:0'
[dhh@d6 dhh]$ pp
在10.14.122.253(windows)运行 xwin32 ,把 d6 加为 可信
任的 主机. 在xwin32中添加一个xdmcp session(会话)
在远程主机上运行图形界面的程序,这个程序的输出会被显
示到windows的机器上。view

远程操作howto
从linux远程操作
[dhh@d6 dhh]$ alias pp
alias pp='export DISPLAY=10.14.122.253:0'
[dhh@d6 dhh]$ pp
本地主机运行: xhost + d6,
然后就可以象本地机器上运行程序一样运行
远程主机上的程序了。

关于我们的工作
用什么浏览器替代ie来找文献?
mozilla 是一个优秀的web浏览器
konqueror 在某些情况下面比mozilla做的更好。
 xpdf
我们可以用 xpdf来浏览pdf文件。
 Email?
evolution和outlook比较相似。mutt它功能比较强
大,但是它用起来比较复杂(基于字符界面的)

关于我们的工作
xmgrace
Oh! You can download it and try to install it. Please
read the /usr/local/grace/doc/Tutorial.html,
you can know how to operate the xmgrace by
learning the document.
 latex
Yeah, latex is the default installed software in linux.
there are a tutorial for you!

关于我们的工作
Latex
Latex是一个非常优秀的软件,怎么写latex文件是一
个很细致的问题,可以看以上教程,从latex的源
文件生成到pdf或者ps文件需要两个步骤:1.用命
令latex src.tex生成设备无关的dvi文件src.dvi。2.
用命令dvipdf/dvips把这个设备无关文件转化成
pdf/ps文件,也就是我们平常看到的打印效果。

Useful links
http://zimp.zju.edu.cn/~fren/
The link doc and mirror_of_wy contain many
ebooks and example about linux.
You can find the document about latex, gdb,
vim and many useful document there.

Thanks
Thank the cpsp group members.
I can’t finish this work without their support.
 Thank the free software developer.
Without their work, there is no linux here.
 Thank all people attend the seminar.
