代码改变世界

ubuntu学习系列(不定期更新)

2012-07-28 21:44  Rollen Holt  阅读(2902)  评论(0编辑  收藏  举报

今晚有点小悲剧,之前一个多小时在Linux系统下面写的笔记,当时写的不完整,ubuntu环境下面的中文输入法比较慢,所以打算最后在windows环境下好好编辑修改一下,结果最后杯具了。一不小心给【rm -rf 】.....

然后你懂的,我蹲在墙角郁闷了2分钟,抱了抱自己,抬头45度仰望天空,眼角泪滑过,顿时心中浮起一缕淡淡的忧伤.....然后就没有然后了。

首先来看看Ubuntu Linux文件系统的主要的一些目录吧,这些基本大家在各种linux的书籍中,基本都可以看得到。

 

 

使用locale命令可以查看系统当前的语言设置。在ubuntu中,默认的环境语言设置是在/etc/default/locale文件中。

关于ubuntu的升级和安装补丁的话,一般情况下我使用:sudo apt-get updatesudo apt-get upgrade

 

在运行了上述的命令之后,如果系统提示一些软件是被“保留”,而不能被升级的话,我们可以使用apt-get dist-upgrade命令来升级所有的软件包。

mc提供了linux环境下的一个文字版本的图像用户界面,很强大。直接在命令中输入mc即可。如果没有安装的话,可以直接sudo apt-get install mc

很多的时候我都是使用find来查找文件的,但是一些时候我也会使用locate命令,在使用locate命令的时候,他会去一个数据库中查找,而且只能够按照文件名来进行查找,这个数据库是updatedb命令所生成的,在/etc/cron.daily下面有一个文件,叫做mlocate,他会每一天都运行一次,来跟新数据库,你可以手动执行updatedb命令跟新数据库。

用法就是:locate 文件名

如果使用 locate filename -c 就可以显示找到的个数。

使用apt-cache show 软件包名称 就可以显示软件包的一些信息,比如我们可以使用 apt-cache show php5-mysql 来显示php5-mysql这个软件包的信息。

apt相关介绍

首先来介绍一下apt的一些目录吧:如下图:

 

当我们在使用sudo apt-get install XXX 的时候,软件是从哪里下载的呢?正是这个/etc/apt/sources.list文件定义了软件的来源。在这个文件中deb定义了已编译软件的来源,deb-src定义了源码包的来源。

ubuntu的软件仓库分为四部分。分别是main,restricted,universe,multiverse。他们的区别如下:

main的软件包是自由软件,ubuntu提供完全支持。

restricted的软件并不是完全自由的软件,但是因为这类软件被广泛的使用,所以ubuntu也提供支持。

universe的软件ubuntu并不提供安全补丁的支持,而这类软件的支持一般是那些社区支持的。

multiverse的软件是“非自由的软件”,如果你需要使用这类的软件,可以阅读先关软件的协议

此处之所以介绍这4种的不同,是因为系统管理员对于系统安全是否“重视”了,如果极为重视的话,那么应该只使用main和restricted。因为这类软件ubuntu提供很好的支持,而且跟新很快,补丁多。比如如果只想使用main的,那么可以在文件中注释掉其他三种形式的。

apt的子命令大家可以看下表:

 

 

使用apt-cache search XXX 可以用来搜索xxx软件包的名字。

使用apt-cache show xxx可以查看xxx软件包的信息。

相对于apt-get来说,aptitude提供了一个文本化的图形用户界面。操作起来比较方便。如果你的系统安装了aptitude命令的话,直接在shell中输入aptitude就行,否则的话,需要sudo apt-get install aptitude

tasksel也有自己的界面,使用tasksel命令可以安装“任务”。任务其实就是一些软件包的组合。在/usr/share/tasksel/目录下的.desc文件中,可以看到一些已经定义好的“任务”。

(先写到这里吧,这些内容远远不足被我误删的那个文件的5%啊,哎。杯具。12点了,该睡觉了,明天上班。以后跟新。)

--------------------------------------------------------------------

2012年7月28日晚(21:25)继续跟新

在ubuntu中,所有有关网卡的配置基本都是在/etc/network/interfaces文件中。

大家如果查看这个文件的内容的话,可以看见应该有一段:“auto lo”。设置lo是TCP/Ip定义的lookback虚拟网络设备。使得TCP/IP可以以127.0.0.1来访问自身。eth0代表第一块网卡,如果你的计算机有多个网卡的话,那么依次就是eth0 eth1 eth2。

文件中的auto关键字使得网络设备可以在系统启动的时候自己启动。iface是interface的缩写。dhcp的意思是说这个网络设备要通过DHCP来获取IP配置信息。如果需要手动配置IP地址等的信息,可以将dhcp改为static。

文件中的address关键字指定IP地址。netmask指定子网掩码,gateway指定网关。当然,如果你修改了这个文件之后,需要配置起作用的话,需要重启网络。可以在shell中输入:
service networking restart
如果你需要单独控制某块网卡的时候,则可以使用ifdown/ifup命令。比如:
sudo ifdown eth0
sudo ifup eth0
在ubuntu中,域名服务器(DNS)是在/etc/resolv.conf文件中配置的。文件的内容大家请自行查看文件。此处要解释的是文件中的search命令似的系统会首先在本地域中搜索主机,如果你有自己的DNS服务器,你也可以将他们写在这里。
下面我们来说说/etc/hosts这个文件吧,我想大多数程序员可能都有过在windows下面修改hosts文件的经历吧,其实这个文件和windows下面的那个hosts文件差不多。你可以将一些主机名和IP地址写在这个文件中,这样就可以避免一些域名解析的问题了。
在默认的情况下,进行域名解析的时候,会首先查看这个hosts文件,然后才回去查询DNS服务器,如果你想修改这个顺序的话,你可以在/etc/nsswitch.conf文件中的hosts一行中的顺序。

LAMP服务器

我们在安装apache的时候,首要要考虑的问题是到底安装apache的哪一个类型。因为apache有四种类型:

    apache2-mpm-event
    apache-mpm-perchild
    apache-mpm-prefork
    apache-mpm-worker

对于每一种不同的类型的区别,大家还是自己去google吧。此处这些内容因为不是重点,所以此处不做细说。

如果要安装apache,只需要在shell中输入: sudo apt-get install apache2
默认情况下安装的是: apache-mpm-worker
其实在编译apache的时候,只有很少模块被编译进去了,大家可以使用apache2 –l 命令来查看被编译进去到模块。
应该可以看到如下的结果:

  Compiled in modules:
  core.c
  mod_log_config.c
  mod_logio.c
  worker.c
  http_core.c
  mod_so.c

下面我们来看看apache的布局吧:使用ls /etc/apache2 可以看到如下的结果:

apache2.conf  envvars     magic           mods-enabled  sites-available
    conf.d        httpd.conf  mods-available  ports.conf    sites-enabled

关于每一个文件的含义大家可以查看下面的这张图:

image

一般情况下如果我们需要查看有哪些模块可用的时候,我们可以使用a2enmod命令来进行查看。在shell中输入这个命令,在笔者的机器中显示的内容是:

rollen@ubuntu:~$ a2enmod
Your choices are: actions alias asis auth_basic auth_digest authn_alias authn_anon authn_dbd authn_dbm authn_default authn_file authnz_ldap authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cern_meta cgi cgid charset_lite dav dav_fs dav_lock dbd deflate dir disk_cache dump_io env expires ext_filter file_cache filter headers ident imagemap include info ldap log_forensic mem_cache mime mime_magic negotiation proxy proxy_ajp proxy_balancer proxy_connect proxy_ftp proxy_http proxy_scgi reqtimeout rewrite setenvif speling ssl status substitute suexec unique_id userdir usertrack version vhost_alias
Which module(s) do you want to enable (wildcards ok)?

 

输入模块的名字就可以启用他们。如果我们想查看以及被启用的模块或者想禁用一些我们已经启用的模块的时候,只需要在shell中输入a2dismod命令。然后输入相应的模块名字就可以禁用他们。这条命令在笔者的机器上输出为:

rollen@ubuntu:~$ a2dismod
Your choices are: alias auth_basic authn_file authz_default authz_groupfile authz_host authz_user autoindex cache cgid deflate dir disk_cache env mime negotiation reqtimeout setenvif ssl status
Which module(s) do you want to disable (wildcards ok)?

 

Apache网页的存放位置

    一般情况下,apache将网站存放在/var/www目录下。但是你可以通过修改DocumentRoot关键字的设置来讲任意目录指定为网页文件的根目录。不过一般不建议这么做。应该采取的建议是为每一个网站都安排一个自己独立的文件夹。

    每一个apache虚拟主机都有一个单独的配置文件,比如default虚拟主机,他的配置文件的位置存放在/etc/apache2/sites-available目录下,这个虚拟主机已经被链接到/etc/apache2/sites-enabled目录下面,所以是一个已经在运行的虚拟主机。如果你在浏览器中通过localhost访问的话,就可以看到“It works”的字样,说明这个网站已经在提供服务。

 

 

创建一个虚拟主机

    如果要创建一个新的网站的话,我们需要为它创建一个新的虚拟主机,假设我们需要创建一个域名为blog.mysite.com的虚拟主机,在创建之前,我们先复制一下default文件,以便在其基础上进行修改。

    我们使用编辑器打开这个文件,将第一行的NameVirtualHost指令删除,(所有的虚拟主机只保留一个NameVirtualHost指令即可),然后我们需要将DocumentRoot的路径进行修改为/var/www/blog.mysite.com/,然后将<Directory /var/www/>修改为:<Directory /var/www/blog.mysite.com/>。

    如果你有许多的虚拟主机的话,很不错的建议就是将ErrorLog和CustomLog的路劲进行修改。这样的话,我们就能将每一个虚拟主机的日志进行分开。方便我们进行管理和维护。

    我们创建/vaar/www/blog.mysite.com/目录,然后向其中写入一个index.htm文件,至于文件的内容,大家可以随便写。然后我们需要禁用虚机主机,并重启apache服务器。

    sudo a2dissite default && sudo a2ensite blog.mysite.com

    sudo service apache2 restart

下面我们来说一下虚拟主机的配置情况吧,我们以默认的虚拟主机default为例,如下是default文件的内容(我修改了一些内容):

NameVirtualHost *
<VirtualHost *:80>
	ServerAdmin webmaster@localhost

	DocumentRoot /var/www
	
	SSLEngine on
	
	SSLOptions +StrictRequire
	SSLCertificateFile /etc/ssl/certs/server.csr
	SSLCertificateKeyFile /etc/ssl/private/server.key
		


	<Directory />
		Options FollowSymLinks
		AllowOverride None
	</Directory>
	<Directory /var/www/>
		Options Indexes FollowSymLinks MultiViews
		AllowOverride None
		Order allow,deny
		allow from all
	</Directory>

	ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
	<Directory "/usr/lib/cgi-bin">
		AllowOverride None
		Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
		Order allow,deny
		Allow from all
	</Directory>

	ErrorLog ${APACHE_LOG_DIR}/error.log

	# Possible values include: debug, info, notice, warn, error, crit,
	# alert, emerg.
	LogLevel warn

	CustomLog ${APACHE_LOG_DIR}/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

其中的NameVirtualHost命令用来指定服务器的IP地址,只适用于基于名字的虚拟主机。命令后面接IP地址和端口号,比如:

NameVirtualHost 192.168.1.10:8080

这个特性非常有用,尤其是当你的服务器有多个网卡的时候,多条线路的时候,使用这个命令,就可以设置某个网站只能从某块网卡上面走,这个对于部署大型的网站很有用。当然,和你想的一样,如果不使用IP地址,而是使用星号*的话,那么表示这个虚拟主机可以从所有的网卡走。

(待续)