Linux笔记

1. Linux概述
	1.1 介绍
		Linux 是一种类UNIX 计算机操作系统,最早开始于一位名叫林纳斯·托瓦兹(Linus Torvalds)的计算机业余爱好者,当时他是芬兰赫尔辛基大学的学生。他的目的是想设计一个代替Minix(是由一位名叫Andrew Tannebaum的计算机教授编写的一个操作系统示教程序)的操作系统,这个操作系统可用于386、486或奔腾处理器的个人计算机上,并且具有Unix操作系统的全部功能。	
		
		Linux 是一种类似于UNIX 计算机操作系统。它诞生于1991 年的10 月5 日(这是第一次正式向外公布的时间)。以后借助于Internet 网络,并经过全世界各地计算机爱好者的共同努力下,现已成为今天世界上使用最多的一种UNIX 类操作系统,并且使用人数还在迅猛增长。Linux 操作系统的诞生、发展和成长过程始终依赖着以下五个重要支柱:UNIX 操作系统、MINIX 操作系统、GNU 计划、POSIX 标准和Internet 网络。
		
		1999年,IBM宣布与Redhat公司建立伙伴关系,以确保Redhat在IBM机器上正确运行。
		
		1999.3年IBM、Compaq和Novel宣布投资Redhat公司,以前一直对Linux持否定态度的Oracle公司也宣布投资。
		
		2000年初始,SUN公司在Linux的压力下宣布Solaris8降低售价。事实上Linux对SUN造成的冲击远比对Windows来得更大。
		
		2001年IBM决定投入10亿美元扩大Linux系统的运用,此举犹如一计强心剂。令华尔街的投资者们闻风而动。8月红色代码爆发,引得许多站点纷纷从Windows操作系统转向Linux操作系统。

		2002年是Linux企业化的一年。2月。微软公司迫于各州政府的压力,宣布扩大公开代码行动。这可是Linux开源带来的深刻影响的结果。3月,内核开发者宣布新的Linux系统支持64位的计算机。

		2003年1月,NEC宣布将在其手机中使用Linux操作系统,代表着Linux成为进军手机领域。

		2004年6月的统计报告显示在世界500强超级计算机系统中,使用Linux操作系统的已经占到了280席,抢占原本各种Unix的份额。9月HP开始开罗Linux内核代码人员。以影响新版本的内核对HP有利的方式发展,而IBM则准备推出OpenPower服务器,仅运行Linux系统。

		Linux最小只需要4M内存就可以运行。可以嵌入式开发
	1.2 Linux的历史
		1960年
			MIT(Massachusettes Institute of Technology)麻省理工学院研发了30个人同时使用分时操作系统。
			
		1965年
			MIT,ge和bell(贝尔实验室)共同决定研发30人使用的操作系统增加到300个人同时使用,并这个计算称之为multis计算【火星计划】,大概投资500万美元。
		1969年 
			火星计划终于失败

			Ken Thompson(肯汤普森,C语言前身B语言的作者,Unix的发明人之一)开发了server system(文件系统),受到贝尔实验室广泛欢迎。
			Dennis Ritchie(丹尼斯里奇)在文件管理系统的基础上开发了并行了开发了影响世界的操作系统。
		1973年
			其两人开发了UNIX系统并公开了源代码、共享了源代码。
			
			- IBM公司发觉UNIX系统有商机,所以在UNIX内核的基础之上开发并AIX操作系统。
			- SUN公司在UNIX内核的基础之上也开发了Solaris操作系统。
			- HP公司在UNIX内核的基础之上也开发HP UNIX操作系统。	
			- 加州大学 伯克利分校(University of California, Berkeley)开发了BSD操作系统。
			minix(迷你版本的类Unix操作系统,约300MB)
				Linus Torvalds(在芬兰读书,pc 386机上)发现minix的优点
					
				minix这么好,为什么不装在个人机器上呢?
					答:1991开始(很多开发者)minux移动到pc,到了1994年的时候发布了第一个版本并且取名为Linux。			
					1. x:混合
					2. Linux is not unix
					
				
				Linux基础之上:
					- Redhat(红帽子)公司在Linux内核代码基础之上开发了常用的软件以及带图像用户界面的操作系统(二次开发)。
			
					- SUSE(德国开发:流行于欧洲)
					- Redflag(中国开发:流行于中国)
	1.3 特性
		- 免费的
		- 开源的(代码公开)
		- 支持多线程
		- 多用户的
		- 安全性
		- 对内存和文件管理有优越
		缺点:操作相对困难(没有图形用户界面)
	1.4 为什么要学习Linux
		1.性能卓越
			Linux是一个开源、免费的操作系统,其稳定性、安全性、处理多并发已经得到业务的认可,目前很多中型,大型基至是巨型项目都在使用Linux。

			Linux kernal:
				RedHat
				fedora
				RedFlag
				SUSE
				Ubuntu
		2.找工作 
			从目前看,软件公司迫切需要能熟练掌握Linux的程序员。
			主要是以下几个方向:
				- Linux系统管理员
				- Linux程序员(C/C++、Java、PHP)
					Linux软件工程师(PC)
					Linux嵌入式开发(单片机芯片)
	1.5 如何学习Linux
		第一阶段:Linux平台上的开发,包括vi,gcc,gdb,make,jdk,tomcat,mysql...和Linux基本操作
		第二阶段:加厚C语言功能《C专家编程》或是Java语言
		第三阶段:学习Unix环境高级编程《UNIX环境高级编程》
		第四阶段:Linux应用系统开发/Linux嵌入式开发	
		
		成为Linux专家的秘诀:
			思考-实践-再思考-再实践...
	1.6 内核基本功能(Kernel's Basic Functions)
		hardware management
		memory management
		I/O
		VFS(Virtual File System)
		process management
	1.7 version number's format:r.x.y
		r: release version
		x: 偶数:稳定版本,奇数:开发中版本
		y: 错误修补的次数
		eg:2.0.38; 2.2.16
	1.9 安装
		before installation
			了解系统
				是否存在其它系统
				计算机硬件情况
			获取硬件兼容性列表和驱动支持
				http://hardware.redhat.com/hcl/
			获取Red hat Linux
				www.redhat.com
2. 常用命令
	运行指令
		指令名 【选项】【参数】
	
	帮助和在线帮助:
	--help
	例如:mknod --help

	main帮助:
	main mknod
		man -k keyword
		man -f keyword
		man -a keyword
		man n keyword

		man文件所在目录:/usr/share/man		(share:分享,分担;分配)
			- man1(默认:用户指令帮助信息) 例如:man 1 passwd
			- man2 
			- man3 
			- man4
			- man5(指令文件格式)	例如: man 5 passwd
			......
			....
			...
			..
			.		

	info帮助:
	info mknod

	显示可执行文件的完整路径:
	# which ls	(安装alias->$PATH的顺序查找)	
	# echo $PATH

	搜索一个可执行工具及其相关配置、帮助 
	# whereis ls

	slocate:
	# ls -l /usr/bin/locate
	- 所有文件名及其所在路径包含关键字段的文件与目录都会显示
	- slocate先将当前目录结构做成一个数据库,然后再些数据库中搜索匹配记录
	# slocate passwd
	# locate passwd
	# vi /etc/updatedb.conf

	##手动更新数据库
	# updatedb 

	关机:
	poweroff
	halt
	shutdown -h now 
	init 0
		
	重启:	
	reboot
	shutdown -r now 
	init 6

	注销:	
	logout
	
	字符界面切换到图像界面:	
	startx
	
	切换用户:
	su 用户名 然后再输入密码

	切换目录:
	cd 目录名
		cd /home	切换到绝对路径
		cd home		切换到相对路径
		
		cd .. 切换到你目录
		cd ~ 用户主目录
	
	查看文件:
	ls -l
		-a:隐藏文件(a:)
		-l:长列格式(l:long)

	显示当前完整目录:
	pwd
	
	运行级别:
	init [0123456]
		0:关机
		1:单用户
		2:多用户状态没有网络服务
		3:多用户状态有网络服务
		4:系统未使用保留给用户
		5:图形界面
		6:系统重启
	常用运行级别是3和5,要修改默认的运行级别可改文件/etc/inittab的id:5:initdefault:这一行中的数字
	
	建立空文件
	touch 

	复制文件
	cp -r dir1 dir2 递归复制命令(复制子目信息) r:recursion  [ri'kə:ʃən, -ʒən] 
		-r:一般用于复制目录文件
	移动文件或改文件名
	mv 
		
	删除文件和目录
	rm -rf * 删除所有内容(包括目录和文件)
		r:递归
		f:强制  f:force [fɔ:s] 
	
	创建目录文件:
	mkdir 目录名

	删除空目录文件:
	rmdir 目录名

	建立符号连接
	ln 源 目录 (硬链接:不可以跨文件系统、不能使用于目录。删除源文件之后中,硬链接文件依然存在。)
	ln /etc/initab inittab	inittab指向实际文件/etc/inittab
		
	ln 文件名 连接名(硬链接:复制文件,两个文件之间建立链接)
	ln 3.txt 4
	more 4
	
	软链接(Widnows的快捷方法:可以跨文件系统、可用于目录)
	ln -s 3.txt 5

	统计指定文本文件的行数、字数、字符数
	wc

	显示内容
	more 带分页
	less 带分页
	tac
	head 显示文件开关部分内容
	tail 显示文件结尾部分内容	
		tail -f	/var/log/messages	f:即时更新 临时日志文件内容

	df -h 显示磁盘容量
		df -h
	du 计算目录下文件占用磁盘的大小
		du -h /etc/services
	
	设备文件:ls -l /dev/
		-设置在Liux中以特殊文件的形式存在
		-块(block)设备文件:以b开头(硬盘)
		-字符设置:以c开头(键盘、鼠标等)
		
	虚拟控制台及用户身份切换
		-在系统中有12个虚拟控制台,前6个可供用作本地登录
		-用户可以用Alt+Fn(n=1~12)来切换
		-用su可以用来切换用户身份
		
		# vi inittab
			# Run gettys in standard runlevels
	切换到图形界面:Alt+F7	
	
	字符界面切换到图形界面:startx
		startx命令在字符界面下启动了图形环境,那么可以使用组合键Ctrl+Alt+F1~F6切换字符虚拟终端,使用组合键"Ctrl+Alt+F7切换到图形界面
	
	环境:env
	切换用户:
		su - 用户名 (环境变量也切换)
	
	查看文件类型:
	file test.php

	stat:检查文件的block与inode状况
	ext2和ext3文件系统中,文件以inod+block的方式存在。用rm指令删除文件中的inode记录。文件无法被找回。
	
	文件名最大字符数是255个字符

	grep	在指定的文本文件中查找指定的字符串
	gred asdf 4

	搜索文件及目录
	find
		在Linux中,因为文件系统是以级别式的结构来组成的。所以要在整个系统中找到特定的文件和目录并不是件容易的事。

		find /home -amin -10	#十分钟内存取的文件或目录   a:access
		find /home -atime -10	#十小时内存取的文件或目录
		find /home -cmin -10	#十分钟内更改过的的文件或目录 c:change
		find /home -ctime +10	#十小时前更改过的文件或目录 
		find /home -size +10k	#文件大小搜索大于10k文件 
	
	管道命令
	find / -name *.html | grep bookmar 在find结果中查找字符串"bookmar",显示包含这个字符串的文件。

	命令文件路径
	whereis ls
	
	重定向命令
	ls -l > a.txt 列表的内容写入文件a.txt(覆盖写)
	ls -l >> a.txt 列表的内容追加到文件aa.txt
	从文件中输入信息 database_program < database_data

	shell使用
		命令历史和互动:上下箭头
		命令完成功能:tab键
		shell脚本文件:
			是一个文本文件
			命令的集合
			有执行的权限
			执行方法(./文件名)
		例如:每天凌晨2:00将mysql数据某个数据库备份到/home
			#vi my.sh
				date 
			./my.sh
			Permission denied #没有执行权限
			chmod 744 my.sh
			./my.sh

			vi my2.sh
				/home/mysql/bin/mysqldump -u root -p 密码 > /home/test_db.bak
			ls -l 
			chmod 744 my2.sh
			ls -l
			crontab -e	e:edit 
				0 2 * * * /root/my2.sh
		用户登录后自动执行的shell脚本文件:
			.bashrc 位于主目录下

			它之前执行系统的脚本/etc/bashrc主要是基本配置数据.bash_profile位于主目录下
			它之前执行系统的脚本/etc/profile 主要是配置环境变量
		
		/
		|-etc
		 |-profile(配置系统环境变量:jdk,tomcat...)
		 |-.bashrc(配置系统启动时执行的程序) 
		|-home
		 |-user1
		  |-.bash_profile(用户的环境变量)
		  |-.bashrc
		 |-user2
		  |-.bashrc
		 |-........
		 |-usern
		  |-.bashrc
		 
		# 配置.bashrc文件可以指定某些程序在用户登录的时候就自动启动
		vi /root/.bashrc
			# mv jakarta-tomcat=sdfd  tomcat
			# vi /root/.bashrc
				/home/tomcat/bin/startup.sh start
			
			# logout
			# login
			# netstat -an | less
		
		执行shell: ./文件名.sh

		临时加入一个路径时,使用export
			# export PATH=$PATH:/root
			# env | less
			# my2.sh

		用export PATH=$PATH

		SHELL:默认shell
		PATH:路径
		USER:当前登录用户的用户名

		显示变量内容:
			echo
			echo $PATH
			echo $USER
			echo $SHELL	# 当前用户所使用shell
	
		通配符:
			* 代表多个字母或数字
			? 代表一个字母或数字
			ls a* ls a? ls ?at?
			ls f080[1-6].tif

		转义字符:\
			ls /mnt/win/my\ Documents
		引号:
			export NAME=Michael
			echo Welcome $NAME, the date is date 
			
			单引号-shell不处理任何变量和命令
			echo 'Welcome $NAME,the date is date' 
			
			双引号一处理变量但不处理命令
			echo "Welcome $NAME, the date is date"

			反引号-把引号中的每个单词作为一个命令,如果是变量则先求值然后作为一个命令处理
			echo "Welcome $NAME, the date is `date`"

		别名:
			alias显示系统当前定义的所有alias
			
			mysqldump -u root -p 密码 > /home/yy.bak

			alias cp='cp -i'
			alias ll='ls -l --color=tty'
			alias llh='ls -l /home'	
		压缩和解压
			zip与unzip
				1. zip命令的基本使用方法:
					zip file.zip *    zip后接压缩后的文件名,在它的后面输入要压缩的文件即可。
				2. 压缩后,自动删除原文件
					zip -m file.zip to.txt 把to.txt文件压缩成file.zip文件,to.txt会自动删除。
				3. 将子目录一起压缩
					zip -r file.zip * 将当前目录下的子目录一起压缩
				4. 忽略子目录的内容
					zip -j file.zip * 
				5. 将已压缩的或没有必要压缩的文件去年。
					zip -n .mpg: .jpg: .gif: 第一种文件中间要有":"分开

				6. 压缩某一日之后的文件
					zip -t 102002 file.zip 意思是指将当前目录下在2002年10月20日之后文件压缩
				7.不压缩链接文件的压缩
					zip -y file.zip *
				8.压缩率问题。-1~-9: -9压缩率最高
					zip -9 file.zip * 
				9.将不需要压缩的文件排除在外
					zip file.zip * -x file2.txt #在压缩时,将当前目录内的file2.txt文件排除在外。
				
				

				zip aa.zip 文件名
				zip aa.zip 文件名 文件名2 文件名n
				zip -r aa.zip 目录路径

				zip aa.zip kkk.bak
				zip bb.zip kkk.bak mydata2 mydate3
				zip -r cc.zip ./workspace/

				解压:
				unzip 压缩文件名
				1.直接解压缩文件
					unzip file.zip
				2.排除不需要解压缩的文件
					unzip file.zip -x file 除了file2文件外,其他的文件都解压
				3.查看压缩包的内容
					unzip -Z file.zip 查看file.zip压缩包的内容。也可以使用"-l"、"-v"来看压缩包的内容。
			gzip和gunzip(.gz)
				1.解压命令
					gzip -d file.gz
					gunzip file.gz
				视频格式越高清,压缩率更高。		 
	信息显示命令:
		date	显示和设置日期时间
		stat	显示指定文件的相关信息
		who/w	显示在线登录用户
		whoami	显示用户自己的身份
		id	显示当前用户的id信息
		hostname显示主机名称
		uname	显示操作系统信息
		dmesg	显示系统启动信息
		du	显示指定的文件(目录)已使用的磁盘空间的总量
		df	显示文件系统磁盘空间的使用情况
		free	显示当前内存和交换空间的使用情况 
		fdisk -l显示磁盘信息
		locale	显示当前语言环境
	ls -Rl /etc | more
	cat /etc/passwd | wc
	cat /etc/passwd | grep lrj
	# dmesg | grep etho # 网卡启动信息
	man bash | col -b > bash.txt   #col过滤控制字符
	ls -l | grep "^b"
	ls -l * | grep "^-" | wc -l

	命令替换wall:warning all
	# wall date # 通知所有登录的用户
	# wall `date`

	重写向
		标准输入、输出
		Stdin
		Stdout
		Stderr

		输出重写向
		>, >>
		
		ls -l > cmd.txt
		ls 
		more cmd.txt

		错误输出重写向
		2> , &>
		
		lssss 2> cmd.txt
		lssss &> cmd.txt


		输入重写向
		<, Linux Kenel
		cp,mkdir<-Shell<-Linux Kenel

	设置密码
	passwd  Ronaldo
	passwd  Beckham	
	passwd  Jordon	
	passwd  YaoMing
6. 文件权限
	
	-rw-r--r-- 1 ronaldo football 11 Dec 9 09:32 Hello.java
	
	1:		普通文件的时候显示1,如果是目录的话显示目录下的子文件数ce
	1213:		文件大小[字节]
	Feb 2 08:39	最后修改内容日期
	-|rw-|r--|r--|
	第一个部分代表文件类型
		-:普通文件
		d:目录
		l:连接文件
		b:块设备文件
		c:字符设备文件
		p:人工管道

	权限分为用种:
		r:可读(4) read  
			可以读取一个文件里边的内容
		w:可写(2) write
			可以向一个文件里边写内容,也可以删除该文件
		x:可执行(1) excute
			可以读取一个文件的内容,若是脚本,可以运行
			执行主要是指命令或脚本是否可以执行;对于目录,如果没有执行权限,则非宿主用户不能访问该目录
			
			一个本来可以执行的文件。如果你不给他运行权限,哪么这个脚本就只能用来打开看看内容,而不能去执行它

	第二个部分代表文件的所有者对该文件的权限own	u	
	第三个部分代表文件所在组对该文件的权限grp		g
	第四个部分代表文件的其他组用户对该文件的权限other	o	

	修改文件权限
	chmod 改变文件权限	
		..home]# chmod 777 Ronaldo
		..home]# ls -l  
		..home]# chmod 777 Backham
		..home]# ls -l  
		..home]# who am i
		..home]# chmod 770 Ronaldo

		chmod -R 777 * 当前目录下所有文件及文件夹极其子目录及子文件,权限改为777
		chmod 755 Backham
		chmod u=rwx,g=rx,o=rx Backham
		chmod u-x,g+w Backham
		chmod a+r:所有用户添加读的权限
	改变组
		usermod -g 组名 用户名
		usermod -g 目录名 用户名 改变该用户登入的初始目录
		cat /etc/passwd	
		ls -ahl 命令可以看到文件的所有者
	修改文件所有者
	chown 用户名 文件名
	chown files Backham
	chgrp root files
	chown -R root files:改变files这个目录及其下面所有的文件和目录的所有者是root。
	
	chmod -x 4
	chmod u+x 4
	chmod u=wrx 4
	chmod 755 4

	强制位与冒险位
		- 除了读写执行权限以外,ext2文件系统还支持强制位(setuid和setgid)与冒险位(sticky)的特别权限
		- 针对u,g,o,分别有set uid,set gid,及sticky。
		- 强制位与冒险位添加在执行权限的位置上。如果该位置上原已有执行权限。则强制位与冒险位以小写字母的方式表示,否则,以大写字母表示。
		- set uid与set gid在u和g的x位置上各采用一个s,sticky使用一个t。

	set gid对目录的作用
		- 默认情况下,用户建立的文件属于用户当前所在的组。
		- 目录上设置了setgid,表示在此目录中,任何人建立的文件,都会属于目录所属的组。
		# cd /home/test
		# touch test2.php
		# id root
		# mkdir demo
		# chgrp skydao demo
		# cd demo
		# vi test.php
		# ls -l
		# chmod g+s demo (设置set uid)
		# cd demo
		# touch test.php
		# ls -l
				
		# chmod 754 demo
		# chmod g+s demo (设置set uid)
		# cd demo
		# touch test.php
		# ls -l

	冒险位对目录作用
		- 默认情况下,如果一个目录上有w和x权限,则任何人可以在些目录中建立与删除文件。
		- 一旦目录上设置了冒险位,则表示在此目录中,只有文件的拥有者、目录的拥有者与系统管理员可以删除文件。

		# chmod o-t /tmp/xxxx
		# chmod o+t /tmp/xxxx (设置冒险位)
		
	强制位对文件的作用
		- 在可执行文件上,用户可以添加set uid和set gid
		- 默认情况下,用户执行一个指令,会以该用户的身份来运行进程
		- 指令文件上的强制位,可以让用户执行的指令,以指令文件的拥有者或所属组的身份运行进程

	设置强制位与冒险位
		- 可以用chmod指令来为文件设置强制位与冒险位
			 set uid: chmod u+s 文件名
			 set gid: chmod g+s 文件名
			 sticky: chmod o+t 文件名
		- 强制位与冒险位也可以通过一个数字加和,放在读写执行的三位数字前来指导。
			4(set uid)
			2(set gid)
			1(sticky)

	# which ping
	# ls -l /bin/ping
	# ping 127.0.0.1

	# chmod u-s /bin/ping	(去年set uid)
	# ls -l /bin/ping
	
	# which passwd
	# ls -l /usr/bin/passwd
	# chomd u+s /usr/bing/passwd
	# ls -l /usr/bin/passwd
	
	# 强制位
	# chmod g+s test1
	# ls -ld test1
	# chmod g-s test1

	# 冒险位
	# chmod o+t test1
	# ls -ld test1
	# chmod o-t test1

	# 给文件设置uid
	# chmod u+s test.txt
	# ls -ld test.txt
	# chmod u-s test.txt

	# chmod 4777 test.txt (set uid:4)
	# chmod 2777 test.txt (set gid:2)
	# chmod 1777 test.txt (sticky:1)
	# chmod 6777 test.txt (set uid和set gid)
	
	# chmod 0777 test.txt (取消 set uid set gid sticky)

	注意:
		- 只有文件里设定set uid、set gid
		- 目录里设定 set gid、sticky

	umask
		- 每个用户建立文件时,此文件都有默认权限
		- 默认权限的的值由环境中的umask值来确定
		- 用户可以自主改动umask值,并在改动后建立的文件上得到体现
		- 一般用户的默认umask值为002,系统用户的默认umask值为022

		# umask
		# umask -S
		
		如果系统文件没有umask的时候的权限是rw-rw-rw-权限
		如果系统目录没有umask的时候的权限是rwxrwxrwx权限
		0022
		第一0:冒险位或强制位
		022:权限值
			root用户:
				普通文件: rw-rw-rw-
				去掉022:  rw-r--r--
				
				目录文件: rwxrwxrwx
				去掉022:  rwxr-xr-x
			普通用户:
				普通文件: rw-rw-rw-
				去掉002:  rw-rw-r--
				
				目录文件: rwxrwxrwx
				去掉002:  rwxrwxr-x				
		修改umask值
			umask 033		
