Linux常用命令备忘录(更新ing)

常用命令

下面加粗的是一系列的命令,没加粗的是相关命令。

ls 显示当前目录文件

ll 、la 、l

cd 进入其他目录

cd 回家
cd ~ 回家
cd – 进入上一次进入过的目录,相当于后退
cd .. 进入上一层目录

grep 在输入的内容中搜索关键词

egrep

ln  创建链接

ln -s 软链接

vim的使用

vimtutor

find 查找文件

find . -name “abc.html”  递归查找当前目录下名为abc.html的文件

find . -name “abc.html” | xargs grep “2333” 递归查找当前目录下名为abc.html且文件内容含有2333的文件

netstat  查看当前网络状态

netstat -ano|grep 80  查看80端口的状态

ps 查看当前进程状态

ps -aux|grep java  查看当前运行的java进程

kill 结束进程

top 资源监视

tail 显示文件尾内容

tail -f /var/log/tomcat/catalina.out  监视tomcat的运行日志输出(远程调试用

cat 打印文件所有内容

su 切换用户

sudo 以其他身份执行

sudo -u abc def  以abc用户身份执行def命令

sudo xxx 以root身份执行xxx

service 控制服务状态

sudo service nginx reload  重新加载nginx配置

ssh相关

ssh user@hostname  以user登录hostname

scp user@hostname:/remote/file/path  /local/file/path  从远程向本地复制文件(夹)

scp /local/file/path user@hostname:/remote/file/path  从本地向远程复制文件(夹)

scp用-p来保持权限

ssh-keygen 生成新的ssh公钥和私钥

rsync相关

同步文件,scp不能同步软链接,而rsync可以,参考

http://blog.csdn.net/niushuai666/article/details/16880061

 

Ubuntu软件安装

sudo apt-get install apache2  安装apache软件

sudo apt-get purge apache2 删除apache2

sudo apt-get update 更新列表

sudo apt-get upgrade 升级所有软件

 

Apache多站点及反向代理配置

状态:只有一个服务器,需要多个站点,比如博客、文件、Android接口等。

最开始我的做法是用子文件夹来区分站点,所以本站的地址都是这样的http://hylstudio.cn/xxx

后来曾老师提醒可以使用下一级域名来区分不同的站点,于是研究了下。

首先,更改DNS,把需要的域名解析到这台服务器,然后更改apache配置如下

进入apache配置目录/etc/apache2其中目录结构如下
├── apache2.conf           主配置文件
├── conf-available         可用配置文件
├── conf-enabled           启用的配置文件
├── mods-available       可用的模块
├── mods-enabled         启用的模块
├── sites-available         可用的站点
└── sites-enabled           启用的站点

各个文件夹的功能如上,规则是在available中创建真实的配置、然后在enabled文件夹下创建软连接(ln -s命令)。

默认状态下sites-enabled下只有一个000-default,被我改成了999-default.conf,把内容改成下面这样

然后复制一份这个文件为001-wordpress.conf。内容如下

其他的同理,只需要更改ServerName、Alias、DocumentRoot即可。

需要说一下的是tomcat,因为tomcat在其他端口,需要做反向代理。内容如下

同时需要启用proxy模块
cd /etc/apache2/mods-enabled
sudo ln -s ../mods-available/proxy.load

这样做的好处是对外不暴露tomcat真实端口。

这样,就实现了通过不同域名访问不同站点。

配置default虚拟主机,rewrite含义为我没定义过的虚拟主机都会302重定向到blog.hylstudio.cn

Java Web总结

————————下面是废话,可以不看————————

好久都没有写博客了,搞定了Android和Linux实验报告后暂时可以稍微闲下来几天。这次我们来聊聊关于网站的一些故事,我大概从今年4月开始搭建校内中央认证系统(CAS),为的是集成社团内所有开源系统的登录过程,达到单点登录的效果。什么意思呢?就是像在网上一些站点见到的那样,可以通过其他方式登录,比如通过QQ登录,通过新浪微博登录什么的。

这个系统是基于Java Web实现的,支持多种认证协议和多语言版本的客户端,方便和其他系统做对接和集成。github地址:https://www.apereo.org/projects/cas  校内使用的版本是4.2.0,地址为https://cas.bistu.edu.cn

当然这次我并不是想聊CAS的,Java Web的课程已经接近了尾声,这个系列文章主要是总结下Java Web相关的一些东西。

————————上面是废话,可以不看————————

首先呢,我要慢慢介绍一些相关的技术,主要讲解动态网站的来龙去脉。。对,故事开始。

1.浏览器、网页、HTML

如果你学过Java,那么你肯定知道Java可以使用swing、JavaFX技术编写图形界面程序。

如果你学过C++ ,那么你肯定知道可以使用一些图形库或者win32的API来编写图形界面。

现在,有这么一种东西,不需要编译,不需要很长时间的学习就可以做出一个看得见的界面。就是HTML。

上面的这段内容就是一个最简单的HTML框架,把上面的内容复制到一个文件中,文件名改为xxx.html,用浏览器打开你就看到这样的效果。

(这里应该有张图,但是并没有23333自己试试是什么效果吧)

这样显示出来的界面就是一个HTML页面,也叫一个网页。把这个文件打开的程序就是浏览器。常见的浏览器有IE、Chrome、火狐等。你会发现,如果你用编辑器打开html文件,看到的就是纯文本,而浏览器可以把它显示成一个界面。浏览器的任务之一就是读取html文件中的内容,并把它显示成正常人能看懂的效果,记住浏览器的这个任务,之后还会有用。

2.CSS

css的翻译是层叠样式表,说的简单点就是负责描述html中元素的样式,比如颜色、边距啥的。大概长这样

选择器可以控制这些样式适用于什么元素,可以按标签名选取、按类选取等。。。不啰嗦了,总之就是这样。

3.Javascript

Javascript是一种脚本语言,由浏览器负责执行,这是浏览器的任务2。脚本的意思可以简单理解为一行行的执行。如果浏览器见到了<script>标签,就会去解析里面的js代码。如果这个标签在body中,当加载到脚本的时候会立即执行。

上面所说的内容都可以在任意网页按F12打开开发人员工具进行尝试。在开发工具部分可以看到当前页面所有html源文本,以及可以选择任意元素查看生效的css样式,并且可以在控制台指定js代码进行调试。

到此为止,前端基础技术就介绍完了。这些并不是本次的重点。

4.Web服务器

如果你照着上面说的做了,你会发现打开后地址栏显示的地址是file://开头的。这说明这个文件是存储在你的本地计算机中。而平时打开的网页开头都是http开头,怎么做到呢?你需要一个Web 服务器。

刚刚我们说过了,浏览器看到html文本就能显示成网页,如果html文本是从远程电脑发来的呢?浏览器可以通过http协议和远程服务器进行通讯,交换传输html文本。服务器你可以理解为一个远程的电脑,上面运行着一个特殊的程序,这个程序的任务是等待浏览器发送的http请求,找到浏览器想访问的html文件,然后把内容发给浏览器。这个特殊的程序就是Web服务器软件,运行着这种软件的服务器就可以叫Web服务器,有的时候Web服务器指的就是Web服务器软件,要看上下文语义来理解。常见的Web服务器软件有Apache、Nginx、Tomcat等。他们的作用是相似的。

1

在这里又要请出F12的开发工具了,点击网络标签开始监听后,可以看到浏览器发出的所有网络请求,点击请求可以看到请求的header、服务器回应的内容等信息,借助这个可以来看当前的请求是不是你想要的请求。

5.动态网站vs静态网站

很多的html页面通过超链接连起来后,就是一个简单的静态网站了。静态网站简单的来说就是不会动的网站,比如刚刚写的那个demo,无论请求多少次,内容都不会发生任何变化。即使你放入了Flash、gif等看起来“动”了的元素进去,也依然不是动态,因为服务器返回的html文本没有发生任何变化。

那么,如果服务器返回的结果不是直接从html文件取得的,而是服务器上另一个程序的执行结果,那么每次的结果就取决于这个程序的逻辑了。这样做出的网站就可以是动态网站,比如最简单的显示当前访问总次数的页面。

常见的动态网站有PHP、Java、Python等,需要的环境也各不相同,但是本质都是一样的,只要有程序能运行并生成结果是html格式,就可以实现动态网站。

 

6.Java Web

扯了这么多终于能回到正题了,Java号称跨平台是因为字节码的存在,不同的操作系统有不同的Java虚拟机来执行同样的字节码,也就是class文件。用Java做动态网站也就是要执行Java代码,负责执行Java代码并把结果返回给浏览器的程序就是Tomcat。

—————题外话—————

在实际的网站中,一般并不把Tomcat的8080端口直接暴露,而是通过nginx或者Apache反向代理访问。用户浏览器请求的依然是80端口,由反向代理再向Tomcat发出请求。效果如http://tomcat.hylstudio.cn。Apache配置如下:

—————题外话—————

7.Jsp、Servlet

如果把请求转发给Servlet,那么对应的Java代码就会被执行。带来的问题是:在Java代码中拼接html文本十分恶心,大概这样。

所以,我们设想,如果不自己写out.println让程序自动补上口不口以?当然口以,这就是jsp。在jsp里出现的html标签会自动转换成上面这样的代码,而出现在<%%>中间的内容不会加上out.println。这样就结束了么?显然没有,人们发现虽然jsp写界面很方便,但是写代码逻辑非常恶心,如果有多个ifelse套起来根本不是人看的玩意。

所以,一般来说,我们用jsp只负责显示,用Servlet负责处理业务逻辑,也就是MVC。整体思路是这样的,用户的请求只由Controller层的Servlet处理分发、View层的jsp负责显示、所有的数据都有Model层的JavaBean封装。这样分工后,Servlet和jsp各自的优势都发挥了出来。

8.套路

分层后可以发现,每层做的工作非常的单一并且规律性极强。人们再次做了抽象,把相同的部分写好,把需要变化的东西用xml表示,也就是用xml来填充一个Java代码中没写完的部分。这样就有了框架,比如常见的Spring。

同理在数据处理上也有套路,也就是DAO模式,定义负责数据访问的接口。好处是通过调用统一的接口来进行屏蔽掉数据访问的具体实现(不然我怎么可能把xml的实验代码用了四次23333)。

 

9.其他资料

本文并没有详细介绍每一个细节,其中提到的做法可能需要用到的知识如下。

正则表达式:http://deerchao.net/tutorials/regex/regex.htm

bootstrap的套用:http://v3.bootcss.com/getting-started/

spring框架的使用:http://spring.io/guides

CSS参考:http://www.runoob.com/css/css-intro.html

一个好玩的C语言程序

 

Linux笔记1(Linux运维、大数据相关工具)

Linux下好用的软件

智能终端fish:

http://fishshell.com/docs/current/index.html#introduction

多人协作、不间断运行的shell:tmux

https://tmux.github.io/

http://man.openbsd.org/OpenBSD-current/man1/tmux.1

 

http://blog.jobbole.com/87584/

 

自动化运维ansible

http://docs.ansible.com/

http://sofar.blog.51cto.com/353572/1579894/

 

多虚拟py环境vituralenv

http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001432712108300322c61f256c74803b43bfd65c6f8d0d0000

http://www.cnblogs.com/tk091/p/3700013.html

 

py包管理 pip

https://pypi.python.org/pypi/pip/

http://www.ttlsa.com/python/how-to-install-and-use-pip-ttlsa/

 

开源大数据工具luigi

http://luigi.readthedocs.io/en/stable/

http://www.oschina.net/p/luigi

http://www.open-open.com/lib/view/open1413337781090.html

 

【资源导航】

欢迎来到我的博客。

预告:最近即将更新的内容=-=

Skykoma系列

云端开发环境 https://github.com/dev-assistant/skykoma-workspace

IDE自动化 https://github.com/dev-assistant/skykoma-plugin-idea

服务器搭建系列

录屏 https://space.bilibili.com/7757632/channel/collectiondetail?sid=3917759&ctype=0

文章 https://blog.hylstudio.cn/archives/category/fuwuqi

MDSE实践计划系列

尝试完成部分半自动化的开发流程,部分可投入生产

20210828.近期动态分享:MDSE实践计划及过程记录

20211023.Web后端参数检查的通用代码生成设计与实现

其他已填flag

1.数据结构 https://github.com/956237586/DataStructure-C
2.从零实现Web服务器:包含从Socket层实现部分HTTP协议,手动实现模板引擎、路由等功能。视频已发布,仅作原理性说明,未做工程化重构 https://www.bilibili.com/video/BV18h41147b8/
3.C语言教程

C语言系列基础教程(传统讲法) http://blog.hylstudio.cn/archives/174

2020年版本(井字棋) https://blog.hylstudio.cn/archives/746