#command
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
#save configration
sudo apt-get install iptables-persistent
sudo invoke-rc.d iptables-persistent save
#clear
sudo /etc/init.d/iptables-persistent flush
linux
linux 标签中有 6 篇文章
linux(ubuntu)软件安装实践
准备在ubuntu上搞搞java,整个环境还是不太习惯,以前零零碎碎看了些操作片段,总是感觉很模糊,几天不用就忘一干二净了。
这次准备系统的搞搞清楚,在每遇到问题时就问题涉及范围内的知识要点先拟一个提纲,然后查资料、整理、描述、记录,这样有利于系统的提升。
这部分是关于ubuntu下软件安装的相关要点,部分自撰,部分来自网络。
常见方式
-
自动安装
通过软件管理 器或apt-get自动安装软件,软件会按照默认设置编译部署配置。
优点:方便、快捷、易升级
缺点:一般来说文件会按照标准分散在各目录,不易维护,因此如果需要经常对软件配置或其他内容进行维护,则不宜采用此方式。
常用命令:
- apt-get install {soft}
- apt-get remove {soft}
- apt-get update
- apt-get autoremove 自动删除已经无效的包
-
下载包解压安装
下载发行商已经 编译好的压缩包进行安装,需自行解压,并进行相关配置。
优点:可自定义文件部署路径,方便配置维护。
缺点:部署、升级、删除需手工操作,需关注依赖。
常用命令:
- wget http://{package url} 获取包
- curl -o http://{package url} 获取包
- tar zxvf {package.gz} -C {target dir. etc /opt} 将包gzip解压到指定路径
-
手工编译安装
下载源代码包,手工编译安装。
优点:可对针对具体情况对软件编译参数进行设置。
缺点:需要了解软件编译参数,需要编译环境,手工操作容易出错,依赖问题。
常用命令:
- sudo ./configure {–options}
- make
- make install
-
常用工具
aptitude:apt终端图形界面工具
dpkg:deb包管理工具
- dpkg -i {pkg.deb} 安装包
- dpkg -r {pkg} 删除包
- dpkg -L {pkg} 列出与该包关联文件
- dpkg -l | grep {keyword} 列出当前已安装指定关键字包
目录结构
-
标准目录
linux系统的标准目录规范,如果通过系统软件管理器自动安装软件,则通常遵循此规范要求。
- /bin 系统执行文件,最常使用命令,这些文件可以被普通用户使用。
- /sbin 系统执行文件,这些文件不打算被普通用户使用,普通用户使用要指定目录。
- /root 系统管理员(也叫超级用户或根用户)的Home目录。
- /dev 设备文件目录。
- /boot 用于自举加载程序(LILO或GRUB)的文件。
- /lost+found 在文件系统修复时恢复的文件
- /lib 系统核心共享库目录,几乎所有的应用程序都会用到该目录下的共享库。
- /opt 可选应用程序目录,很多第三方软件在安装时默认会找这个目录。
- /tmp 用来存放不同程序执行时产生的临时文件,该目录会被系统自动清理干净。
- /var 存放在正常操作中被修改的文件,包括各种日志、加锁、临时文件、数据文件等。
- /var/log 系统日志目录,通常也将其他系统的日志置于此目录或子目录。
- /etc 存放各种配置文件和子目录,例如网络配置文件、文件系统、用户配置信息等。
- /home/{user} 用户目录
- /usr 用户的应用程序和文件几乎都存放在该目录下。
- /usr/share 独立与你计算机结构的数据,譬如,字典中的词。
- /usr/(s)bin 类似根目录下对应的目录(/bin和/sbin),但不用于基本的启动(譬如,在紧急维护中)。大多数命令在这个目录下。
- /usr/local 本地安装的应用程序,这个目录下的内容在重安装或升级操作系统后应该存在。
- /usr/local/bin 可能是用户安装的小的应用程序,和一些在/usr/local目录下大应用程序的符号连接。
- /usr/src Linux开放的源代码目录。
-
常见规划
-
桌面用途
用户自有应用和文件置于/home/{user}中。
系统共享应用可置于/usr/local。
纯自用无共享主机也可全部置于/home/{user}中。
/home可独立划分磁盘分区方便管理升级维护。
-
服务器用途
无固定模式,根据实际需求,通常不会严格按照规范。
常见模式
根据文件更新频繁度、破碎、重要性、IO读写等关键指标,将文件分类存储于不同目录、分区或磁盘,方便维护管理,提高性能和安全性。
-
环境设置
- /etc/enviroment 系统环境变量配置,系统启动时读取。
- /etc/profile 用户全局环境变量配置,用户登录启用时读取。
- /etc/bashrc 开启shell时为每个bash用户执行此环境配置。
- ~/.profile 具体用户环境变量配置。
- ~/.bashrc 具体用户开启shell时环境配置。
- ~/.bash_profile 交互式、login方式进入bash时运行,通常和.bashrc内容相同,因此通常会调用.bashrc。
- ~/.bash_logout 当每次退出系统(退出bash shell)时,执行该文件。
服务
最后,某些软件我们希望把他设置为服务,或者简单的说希望 他开机启动,很简单。
将启动脚本部署到/etc/init.d/,然后安装一个软件rcconf。
sudo apt-get install rcconf
运行rcconf即可设置启动选项,很怀旧的dos风格gui界面。
Setup on Linode.com with ubuntu+nginx+php+fastcgi+mysql 续
嗯嗯,继续。
-
nginx和fastcgi启动配置
2个配置文件,放于/etc/init.d下面。
cd /etc/init.d touch fast-cgi touch nginx sudo chmod +x /etc/init.d/nginx /etc/init.d/fast-cgi
nginx
#! /bin/sh ### BEGIN INIT INFO # Provides: nginx # Required-Start: $all # Required-Stop: $all # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: starts the nginx web server # Description: starts nginx using start-stop-daemon ### END INIT INFO PATH=/usr/local/nginx/sbin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DAEMON=/usr/local/nginx/sbin/nginx NAME=nginx DESC=nginx test -x $DAEMON || exit 0 # Include nginx defaults if available if [ -f /etc/default/nginx ] ; then . /etc/default/nginx fi set -e . /lib/lsb/init-functions test_nginx_config() { if nginx -t then return 0 else return $? fi } case "$1" in start) echo -n "Starting $DESC: " test_nginx_config start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \ --exec $DAEMON -- $DAEMON_OPTS || true echo "$NAME." ;; stop) echo -n "Stopping $DESC: " start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \ --exec $DAEMON || true echo "$NAME." ;; restart|force-reload) echo -n "Restarting $DESC: " start-stop-daemon --stop --quiet --pidfile \ /var/run/$NAME.pid --exec $DAEMON || true sleep 1 test_nginx_config start-stop-daemon --start --quiet --pidfile \ /var/run/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS || true echo "$NAME." ;; reload) echo -n "Reloading $DESC configuration: " test_nginx_config start-stop-daemon --stop --signal HUP --quiet --pidfile /var/run/$NAME.pid \ --exec $DAEMON || true echo "$NAME." ;; configtest) echo -n "Testing $DESC configuration: " if test_nginx_config then echo "$NAME." else exit $? fi ;; status) status_of_proc -p /var/run/$NAME.pid "$DAEMON" nginx && exit 0 || exit $? ;; *) echo "Usage: $NAME {start|stop|restart|reload|force-reload|status|configtest}" >&2 exit 1 ;; esac exit 0
fast-cgi
#! /bin/sh ### BEGIN INIT INFO # Provides: fast-cgi # Required-Start: $all # Required-Stop: $all # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: starts the fast-cgi web server # Description: starts fastcgi using start-stop-daemon ### END INIT INFO PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin NAME=spawn-fcgi DESC=spawn-fcgi DAEMON=/usr/local/bin/spawn-fcgi DAEMON_OPTS="-u www-data -g www-data -C 8 -a 127.0.0.1 -p 9000 -P /var/run/$NAME.pid -- /usr/bin/php5-cgi" test -x $DAEMON || exit 0 set -e case "$1" in start) echo -n "Starting $DESC: " start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS || true echo "$NAME." ;; stop) echo -n "Stopping $DESC: " start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid --exec $DAEMON || true echo "$NAME." ;; restart|force-reload) echo -n "Restarting $DESC: " start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid --exec $DAEMON || true sleep 1 start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS || true echo "$NAME." ;; reload) echo -n "Reloading $DESC configuration: " start-stop-daemon --stop --signal HUP --quiet --pidfile /var/run/$NAME.pid --exec $DAEMON || true echo "$NAME." ;; *) N=/etc/init.d/$NAME echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2 exit 1 ;; esac exit 0
这两个脚本需要注意的是目录的定位,如果在编译阶段加入了目录设置的参数,那么你同时需要在这里修改定义。另外fast-cgi需要注意DAEMON_OPTS的参数设置。
这2个脚本都有一个同样的问题,就是无法正常停止服务。我虽然不太了解shell程序,但是根据我其他编程经验,两个脚本都是通过start-stop-daemon命令来开启和停止服务。但我使用的情况是可以正常开启,但无法正常关闭。所以我不得不写了一个简单的关闭并重启nginx服务的脚本,是通过直接kill进程来实现的。
cd ~ mkdir tools cd tools touch reset_nginx chmod +x reset_nginx
reset_nginx内容
sudo kill `cat /usr/local/nginx/logs/nginx.pid` sudo /etc/init.d/nginx start
但是fast-cgi的服务即使我kill进程并删除pid文件也无济于事,fast-cgi仍然照常运行……这有点不合逻辑,也许我操作错误,或者是权限问题。不过fast-cgi开启后一般也没有必要进行重启或其他操作,这个问题留待以后解决吧。或者有哪位同学知道的,请不吝赐教!
最后这2个脚本需要注册为系统服务,需要安装rcconf。
sudo apt-get install rcconf sudo rcconf
嗯,很怀旧的DOS操作界面……呵呵,大家选择2个脚本,再ok退出即可。
-
nginx站点配置
由于dreamhost的习惯,并且这个虚拟机还要放callaly的blog(http://callaly.net),所以nginx的站点我放到用户目录下去了。
cd ~ mkdir wwwroot cd wwwroot mkdir yourdomain.com
编辑/usr/local/nginx/conf/nginx.conf
user www-data; worker_processes 2; events { worker_connections 1024; use epoll; } http { include mime.types; default_type application/octet-stream; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; gzip on; #设置默认站点,禁止所有IP访问 server { listen 80 default; return 403; } #包含其他站点配置 include /usr/local/nginx/sites-enabled/*; }
创建站点文件
cd /usr/local/nginx sudo mkdir sites-available sudo mkdir sites-enabled sudo touch sites-available/yourdomain.com sudo ln -s sites-available/yourdomain.com sites-enabled/yourdomain.com
编辑sites-available/yourdomain.com
server { listen 80; server_name www.yourdomain.com yourdomain.com; access_log /home/myname/wwwroot/log/yourdomain.com.access.log; error_log /home/myname/wwwroot/log/yourdomain.com.error.log; location / { root /home/myname/wwwroot/yourdomain.com; index index.html index.htm index.php; # WordPress URL优化 if (-f $request_filename) { break; } if (-d $request_filename) { break; } # WordPress URL重写,如果你的wp目录不在根目录,请修改路径 rewrite ^(.+)$ /index.php?q=$1 last; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /home/myname/wwwroot/yourdomain.com$fastcgi_script_name; include /usr/local/nginx/conf/fastcgi_params; } #如果前面编译nginx时添加了with-http_stub_status_module参数 #就可以通过此设置访问yourdomain.com/status(名称自定)查看站点状态 location /status { stub_status on; access_log off; } }
nginx的站点配置基本ok
-
wordpress备份和恢复
需要把dreamhost主机上的内容迁移过来,可操作方法很多,最好在服务器端直接操作,速度更快。文件操作很简单不赘述,关于数据库的备份和恢复简单说下。
#导出 - 在原服务器 mysqldump -h old_host -p old_dbname -u old_dbuser >wp_bak.sql #登录mysql mysql -h new_host -u new_dbuser #创建新数据库,注意编码 create database 'new_dbname' default character set utf8 collate utf8_general_ci; #导入 - 确保备份sql文件在当前目录 use new_dbname; source wp_bak.sql;
至此整个站点配置已经基本完成,可以敲域名访问了。
这篇文章大部分内容来自于网上,我东拼西凑来的,特在此列出供大家参考。
Setup on Linode.com with ubuntu+nginx+php+fastcgi+mysql
我对Linux系统还处于初入门阶段,在配置安装Linode VPS的服务过程中学到了不少东西,了解了不少概念,特记之。
-
启用
Linode的网站设计非常简洁,一个粗略认识英文的同学都可以轻易申请搞定,就不需要再介绍了。
在选择服务器网络物理位置的时候,Linode提供了一个下载测试列表供大家测试,你可以选择访问速度最优的位置。网上其它同学很多选择Fremont,不过我测试下来(杭州ADSL4M)Newark最快,浏览器单线程下载速度稳定达到300K+,所以我选择了Newark。估计各地网络不同有所区别,大家选用建议自行测试。
系统我选择的是ubuntu(嗯,已经提供9.10Server了),主要是出于我对ubuntu桌面版的使用习惯和偏爱。网上很多说法是ubuntu服务器版不够专业,不过我本来也不太够专业,也不知道ubuntu哪里不够专业,呵呵,也就无所谓了。
-
环境基本配置
在web面板开启虚拟机以后,你就可以通过root用户和密码在客户端(推荐putty)登录。登陆后第一件事情,增加一个新账号(用你的常用名 例如myname)。
adduser myname visudo
在该文件中增加以下行
myname ALL=(ALL) ALL
此操作使myname用户可以使用sudo命令,如果要给其他账号提供sudo操作权限,类推。
ok,exit命令退出putty登录再重启,通过myname账号和你设置的密码重新登录系统。Linode默认提供的ubuntu的源缺少一些开发包,所以我们先编辑一下源。
sudo vi /etc/apt/source.list
我们需要做的仅仅是将文件中已经注释掉的几行源去掉前面的“#”,重新开启即可——不需要为具体的源担心,默认的已经飞速了。然后我们需要刷新一下
sudo apt-get update
我习惯使用vim,所以先安一个
sudo apt-get install vim
我们还需要一个中文UTF的本地环境,不过这得看情况,也许你不需要?
sudo locale-gen zh_CN.UTF-8 sudo /usr/sbin/update-locale LANG=zh_CN.UTF-8
将服务器时间设置为上海时间
sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
-
nginx+spawn-fastcgi+php+mysql
我们先来安一个编译包吧
sudo apt-get install build-essential
然后php和mysql安装最方便,直接从apt源安装即可
sudo apt-get -y install php5-common php5-mysql php5-sqlite php5-tidy php5-xmlrpc php5-xsl php5-cgi php5-mcrypt php5-curl php5-gd php5-memcache php5-mhash php5-pspell php5-sqlite libmagick9-dev php5-cli sudo apt-get install mysql-server mysql-client libmysqlclient15-dev
php的安装命令我是copy的,然后去掉了一些不必要的包,如果你觉得不必要也可以去掉,真正基本环境必须的只有php5 php5-cgi而已。mysql在安装过程中会让你设置root的密码,不要设置太简单了,也不要和系统root密码一样。
然后我们需要安装nginx
cd ~ mkdir source cd source wget http://sysoev.ru/nginx/nginx-0.7.64.tar.gz tar -zxvf nginx-0.7.64.tar.gz cd nginx-0.7.64 sudo apt-get install libssl-dev libpre3-dev zlib1g-dev ./configure --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --with-md5-asm --with-md5=/usr/include --with-sha1-asm --with-sha1=/usr/include --with-http_stub_status_module make sudo make install
在configure的时候可以定义很多参数,官方的参考文档在这里。我在网上看的相关的文章,定义了很多路径的参数,也许有什么特别的理由或习惯需要特别定义,我不太了解,所以我都去掉了,就用默认的路径就好。nginx默认的安装路径是/usr/local/nginx,其中包含了配置、基本的html页面、log、站点设置等。with-md5-asm和with-sha1-asm官方wiki说只建议使用一种,不过只用一种我无法通过编译,不知道问题所在。另外with-http_stub_status_module可以开通nginx内置的状态统计功能,建议都配置上,后面会开启该功能。
然后我们来安装spawn-fcgi,这是lighttpd的fastcgi管理器,目前已经是独立项目了,当前最新版本是1.6.3。
cd ~/source wget http://www.lighttpd.net/download/spawn-fcgi-1.6.3.tar.gz tar -zxvf spawn-fcgi-1.6.3.tar.gz cd spawn-fcgi-1.6.3 sudo ./configure && make && make install
………
做的事情不多,要写清楚真累,太长了,休息下,明天再整理。
linux! go go go !
想搞linux很久了,但是进度一直缓慢,基本上前一次看书掌握的内容已经快忘完了,所以基本上也可以说没有进度。
我觉得人在很多时候表现不自爱…你要好好的计划按步骤实施,到最后总是没有结果,非得要外部有很大的压力以后,才会屁颠屁颠的向前跑…
没办法,昨天一狠心…把windows2003格了,装上了FC5。
感觉界面上貌似pp了很多,和前几版相比,至少登陆界面改观较大。但是骨子里,linux仍然不是一个服务于最终用户的桌面操作系统,软件的操作总的来说两个字-“难用”…甚至一些软件压根用不了,例如“Add/Remove Soft”,软件的信息到15%左右就加载失败了,重复了n次。如果这是发生在windows上面,估计早就被骂死了…
倒是yum命令行工具用的蛮爽,但是对一般用户来讲,这是不可能接收的…
基于我以前和昨天的经验,总的来说,linux还是一个适用于开发人员的操作系统,要走向桌面还有很长的路……