7. Linux分区
	硬盘的分区主要:
		主分区(Primary Partion)
		扩展分区(Extension Partion)
			- 逻辑分区(Logical Partion)
	一块硬盘上主分区和扩展分区的数目之和不能大于四个;
	主分区可以马上被使用但不能再分区;
	扩展分区必须再进行分区后才能使用;
	扩展分区再分下去的是是逻辑分区;
	逻辑分区没有数量上限制。

	分区:
		1. 主分区
		2. 扩展分区
			2.1 逻辑分区1	
			2.2 逻辑分区2	
			2.3 逻辑分区3	
			2.4 逻辑分区4
			.............
			2.n 逻辑分区n
	
	对Windows的用户来说,有几个分区就有几个驱动器,并且每个分区都会获得一个字母标识符,然后就可以选用这个字母来指定在这个分区上的文件和目录,它们的文件结构就是独立的,非常好理解。Linux无论有几个分区,它归根结义就只有一个根目录,一个独立目录唯一的文件结构。每个分区都是用来组成整个文件系统的一部分,因为它采用了一种叫“载入”的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得	

	Linux分区的命名 /dev/xxyN
		/dev/
			这个字串是所有设备文件所在的目录名。因为分区在硬盘上,而硬盘是设备,所以这些文件代表了在/dev/上所有可能的分区。
		xx
			分区名的前个字母标明分区所在设备的类型。通常是hd(IDE磁盘)阿克sd(SCSI磁盘)。
		y
			这个字母标明分区所在的设备。例如,/dev/hda(第一个IDEas磁盘)或/dev/sdb(第二SCSI磁盘)
		x
			最后的数字代表分区。前四个分区(主分区或扩展分区)是用数字从1排列到4.逻辑分区从5开始。例如,/dev/hda3是在第一个IDE硬盘上的第三个主分区或扩展分区;/dev/sdb6是第二个SCSI硬盘上的第二个逻辑分区。
	cd /mnt
	mkdir cdr
	mount /dev/cdrom /mnt/cdr
	cd /mnt
	umount /mnt/cdr
	
	磁盘的物理结构
		- 硬盘有数个盘片,每盘片两个面,每个面一个磁头
		- 盘片被划分为多个扇形区域即扇区
		- 同一盘片不同半径的同心圆为磁道
		- 不同盘片相同半径构成的圆柱面即柱面
		- 公式:
			存储容量 = 磁头数X磁道(柱面)数X每道扇区数X每扇区字节数
		- 信息记录可表示为:
			XX磁道(柱面),XX磁头,XX扇区
	
	MBR(Master Boot Record)
		-MBR位于硬盘第一个物理扇区(绝对扇区)柱面0,磁头0,扇区1处。
		-MBR中包含硬盘的主引导程序和硬盘分区表。
	
	/
	  mnt
	  boot
	
	分区命令:
		mount [-参数] [设备名称] [挂载点]	挂载命令
		特别说明:在挂载光驱时,可直接使用 mount /mnt/cdrom
		
		umount [设备名称] 卸载命令
		
		df -l 查看磁盘使用情况
		df -h
		find -size +1000000k

		fdisk -l	查看系统分区具体情况
		
		Device		Boot	Start	End	Blocks		Id	System
		/dev/sda	*	1	13	104391		83	Linux
		/dev/sda2		14	490	3831502+	83	Linux
		/dev/sda3		491	522	257040		82	Linux swap

		sd:代表挂载的是SCSI(适用于服务器,价格高)
			a:第一块硬盘
				sda1:第一块硬盘的第一个主分区或扩展分区
				sda2:第一块硬盘的第二个主分区或扩展分区
				sda3:第一块硬盘的第三个主分区或逻辑分区
			b:第二块硬盘
		hdx~:IDE硬盘
			“x"为盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘)
			"~"代表分区,前四个分区用数字1到4表示,它们是主分区或扩展分区,从5开始就是逻辑分区。全,hda3表示为第一个IDEas硬盘上的第三个主分区或扩展分区,hdb2表示为第二个IDE硬盘的第二个主分区或扩展分区。对于SCSI硬盘则标识为'sdx~',SCSI硬盘是用'sd'来表示分区所在设备的类型的,其余则和IDE硬盘的表示方法一样。
		
		# df [目录全路径]	查看某个目录是在哪个分区
		# cd /
		# umount /boot/
		# cd /boot/
		# ls -l
		# mount /boot/
		# mkdir /test
		# mount /dev/sda1 /test
		# cd /test/
		# umount /test
	
	/boot	分区		100m
	swap	交换分区	物理内存的2倍,但不大于512m.Windows中有PAGEFILE.SYS的文件相当于交换分区
	/	根分区		尽可能大

	CentOS分区方案:
		/boot: 用来存放Linux系统启动有关的程序,比如启动引导装载程序等,建议大小为100MB
		/usr: 用来存放Linux系统中的应用程序,其相关数据较多,建议大于3GB以上
		/var: 用来存放Linux系统中经常变化的数据以及日志文件,建议大于1GB以上
		/home: 存储普通用户的数据,是普通用户的宿主目录,建议大小为剩下的空间
		/: Linux系统的根目录,所有的目录都挂在这个目录下面,建议大小为5GB
		/tmp: 将临时盘独立的分区,可避免在文件系统被塞满时影响到系统的稳定性。建议大小为500MB上
		swap: 实现虚拟内存,建议大小是物理内存的1~2倍
