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

今晚有点小悲剧,之前一个多小时在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

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

一般情况下如果我们需要查看有哪些模块可用的时候,我们可以使用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地址,而是使用星号*的话,那么表示这个虚拟主机可以从所有的网卡走。

(待续)

时间: 2024-09-17 04:53:48

ubuntu学习系列(不定期更新)的相关文章

Asp.Net Web API 2 官网菜鸟学习系列导航[持续更新中]

原文:Asp.Net Web API 2 官网菜鸟学习系列导航[持续更新中] 前言 本来一直参见于微软官网进行学习的, 官网网址http://www.asp.net/web-api.出于自己想锻炼一下学习阅读英文文章的目的,又可以学习下微软新发布的技术,其实也很久了,但自己菜鸟一枚,对自己来说都是新技术了.鉴于以上两个原因,本人打算借助google翻译和有道词典,来翻译学习这个系列,并通过博客园来记录自己的翻译学习过程.由于自己阅读水平的确太菜,在借助工具的情况下,有时候搞出来的也是蹩脚的语句,

Python爬虫学习系列教程

Python版本:2.7 一.爬虫入门 1. Python爬虫入门一之综述 2. Python爬虫入门二之爬虫基础了解 3. Python爬虫入门三之Urllib库的基本使用 4. Python爬虫入门四之Urllib库的高级用法 5. Python爬虫入门五之URLError异常处理 6. Python爬虫入门六之Cookie的使用 7. Python爬虫入门七之正则表达式 二.爬虫实战 1. Python爬虫实战一之爬取糗事百科段子 2. Python爬虫实战二之爬取百度贴吧帖子 3. Py

[译] 深度学习系列1:设置 AWS &amp; 图像识别

本文讲的是[译] 深度学习系列1:设置 AWS & 图像识别, 原文地址:Deep Learning #1: Setting up AWS & Image Recognition 原文作者:Rutger Ruizendaal 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m- 译者:TobiasLee 校对者:Tina92 sqrthree 这篇文章是深度学习系列的第一部分.你可以在这里查看第二部分,以及这里查看第三部分. 本周的任务:对猫和狗的图像进行分

[译] 深度学习系列 4: 为什么你需要使用嵌入层

本文讲的是[译] 深度学习系列 4: 为什么你需要使用嵌入层, 原文地址:Deep Learning 4: Why You Need to Start Using Embedding Layers 原文作者:Rutger Ruizendaal 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m- 译者:Tobias Lee 校对者:LJ147.changkun 深度学习系列4: 为什么你需要使用嵌入层 除了词嵌入以外还有很多 这是深度学习系列的其中一篇,其他文章地

Asp.Net MVC5入门学习系列⑦

原文:Asp.Net MVC5入门学习系列⑦ 接着上篇结尾所说,如果开发中刚才遇到Model需要添加或者减少字段/属性的话,但是刚好你也利用EF的Code frist通过Model生存的数据库,这时改怎么办?   添加一个字段   我们现在要给Movie实体模型类添加一个评价的字段该怎么搞!我们知道我们默认使用EF code frist生存的数据库是同步性的,这样才能便于我们更好的开发,如果实体模型和数据库不同步的话,实体框架应该会抛出异常.  code frisr设置模型库迁移  在VS里我们

使用腾讯云 GPU 学习深度学习系列之二:Tensorflow 简明原理【转】

转自:https://www.qcloud.com/community/article/598765?fromSource=gwzcw.117333.117333.117333 这是<使用腾讯云 GPU 学习深度学习>系列文章的第二篇,主要介绍了 Tensorflow 的原理,以及如何用最简单的Python代码进行功能实现.本系列文章主要介绍如何使用 腾讯云GPU服务器 进行深度学习运算,前面主要介绍原理部分,后期则以实践为主. 往期内容: 使用腾讯云 GPU 学习深度学习系列之一:传统机器学

ExtJs2.0学习系列(2)--Ext.Panel

上一篇文章ExtJs2.0学习系列(1)--Ext.MessageBox ,受到了大家的褒贬不一,还是有的朋友提出好的建议,在此表示感谢! 今天介绍extjs中的Panel组件. //html代码 <div id="container"> </div> //js代码 var p = new Ext.Panel({ title: 'My Panel',//标题 collapsible:true,//右上角上的那个收缩按钮,设为false则不显示 renderTo:

ExtJs2.0学习系列(6)--Ext.FormPanel之第三式(ComboBox篇)

前言:说句实话,此extjs系列的文章在博客园中的热度不高,可能是学这玩意的人不多吧,但是我觉得有这么个系列的文章对于中国朋友非常有帮助!请大家支持! 上篇ExtJs2.0学习系列(5)--Ext.FormPanel之第二式中我们讨论了下fieldset和表单验证的知识,今天我们接着深入解析表单元素中ComboBox组件的使用.会涉及 到.net简单服务器数据交互,但暂不做深入讨论,以后会详细分析服务器交互相关,不过可能要等较长一段时间,呵呵! 5.服务器数据作为ComboBox的数据源实例 首

JAVA/JSP学习系列之八(改写MySQL翻页例子)

js|mysql|翻页 一.前言 其实,改写后的JDBC Data-Source是运行在Servlet中的,通过JNDI去查找数据源.我用Orion试的,将本站<JAVA/JSP学习系列之六(MySQL翻页例子) > 简单改写了一下. 二.配置 (1)JDBC 需要将用到的JDBC驱动Copy到[ORION]/lib目录下 (2)data-source 在[ORION]/config/data-sources.xml文件中加入如下: 〈data-source class="com.e