8. JDK、eclipse、tomcat安装配置
	1. 安装JDK
		1) soft.iso挂载到Linux操作系统上
		   在VMware做好配置
		   mount /mnt/cdrom
		2) 把安装文件拷贝到 /home
		   cp 文件 /home
		   cp jsdk-......     /home/
		   cd /home
		3) 安装
			./jdk......bin
	2. 配置JDK
		1) /etc/profile 环境配置文件 
			JAVA_HOME=/home/j2sdk1.4.2_07
			PATH=$PATH:/home/j2sdk1.4.2_07/bin
			CLASSPATH=.:/usr/java/j2sdk1.4.2_07/jre/lib/rt.jar
			CATALINA_HOME=/usr/local/jakarta-tomcat-5.0.30
			export JAVA_HOME PATH CLASSPATH CATALINA_HOME
		2) logout
		3) login
		4) javac
		5) java
	3. 安装eclipse
		1) 把安装文件拷贝到/home目录下(eclipse-SDK-3.1.1-linux-motif.tar.gz)
		2) cp 文件 /home
		3) tar -zxvf ???.tar.gz
		4) 启动eclipse时进入图形界面 
			# startx
			# cd /home/eclipse
			# ./eclipse
			logout button
	4. 安装Myeclipse
		cp EnterpriseWorkenchInstaller_4.0.3GA_e3.1.bin /home/
		6) cd Entery.....
		7) ./Entery........................bin
		8) 打开eclipse
	5. 安装tomcat(jboss weblogic websphere resin...)
		# cp jakarta-tomcat-5.5.9.tar.gz /home/
		# tar -zxvf jakarta-tomcat-....
		# cd jarkarta-...
		
		# ./startup.sh
		# JAVA_HOME=/usr/java/jdk
		# export JAVA_HOME
		# ./startup.sh
		
		# 验证是否启动
		ps -ef | grep tom*
		chkconfig iptables off

		# 命令行下上网
		wget http://localhost:8080/


	6. 测试jsp文件
		# cd /home/eclipse/
		# ./eclipse &			& 地址符
			后台程序:&没有的话eclipse使用的时候,当前终端程序不能使用。
		1. Windows->Preferences->MyEclipse
			1.1 Tomcat 5->Browse...
				/home/*
			1.2 Tomcat 5->JDK->add->Brose...
				/home/j2sdk....
				JRE name: aaa
				OK
				Apply
		2. Project Deployments
			add->
			Server: Tomcat
			Finish
			OK
		3. Tomcat 5->Start
		4. http://localhost:8080/test/hello.jsp			
		
9. shell
	书籍:《Linux命令、编辑器和shell编程》
	shell分类:
		shell名称	开发者		命令名称	应用地区
		Bourne		S.R. Bourne	/bin/sh		中国
		C		Bill Joy	/bin/csh	
		Kom		David		/bin/ksh	欧洲
	
	#查看所有的shell
	ls -l /bin/*sh

	#查看目录使用的是哪种shell
	env | more	[显示当前操作系统的环境变量]
	
	# 修改当前操作系统的shell
	chsh -s 输入新的shell名
	chsh -s /bin/csh
	logout
	mk [tab]	不能使用自动捕获功能
	env | more
	
	# 查看命令
	man mkdir
	
	# 查看命令
	as [tab]

	# 查阅历史记录命令
	history		显示所有使用过的命令
	history 5	显示最近使用的5个命令
	!5		执行历史编号为5的命令
	!ls		执行最后一次以'ls'开头的命令
10. tcp、ip基础
	计算机网络世界使用tcp/ip协议
	美苏冷战时期,美国国防部向一个研究部门下达一个命令:开发一个两台计算机可以通讯的网络。1969年的时候,研发出来了网络,阿帕网。也就是因特网的前身。连网的机器有100多台,主要应用于军事。那时很多民间机构研发网络。
	
	1972年华盛顿开会,很多专家学者参加了。他们的目的是希望制定一个通用协议。
	
	1974年由国防部推出tcp/ip的通讯协议并共享出来。
	
	后来很机构使用此协议,后来就出现了internet。

	1989年,中科院转发一个电子邮件。
	1997年开始发展因特网。

	tcp/ip协议是一组协议。(tcp,ip,udp,arp,rarp等协议)
	tcp:网络传输协议
	ip:internet协议

	TCP/IP模型

	应用层(application)	smtp,ftp,telnet
	表示层(presention)	
	会话层(session)	
	传输层(transport)	解释数据
	网络层(ip)		定位ip地址和确定连接路径
	数据链路层(link)	与硬件驱动对话
	物理层(physical)	

	Osi模型(理论)		Tcp/ip模型(现实)

	书籍:TCP/IP详解:郑1:协议
	书籍:TCP/IP详解:郑2:实现
	书籍:TCP/IP详解:郑3:TCP事务协议 HTPP NNTP和UNIX域协议

			QQ间互相通讯的案例

			QQ1				QQ2
	
			你好?				你好					
	|应用层|------->app 你好?			去掉应用层
	|传输层|------->tcp app 你好			去掉传输层
	|IP层  |------->ip tcp app 你好(数据包) (黑客)	去掉IP层	
	|链路层|------->针头 ip tcp app 你好 针尾	去掉链路层			
			 |				   |		
			网卡				   ^	
		         |				   |	
		     路由器 -> 路径由器->.............->到QQ2网卡
				(黑客)	
	ip地址与包的路由传递
		每个internet上的主机和路由器都有一个ip地址,它包括网络号和主机号,所有ip地址都是32位的,ip地址按照国际标准的划分为a,b,c,d,e五种类型。

		电脑1------>网关1--网关2->.....网关n->Internet网联系
		a:0 7位网络号	主机号		1.0.0.0至127.225.225.255
		b: 10 14位网络号 主机号		128.0.0.0至191.255.255.255
		c: 110 21位网络号 主机号		192.0.0.0至223.225.255.255
		d: 1110  多点播送地址		224.0.0.0至239.255.255.255
		e: 11110 留作将来使用		240.0.0.0至247.255.255.255
		----------------------------------------------------------.
					共32位
		# 查看ip
		ipconfig(windows)
		ifconfig(Linux/Unix)

		# 测试两个ip是否畅通
		ping www.baidu.com  

		# 追踪路由
		tracert www.baidu.com [目标ip/域名]

		局域网广播:111111111111111111111111
		netsend "不要玩cs" 192.168.255.255

	网络环境配置1
		1) 用root身份登入,运行setup命令进入到text mode setup utility 对网络进行配置。这里可以进行ip,子网掩码,默认网关。dns的设置。
			# setup 
				192.168.44.22 tab键
			# ifconfig
			
		2) 这时网卡的配置没有生效。运行/etc/rc.d/init.d/network restart命令我们刚才作的设置才有效。
			# /etc/rc.d/init.d/network restart
			# ifconfig
	网络环境配置2
		1) ifconfig eth0 x.x.x.x 对网卡进行设置
		2) ifconfig eth0 network x.x.x.x 对子网掩码设置
			对广播地址和dns使用默认的。
			这样配置网络将会立即生效。但临时生效

			# ifconfig eth0 192.168.88.88
			# ifconfig
	网络环境配置3
		1)修改/etc/sysconfig/network-scripts/ifcfg-eth0这个文件里各个属性可以修改。包括ip,子网掩码。广播地址,默认网关。
		2)这时网卡的配置没有生效。运行/etc/rc.d/init.d/network restart命令我们刚才作的设置才生效。
			这种就去是最底层的修改方法
		# vi /etc/systemconfig/network-scripts/ifcfg-eth0
			ONBOOT:yes 系统启动的时个是否马上启动
			BOOTPROTO=static 使用动态还是静态
				dhcp:网卡启动的时候系统自动分配
	总结:在Linux中,所有的设置都是文件。

	Windows系统里有linux系统。两个OS之间参数网卡参生互通

	Windows:
		ipconfig
		192.168.222与Linux两个段必须一样
	Linux: # ifconfig eth0 192.168.222.88
		虚拟机:VMnat(8)
	Windows: ping 192.168.222.88
		连接成功		
11. rpm管理
	apache-1.3.23-11.i386.rpm
	"apache" 软件名称
	"1.3.23-11"软件的版本号、主版本号和次版本
	"i386"是软件所运行的硬件平台
	"rpm"文件扩展名、代表RPM包
	
	#查询哪些RPM软件
	rpm -qa | more		q:query a:all
	rpm -q mysql	查询mysql

	#安装RPM包
		rpm -i RPM包全路径名称:安装包到当前系统
		rpm -ivh RPM包全路径名称:安装包到当前系统有提示信息
			i=install	安装
			v=verbose	提示	
			h=hash		进度条
	#删除RMP包
		rpm -e RPM包的名称
		rpm -d jdk
		如果其它软件包依赖于您要卸载的软件包,卸载时则会产生错误信息。
		$ rpm -e foo
		removing these packages would break dependencises:foo is needed by bar-1.0-1
		若让RPM忽略这个错误继续卸载请使用--nodeps命令行选项。

	#升级RPM包
		rpm -U RPM包全路径名
		rpm -U cvs-1.11.2-10.i386.rpm
12. samba服务器安装及配置
	samba安装步骤:	
		1)检查不否安装了samba
			rpm -q samba
		2)如果有,则卸载
			rpm -e samba
			rpm -d --nodeps samba
			rpm -q samba
			rpm -q sam*
		3) 安装samba
			把安装文件挂载到Linux下
			mount /mnt/cdrom
			cd /mnt/cdrom
			cp sam* /home/
			#先装comm
			rpm -ivh samba comm...
			rpm -ivh samba client...
			rpm -ivh samba signa...
			rpm -q samba
		4) 创建用户并设置密码
			# useradd youyou
			# passwd youyou
		5) 给youyou设置samba密码
			# cat /etc/passwd | mksmbpasswd.sh -> /etc/samba/smbpasswd
		6) 设置密码
			# smbpasswd youyou 
		7) 启动samba服务器
			service smb start	启动
			service smb stop	停止 
			service smb restart	重启
		8) 运行
			\\192.198.222.88
		9) 配置samba
			comment : 针对共享资源的文字。
				comment = dir for todayhere;
			path: 若共享的资源是目录,是指定该目录的位置
				path = /tmp 共享tmp这个目录 
			guest ok :  是否允许用户不使用帐号和密码访问此资源
				guest ok = yes
				guest ok = no
			hosts allow: 设置连接主机的地址
				hosts allow = 192.168.0. server.abc.com: 允许来自192.168.0.或server.abc.com
			hosts deny: 设置禁止连接的主机地址 
				hosts deny = 192.168.2.  不允许来自192.168.2主机访问此samba服务器的资源。
			read only: 用于设置共享的资源是否为只读
				read only = yes 允许只读
				read only = no 不仅仅只读,也就是说可以写入。
			writable: 设置是否允许写入
				writable = yes 允许写入
				writable = no 不允许写入
			browseable  设置用户是否可看到此共享资源
				browseable = yes 允许用户看到此资源
				browseable = no 不允许用记看互此资源
			available 设置是否启用资源共享
				available = yes 启用资源共享
				available = no 不启用资源共享
13. crontab详解
	任务调度:是指系统在某个时间执行的特定的命令或程序。
	任务调度分类:
		1.系统工作:有些重要的工作必须周而复始

	任务调度文件:/etc/crontab
	调度文件的规则:
		字段名称	说明						范围
		分种		每小时中的第几分钟执行		0-59
		小时		每日的第几个小时执行		0-23
		日期		每月的第几天执行			1-31
		月历		每年的第几月执行			1-12
		日期		每周的第几天执行			0-6(0:星期日~星期六)
		命令名称	欲执行的命令名称及其参数

	  -e [UserName]: 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)
	  -r [UserName]: 删除目前的时程表
	  -l [UserName]: 列出目前的时程表
	  -v [UserName]:列出用户cron作业的状态 


	
	任务调度的使用crontab
		1. 设置任务
			crontab -e
		2. 每隔一定时间执行 date > /home/mydate1(系统时间覆盖写入到mydate1文件中)
			# date > /home/mydate1	

			每天凌晨2:00去执行 date >> /home/mydate2(追加到mydate2文件中)

			# crontab -e
			0 2 * * * date >> /home/mydate2
			Esc
			:wq
			-------------------------------------------------
			每隔一分钟执行
			* * * * * date >> /home/mydate2
			3. 怎样去高度多个任务?
			1) 在crontab -e 中直接写。
				* * * * * date >> /home/mydate2
				* * * * * cp /home/mydate2 /root
			2) 所有任务写入到一个可执行文件(shell编程)
				# vi mytask.sh
					date >> /home/mydate3
					cp /home/mydate3 /root
				# :wq
				# chmod 744 mytask.sh
				# ls -l
				# crontab -e
					* * * * * /root/mytask.sh
	终止任务调度:	# crontab -r 
			# crontab -e
	列出任务高度:crontab -l 列出当前有哪些任务调度
	
		第1列分钟1~59
		第2列小时1~23(0表示子夜)
		第3列日1~31
		第4列月1~12
		第5列星期0~6(0表示星期天)
		第6列要运行的命令
		
		下面是crontab的格式:
		分 时 日 月 星期 要运行的命令
		
		30 21 * * * /usr/local/apache/bin/apachectl restart		#上面的例子表示每晚的21:30重启apache。
		
		45 4 1,10,22 * * /usr/local/apache/bin/apachectl restart 	#上面的例子表示每月1、10、22日的4 : 45重启apache。
		
		10 1 * * 6,0 /usr/local/apache/bin/apachectl restart 		#上面的例子表示每周六、周日的1 : 10重启apache。
		
		0,30 18-23 * * * /usr/local/apache/bin/apachectl restart  	#上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。
		
		0 23 * * 6 /usr/local/apache/bin/apachectl restart 		#上面的例子表示每星期六的11 : 00 pm重启apache。
		
		* */1 * * * /usr/local/apache/bin/apachectl restart 		#每一小时重启apache
		
		* 23-7/1 * * * /usr/local/apache/bin/apachectl restart 	#晚上11点到早上7点之间,每隔一小时重启apache
		
		0 11 4 * mon-wed /usr/local/apache/bin/apachectl restart 	#每月的4号与每周一到周三的11点重启apache
		
		0 4 1 jan * /usr/local/apache/bin/apachectl restart 		#一月一号的4点重启apache	

		0 * * * * /bin/ls
 	 	 	 	 	 	 	 		#每月每天每小时的第0分钟执行一次 /bin/ls 	

		*/20 6-11 * 12 * /usr/bin/backup						#在 12 月内, 每天的早上 6 点到 12 点中,每隔 20 分钟执行一次 /usr/bin/backup

		0 17 * * 1-5 mail -s "hi" [email protected] < /tmp/maildata 	#周一到周五每天下午 5:00 寄一封信给 [email protected]

		20 0-23/2 * * * echo "haha"							#每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo "haha"

		0 23-7/2,8 * * * date								#晚上11点到早上8点之间每两个小时,早上8点

		0,20,40 * * * * 而不能采用*/n方式,否则出现语法错误 		#在hp unix,中,每20分钟执行一次,表示为:
	
14. 进程的概念和管理
	进程:正在执行的程序
	线程:轻量级的进程。

	进程有独立地址空间(内存分配有可能不是连续的)
	线程不能独立存在,它是由进程创建。(fork)Thread
	相对讲,线程耗费的CPU和内存小于进程。


	1) 在Linux中,每个执行的程序都称为一个进程。每一个进程都分配一个ID号。
	2) 每一个进程,都会对应一个父进程。而这个父进程可以复制多个子进程,例如www服务器。
	3) 每个进程都可能以两种方式存在的。前台与后台,所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操作。但由于屏幕上无法看到的进程,经常使用后台方式执行。
	4) 一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中,直到关机才结束。
		
	ps命令是用来查看目前系统中,有哪些正在执行,以及它们执行的状况。
	显示详细的进程信息:
		1. ps -a 意思是说显示当前终端的所有进程信息
		2. 以用户的格式显示进程信息
			ps -u 
		3. 显示后台进程运行参数
			ps -x 	
		pa -aux [看到的全面,信息也全面]
		
		字段	说明
		PID	进程识别号	
		TTY	终端机号
		TIME	此进程所耗的cup时间
		CMD	正在执行的命令或进程名

	终止进程:
		若是某个进程执行一半需要停止时,或是已消了很大的系统资源时,此时可以考虑停止该进程。使用kill命令来完成此项任务。
		终止某个进程:kill 进程号
		kill 16251 :终止进程号为16251的进程
		kill -9 16251: 因为有些进程会捕捉某些信息,如果直接不能结束可以用"-9"传递信息。
	动态监控进程top
		top与ps命令很相似。它们都是用来显示正在执行的进程。top与ps最大的不同之处,在于top在执行一段时间可以更新正在运行的进程。
		
		1. 监视特定用户
			top: 输入些命令,按回车键,查看执行的进程。
			u:然后输入"u"回车,再输入用户名,即可。
		2. 终止指定的进程
			top:输入些命令,按回车键,查看执行的进程。
			k:然后输入"k"回车,再输入要结束的进程id号.
		3. 指定系统状态更新的时间:
			top -d 10:  指定系统更新进程的时间为10秒。

		# top 
			14:06:22	=>当前操作系统时间	
			up 4 min,	=>系统启动了多久
			1 user,		=>当前有多少个用户登录到系统
			load average: 0.02, 0.12, 0.07 =>当前系统的负载情况
				(0.02+0.12+0.7)/3大于0.6的时候每户已经很紧张了
			37 processes	=>进程数
			36 sleeping	=>休眠状态
			1 running	=>正在运行
			0 zombie,	=>僵尸进程数(已经终止了进程,而cpu,内存仍然占用空间)
			0 stopped	=>停止状态
			
			CPU states: 0.0% user 0.1% system 0.0% nice H.0% inwait 99.8% idle
			99.8% idle:99.8%的CPU正在闲着状态(越大越好)
			
			Mem: 255264k av, 29428k userd, 215836k free, 0k shrd, 5528k buff
			物理内存使用

			Swap: 257032k av, 0k used, 257032k free 19376k cached
			虚拟内存
		
			# top -d 10
			Ctrl+c退出
			
	设置系统时间
		1. date命令:显示系统时间
			# date
		2. 利用date命令来更改系统的时间
			date MMDDHHMMCCYY.SS::月月日日时时分分年年年年.秒秒
		3. 查看月历
			cal 3 2002:查看2002年3月的月历
		4. 查看年历
			cal 2008:查看2008年年历
		# cal 2008 > test
	监控网络状态信息
		显示网络统计信息的命令netstart
			些命令用来显示整个系统目前的网络情况。例如目前的连接、数据包传弟数据、或是路由表内容。
			
			# netstat -an | less
			# netstat -anp | less	
			# kill -9 1840
		检测主机连接命令pint:
			是一种网络检测工具,它主要是用检测远程主机是否正常,或是两部主机间的介质是否为断、网线是否脱落或网卡故障。
			# ping 对方ip地址

				
		显示数据包经过历程命令:traceroute
			此命令可以直接输入使用,用来检测数据包在网络上传输的过程。从本机到远程的主机完整路径。帮助力管事员解决问题
			
				# traceroute www.sohu.com
			route
			所谓路由是指将数据由来源网络送往目的地网络的操作。在大型网络中,路由是非常复杂的,因为数据包在抵在目的地时,可能经过的节点有很多,路由表是存储在路由器或一些其他连接设置上的窗体。其中记录着了到指定目的地的网络路径,以及这些路径的相关数值。

			此命令可以直接输入使用,来查看本机路由的情况
	Windows: netstat -an	
15. mysql服务器安装及配置
	1.安装
		a.把安装文件拷贝到/home目录下
		b.挂载
			mount /mnt/cdrom
			cd /mnt/cdrom
				mysql-connector-java-3.1.10-bin.jar
				mysql-standard-4.0.26-pc-linux-gnu-i686.tar.gz
			cd mysql-* /home/
			rm -f samba-*
		c.解压文件
			tar -zxvf 文件名.tar.gz
			# tar -zxvf mysql-standard...........tar.gz
			# mv mysql-standar---...    mysql
		d.其他操作
			rpm -qa mysql
			rpm -e mysql
			rpm -e --nodeps mysql
			rpm -qa mysql

			groupadd mysql				#创建组
			useradd -g mysql mysql			#创建用户	
			cd mysql
				scripts/mysql_install_db --user=mysql	#初始化数据库
			chown -R root .				#修改 文件的 所有者
			chown -R mysql data			#修改date文件夹的所有者
			chgrp -R mysql .			#改变用户组
			
			bin/mysqld_safe --user=mysql &		#启动mysql
			检查一下,ok,正常启动
			Ctrl+c

			netstat -anp | more 
		f.进入mysql
			cd bin/
			./mysql -u root -p
			
	2.配置
		env | more
			PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:usr/..........
		cd /root
		ls -al
		.bash_profile		# root用户变量
		vi .bash_profile
			PATH=$PATH:$HOME/bin:/home/mysql/bin/
		:wq
		logout
		env | less
		mysql -u root -p
		quit

		jdk主目录下/jre/lib/ext/把拷贝mysql-connector-java-3.1.10-bin.jar
	3.备份:
		mysqldump -u root -p 密码 数据库名>data.bak
	4.恢复:mysql -u root -p密码 数据库名 < data.bak
	
	5. 自动启动配置
		MySQL二进制包里面,mysqlq.server的启动脚本程序复制到/etc/rc.d/init.d上当里面。
		# cd /etc/rc.d/init.d
		# cp /usr/local/mysql/support-files/mysql.server mysql
		# chmod +x mysql (属性改为executeable,可执行)
		
		运行chkconfig把MySQL添加到你系统的启动服务组里面去。
		# /sbin/chkconfig --del mysql
		# /sbin/chkconfig --add mysql
16. ssh(secure shell)安装配置
	客户端可以通过ssh远程登录到Linux服务器
	在Linux下有sshd服务,默认启动
	# setup
		System services 
		[]sshd
	1.安装SSH客户端 
		SSH工具的原理图
			Linux服务器(默认安装SSHD服务且启动,监听端口号是22)			
		Windows		Windows		Windows
		安装SSH客户端	安装SSH客户端	安装SSH客户端

		netstat -anp | more
	2.使用SSH客户端登录Linux服务器(前提是LinuxSSHD启动了)
		确保客户端与服务端连网的
		Linux:		ifconfig
		Windows:	ping 192.168.55.55
				ipconfig
					192.168.222.1
		Linux:		ifconfig eth0 192.168.222.22
		
		Windows.	ping 192.168.222.22
			
		Quick Connect:
			Host Name: 192.168.222.22
			User Name: root
			Port:22
		登入两次
		netstat -anp | less
		服务器端口20,客户端商品随机分配

		# 删除用户登入进程
		kill -9 1924
	3. 文件上传
	4. 文件下载
17. Linux启动过程分析
	Linux系统启动过程:
		1)BLOS自检(硬件基本设置,启动硬件顺序等)		
		2)启动GRUP/LILO					
		3)运行Liux内核并检测硬件(检测硬件是否坏了)	
		4)运行系统的第一个进程init			
		5)init读取系统引擎配置文件/etc/inittab中的信息进行初始化	
		6)/etc/rc.d/rc.sysinit系统初始化脚本			
			- 网络配置
			- 用户配置
			- 密码配置
			- 时间配置				
		7)/etc/rc.d/rcX.d/[KS] * - 根据运行级别X配置服务		
			终止以"K"开头的服务
			终止以"S"开头的服务
		8)/etc/rc.d/rc.local 执行本地特殊配置
		9)其他特殊服务
				
		
		1.load bios(hardware information)
		2.read MBR's config to find out the OS
		3.load the kernel of the OS
		4.init process starts...
		5.execute /etc/rc.d/sysinit	(rc.d后台隐藏进程)
		6.start other modules(etc/modules.conf)
		7.execute the run level scripts
		8.execute /etc/rc.d/rc.local
		9.execute /bin/login
		10.shell started...

		man shutdown
18. 压缩和解压UNIX下java网络编程
19. 安装realyplay软件(RealPlay10GOLD.bin)
	1. 安装文件拷贝到/home/目录下
	2. ./????.bin
	3. enter
	4. cd RealPlayer
	5. ./realplay
	6. 测试
21. 使用java进行socket编程
	cd /root/
	vi MyServerTest.java
		import java.io.*;
		import java.net.*;
		// 服务器端
		public class MyServerTest{
			public static void main(String[] args){
				try {
					// 创建ServerSocket
					ServerSocket ss = new ServerSocket(8888);

					System.out.println("I am listening");
					// 监听,知道某个客户端连接,一旦连接成功就会得到
					// Socket[好像是一个数据管道]
					Socket s = ss.accept();
					
					// 可以读取从客户端发送的信息
					InputStreamReader isr = new InputStreamReader(s.getInputStream());
					BufferedReader br = new BufferedReader(isr);
					String kk = br.readLine();
					System.out.println("Client send:::" + kk);

				} catch(Exception e){
					e.printStackTrace();
				}
			}
		}
	
		
22. ftp安装及配置
	service vsftpd start
	ftp localhost
	bye # 退出ftp
	service vsftpds stop # 停止ftp服务
	service vsftpds restart # 重启ftp服务

	ifconifg
		Link encap:local Loopback
		inet addr:127.0.01 Mask:255.0.0.0
	# 虚拟机配置
		Host-only:A private network share with the host 

		windows:
			ftp 192.168.26.128
			
		service iptables stop # 关闭防火墙
		
	
	# vi /etc/vsftpd.user_list
		#root
	# vi /etc/vsftpd.ftpdusers
		#root
	# service vsftpd restart
	重写使用Windows登入

	# 开机自动启动ftpd服务
		1)chkconfig
			chkconfig --level 5 vsftpd on
			chkconfig --list | grep vsftpd
		
	service sshd start
	chkconfig sshd on
	putty软件
		Raw:
		Telnet:
		Rlogin:
		SSH:	ok 
		Serial:
23. 安装CentOs 5.5后无法显中文(中文乱码)
	在使用CentOS 系统时,安装的时候可能你会遇到英文的CentOS系统,在这中情况下安装CentOS系统时是默认安装(即英文)。安装完毕后,上网出现的却是中文乱码。
	解决方法:
	到CentOs资源网站上去找fonts-chinese-3.02-12.el5.noarch.rpm(中文字体包) 和fonts-ISO8859-2-75dpi-1.0-17.1.noarch.rpm (字体显示包)
	以下是5.5版本的包地址(我安装的是5.5 i386的)
	 
	ftp://ftp.muug.mb.ca/mirror/centos/5.5/os/i386/CentOS/fonts-chinese-3.02-12.el5.noarch.rpm 
	ftp://ftp.muug.mb.ca/mirror/centos/5.5/os/i386/CentOS/fonts-ISO8859-2-75dpi-1.0-17.1.noarch.rpm 
	若你的是其它版本的,请 ftp://ftp.muug.mb.ca/mirror/centos/这下面找吧。
	下载后,在命令行安装:
	
	#rpm -ivh XXXX 
	CentOS系统安装完成后,重新启动即可。
	 
	终端、 gedit 显示乱码

		#vi /etc/sysconfig/i18n
		将LANG="en_US.UTF-8"
		SYSFONT="latarcyrheb-sun16"
		修改原内容为
		LANG="zh_CN.GB18030"
		LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
		SUPPORTED="zh_CN.UTF-8:zh_CN:zh:en_US.UTF-8:en_US:en"
		SYSFONT="lat0-sun16"

		用 yum 安装中文字体
		#yum install fonts-chinese.noarch
		system  ->  logout  注销
		重新登录CentOS系统时,你会发现,所有界面已从英文变成中文。在终端输入 date 命令测试
		#date
		2011 年 3 月 8 日 星期一 20:17:00 CST 
	 
	在 ssh , telnet 终端中文显示乱码解决办法
		#vi /etc/sysconfig/i18n
		将原内容 LANG="en_US.UTF-8"
		SYSFONT="latarcyrheb-sun16"
		修改为
		LANG="zh_CN.GB18030"
		LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
		SUPPORTED="zh_CN.UTF-8:zh_CN:zh:en_US.UTF-8:en_US:en"
		SYSFONT="lat0-sun16"

	用 yum 安装中文字体
		#yum install fonts-chinese.noarch
		断开 ssh ,重新连
		在终端输入 date 命令测试
		#date
		2011 年 3 月 8 日 星期一 20:27:00 CST 
24. Linux系统安装
	内容概要:
		1.使用虚拟机软件应用
			- 不需要分区或重新开机就能在同一台PC上使用两种以上的操作系统
			- 本机系统可以与虚拟机系统网络通信
			- 可以设定并且随时修改虚拟机操作系统的硬件环境
		2.Linux系统安装设置
		3.远程登录管理工具介绍
25. 更新源
	国内速度较快的常用更新源:
		http://mirror.be10.com/centos/
		http://centos.candishosting.com.cn/
		http://ftp.sjtu.edu.cn/centos/
		http://ftp.hostrino.com/pub/centos/
		http://mirrors.ta139.com/centos/
		http://ftp.iasi.roedu.net/mirrors/centos.org/centos/

	编辑yum配置文件:
		# vi /etc/yum.repos.d/CentOS-Base.repo
			内容:

			[base]
			name=CentOS-$releasever - Base
			#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
			#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
			baseurl=http://centos.candishosting.com/cn/$releasever/os/$basearch/
			http://mirrors.ta139.com/centos/$releasever/os/$basearch/
			http://mirror.be10.com/centos/$releasever/os/$basearch/
			http://ftp.sjtu.edu.cn/centos/$releasever/os/$basearch/
			http://ftp.hostrino.com/pub/centos/$releasever/os/$basearch/
			gpgcheck=1
			gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

			#released updates
			[updates]
			name=CentOS-$releasever - Updates
			#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
			#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
			baseurl=http://centos.ta139.com/centos/$releasever/updates/$basearch/
			http://mirrors.ta139.com/centos/$releasever/updates/$basearch/
			http://mirrors.be10.com/centos/$releasever/updates/$basearch/
			http://ftp.sjtu.edu.cn/centos/$releasever/updates/$basearch/
			http://ftp.hostrino.com/pub/centos/$releasever/updates/$basearch/
			gpgcheck=1
			gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

			#packages used/produced in the build but not released
			[addons]
			name=CentOS-$releasever - Addons
			#mirrorlist=http://mirrorlist.centos.org/?released=$releasever&arch=$basearch&repo=addons
			#baseurl=http://mirror.centos.org/centos/$releasever/addons/$basearch/
			baseurl=http://centos.candishosting.com.cn/$releasever/addons/$basearch/
			http://mirrors.ta139.com/centos/$releasever/addons/$baseearch/
			http://mirrors.be10.com/centos/$releasever/addons/$basearch/
			http://ftp.sjtu.edu.cn/centos/$releasever/addons/$basearch/
			http://ftp.hostrino.com/pub/centos/$releasever/addons/$basearch/
			gpgcheck=1
			gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

			#additional packages that may be usefull
			[extras]
			name=CentOS-$releasever - Extras
			#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
			#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
			baseurl=http://centos.candishosting.com.cn/$releasever/extras/$basearch/
			http://mirrors.ta139.com/centos/$releasever/extras/$basearch/
			http://mirrors.be10.com/centos/$releasever/extras/$basearch/
			http://ftp.sjtu.edu.cn/centos/$releasever/extras/$basearch/
			http://ftp.hostrino.com/pub/centos/$releasever/extras/$basearch/
			gpgcheck=1
			gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

			#additional packages that extends functionality of existing packages
			[centosplus]
			name=CentOS-$releasever - Plus
			#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
			#baseurl=http://mirror.centos.org/centos/$releasever/centosplush/$basearch/
			baseurl=http://centos.candishosting.com.cn/$releasever/centosplush/$basearch/
			http://mirrors.ta139.com/centos/$releasever/centosplus/$basearch/
			http://mirror.be10.com/centos/$releasever/centosplush/$basearch/
			http://ftp.sjtu.edu.cn/centos/$releasever/centosplus/$basearch/
			http://ftp.hostrino.com/pub/centos/$releasever/centosplus/$basearch/
			gpgcheck=1
			enabled=0
			gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

			#contrib - packages by Centos Users
			[contrib]
			name=CentOS-$releasever - Contrib
			#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib
			#baseurl=http://mirror.centos.org/centos/$releasever/contrib/$basearch/
			baseurl=http://centos.candishosting.com.cn/$releasever/contrib/$basearch/
			http://mirrors.ta139.com/centos/$releasever/contrib/$basearch/
			http://mirror.be10.com/centos/$releasever/contrib/$basearch/
			http://ftp.sjtu.edu.cn/centos/$releasever/contrib/$basearch/
			http://ftp.hostrino.com/pub/centos/$releasever/contrib/$basearch/
			gpgcheck=1
			enabled=0
			gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
			
	
	安装必要的软件工具:
	# yum install wget bzip2 unzip zip nmap tree lynx fileutils ncftp lftp

	编译源代码的软件,安装开发工具组的软件包
	# yum groupinstall "Development Tools"
26. 远程登录Linux系统
	ssh [email protected]
27.系统运行级别
	0:所有进程将被终止,机器将有序的停止,关机时系统处于这个运行级别
	1:单用户模式。用于系统维护,只有少数进程运行,同时所有服务也不启动
	2:多用户模式。和运行级别2一样,只是网络文件系统(NFS)服务没被启动
	3:多用户模式。允许多用户登录系统,是系统默认的启动级别(字符界面登录)
	4:留给用户自定义的运行级别
	5:多用户模式,并且在系统启动后运行X-Window,给出一个图形化的登录窗口(图形登录界面)
	6:所有进程被终止,系统重新启动

	如果已经启动了字符界面,用户想要进入图形界面可以使用如下命令切换:
	$ startx &

	查看当前运行级别:
	$ runlevel
	
	切换运行级:
	# init [0123456Ss]
		- init 0命令表示切换至运行级别0,即关机
		- init 1命令表示切换至运行级别1,即进入单用户运行模式
		- init 6命令表示切换至运行级别6,即重新启动
	
	telinit命令是init命令的符号链接
	# runlevel (显示系统当前运行级别)
	N 3 (系统当前运行级别为3,没有上一次运行级别用N表示)
	
	# init 2 (系统控制台中显示相应的停止启动服务信息)
	# runlevel
	3 2 (系统当前运行级别为2,上一次运行级别为3)

	shutdown命令:
	比较安全的方式来关闭系统,所有登录到系统上的用户将被通知系统将要关闭,而新的登录操作将被阻止,同时所有的进程也将被通知系统将要关闭,这样有些程序,如Vi就能够及时保存用户编辑的文件并退出。
		shutdown [参数] time [warning-message]
			- time用于设置多长时间后执行shutdown指令,可以使用如下三种方式
				hh:mm:指定绝对时间,hh用于指定小时,mm用于指定分钟
				+m:指定相对时间,m为数字,单位为分钟
				now: 现在立刻进行,相当于+0
			warning-message用于设置发送给用户的警告信息
		
		常用参数如下:
			-t sec : 送出警告信息和删除信息之间要延迟多少秒再通知init执行运行级别切换
			-k : 并不真的关闭系统,只是给每个用户发送警告信息
			-f : 关闭之后重新启动系统
			-h : 关闭之后停止系统
			-f : 重新启动后不用fsck要检查磁盘
			-F : 重新启动后强制用fsck检查磁盘
		
			## 警告所有用户系统将5分钟后重新启动系统
			# shutdown -r + 5 "System will be reboot in 5 ms, Please save you work."

			##立即关闭系统
			# shutdown -h now

			## 立即重新启动系统,并在重新启动后强制用fsck检查磁盘
			# shutdown -h -F now
28. 过虑器
	Linux的应用工具分为三种:
		交互工具
		过滤器
		编辑器
	能够接受数据,过滤再输出的工具,称为过滤器
	对过滤器和进程,存在着输入源与输出对象
	
	输入、输出、重写向
		输入:过滤器的数据来源
			-- 标准输入stdin(0): 默认是键盘
		
		输出:过滤器的数据去向
			-- 标准输出stdout(1):默认是终端屏幕
		
		错误输出:报错讯息与标准输出走不同的I/O通道
			-- 标准错误输出stderr(2):默认是终端屏幕

		重定向:标准输入、输出与错误输出,都可以用特定符号改变数据来源或去向

		##标准输入
		# ls -l
		##显示标准输出

		##标准输入
		# ls-l
		##显示错误输出

		##保存在/dev/std*
		# ls -l /dev/std*

		##重定向
			输入重写向
				使用"<"来重定向输入源
					#command命令从file文件中获取执行
					command < file
					
					# 文件.bash_profile中的大写转换成小写
					# tr 'A-Z' 'a-z' < .bash_profile
				
				从当前文件输入
					使用<<让系统将一次键盘的全部输入,选送入虚拟的“当前文档”,然后一次性输入
					
					# cat > cat.file continue
					>!
					# cat cat.file
			输出重定向
				使用>改变数据输出目标
				# ls -l > listfile		# 将当前目录下面的文件以长模式显示,然后写入listfile文件,文件已有内容会被消除

				
				覆盖与追加
					-使用>进行输出重定向,文件的原内容会被覆盖
						ls -l > listfile
					-使用>>,可以将输出追加入文件
						ls -l >> listfile
				
			错误输出重定向
				系统错误与标准输出使用的I/O管道不同
				默认情况下,系统报错会显示到终端屏幕上
				
				-使用2>将错误讯息重定向入一个文件
				# find / -type s 2> /dev/null

				-使用2>>将报错讯息追加入一个文件
				# file / -name passwd 2>> results

				# ls-l 2> test


					
			双重输出重写向
				# find /etc -name passwd (在etc目录下查找passwd的文件名)
				# find /etc -name passwd > stdout
				# cat stdout (正确的输入到stdout文件中)
				
				# find /etc -name passwd 2> stderr
				# cat stderr (错误的信息输入到stderr文件中)


				使用>和2>可以将一次操作的正确、错误输入,被单独地送到不同的地方:
				# find / -perm -2 2> error > results
				# find /etc -name passwd 2> stderr > stdout

				使用&>将所有输入都送向同一个地方:
				# find / -perm +60000 &> file
				# find /etc -name passwd &> file


				

				
		
	管道
		使用|将前一个过滤器的输出直接送入后一个过滤器的输入
		# ls -l | grep pass
		
		允许多重管道	
		# ls -l /etc/ | more | grep fstab
		注意管道前过滤器的输出与管道后过滤器的输入数据类型匹配
		
		重定向、管道的常用范例
			##分屏显示当前目录下的文件
			# ls -l | more

			##拷贝filea到fileb
			# cat < filea > fileb

			##将数个小文件合并成一个文件
			# cat file.* > file
			
			# cat filea;cat fileb
			# cat filea fileb > filec
			# cat file* > filed

		
29. Shell命令
	什么是Shell
		- Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口(命令解释器)。
		- Shell接收用户输入的命令并把它送入内核去执行
		- Shell起着协调用户与系统的一致性和在用户与系统之间进行交互的作用
		
		硬件->系统核心->命令解释器Shell->外层应用程序

	Linux系统中的可执行文件
		类别		说明
		Linux命令	存放在/bin、/sbin目录下的命令
		内置命令		出于效率的考虑,将一些常用命令的解释程序构造在Shell内部
		实用程序		存放在/usr/bin、/usr/sbin、/usr/share、/usr/local/bin等目录下的实用程序或工具
		用户程序		用户程序经过编译生成可执行文件后,也可作为Shell命令运行
		Shell脚本	由Shell语言编写的批处理文件

		当用户提交了一个命令后,Shell首先判断它是否为内置命令,如果是就通过Shell内部的解释器将其解释为系统功能调用并转交给内核执行;若是外部命令或实用程序就试着在硬盘中查找该命令并将其调入内存,再将其解释为系统功能调用并转交给内核执行。在查找该命令时有两种情况。

		1. 如果用户给出了命令的路径,Shell就沿着用户给出的路径进行查找,若找到则调入内存,若没找到则输出提示信息。
		2. 如果用户没有给出命令的路径,Shell就在环境变量PATH所制定的路径中依次查找命令,若找到则调入内存,若没找到则输出提示信息。

			用户输入命令->提交给Shell->是否为内置命令?
								内置命令:内核中的系统功能调用
								外部命令或实用程序:在系统中查找该命令的文件并调入内存执行 -> 内核中的系统功能调用

			提示:
				1. 内置命令是包含在Shell自身当中的,在编写Shell的时候就已经包含在内了,当用户登录系统后就会在内存中运行一个Shell,由其自身负责解释内置命令。一些基本的命令如cd、exit等都是内置命令。用help命令可以查看内置命令的使用方法。
				2. 外部命令是存在于文件系统某个目录下的具体的可执行程序,如文件拷贝命令cp,就是在/bin目录下的一个可执行文件。用man或info命令可以查看外部命令的使用方法。外部命令也可以是某些商业或自由软件,如mozilla等。 
		
	

你可能感兴趣的:(Linux)