<span style="background-color: rgb(255, 255, 255); font-family: Arial, Helvetica, sans-serif;">今天学东西比较综合,算是结尾再补充一下没有学习到的东西。
首先,什么是shell呢?
shell是一种脚本语言,第一次听到这个语言是从一些大神那里,一的当时有一个人在群里问信号处理的代码怎么写,有一个大神就反问你说的是c/c++还是shell,这是我第一次听到shell,没什么概念。这里我还是正经的说吧:我们在linux下敲得那些命令 ls -l 啊,cd .. 什么的,最终是要被linux内核解析的,但实际上linux是没法直接解析cp cd mv这种命令的,就好比你写的.java文件也不能被系统直接识别,也需要经过虚拟机解释成字节码文件。所以shell起到了这个作用:将命令解释成linux能执行的代码,传递到linux内核。</p><p>shell脚本其实和很多编程语言一样,有流程控制,变量定义。这里我不打算讲shell语法(我也不会),作为一个做J2EE的学生我是想用linux这个平台,从而来熟悉这个平台的许多东西,但不是专注于这个平台下的系统性的编程和开发(也许以后会也说不定所以为了当前学习的进度,总之shell语法有兴趣的同学买一本书研究研究吧)。
shell常用的有一下几种:
Bourne 命令名称: /bin/sh<span style="white-space:pre"> </span>
C 命令名称: /bin/csh
Kom<span style="white-space:pre"> </span>命令名称: /bin/ksh
命令 ls -l /bin/*sh 能够查看有多少shell 其中有->符号的表示是快捷方式,前有两个是一样的 。
命令 env 能够显示当前操作系统的环境变量 同时能够显示当前系统使用的shell。也可以改变当前使用的shell 命令:chsh -s 新的shell
我们可以自己新建一个后缀为.sh的文件,在里面写好我们要执行的脚本 比如我们的脚本文件叫run.sh,我们想在date.log文件中写入当前的时间,就可以在run.sh文件中写: date > date.log.然后用 sh run.sh 来执行。也可以用./run.sh这种方式,但是注意,新建的文件时没有可执行权限的,所以要用chmod 744 run.sh修改权限.
讲到shell脚本,就要说说系统的一些脚本文件,通过这些文件让大家加深一下对linux的认识。
/root/.bashrc root的开启启动脚本(可以利用这个文件来设置开机启动mysql)
/etc/bashrc 主要是基本配置数据(全局的开机启动配置脚本文件)
/root/bash_profile root的环境变量</p><p>/etc/profile 主要是配置环境变量
大家注意到了,这几个脚本在实际使用的时候都比较重要,比如你想设置开机启动服务什么的。还有一点,linux下有很多用户,有时候我们会有这样的需求:例如像让xxx用户登陆的时候自动启动tomcat服务,但是yyy不行。那么你看看你所有用户的根目录,ls -a,你会发现都有一个./bash_profile 文件,这个就是每个用户的环境变量文件,这些文件只针对这些用户能用,其他用户就用不了。(这里也能看出一个linux的一个特点,其实前面几个博客的很多细节也能说明,linux整体就是个文件系统,所有的东西都能看成是文件)只有etc目录下的环境变量等脚本文件才是全局的。
这里在介绍一些简单的shell语言吧。
1.如果我们想让一个脚本文件临时生效,那么需要用一个命令: export PATH=$PATH:/路径 就能让一个脚本文件临时生效.
2.如果有些命令太过于复杂,但是我们的使用频率又比较高,总是用history翻出来以前的命令也不太合理(比如mysql数据库的备份,命令就不短),我们可以将这个命令定义成一个比较短的命令,怎么讲?就好比JAVA里面的变量命名嘛。例如我想把 ls -l /home/xiaoming 这个命令简化为 lh 那就可以这么做: alias lh='ls -l /home'
在写这些脚本的时候请大家注意,凡是带 = 的地方,左右不要用空格(我写JAVA代码的时候都习惯加空格但是在写脚本的时候请不要这样,命令是错的)。
</span>
<span style="background-color: rgb(255, 255, 255); font-family: Arial, Helvetica, sans-serif;">
</span>
<span style="background-color: rgb(255, 255, 255); font-family: Arial, Helvetica, sans-serif;">下面说一下一个在windows下的远程桌面控制软件 XShell</span>
其实我看韩老师的视频用的是SSH,我下载了感觉很古老的样子,而XShell让我有种“黑客”的感觉。
这个工具最开始使用也就是这个寒假开始,我做了一个J2EE的聊天室然,租了一个服务器,想部署到服务器让大家都能使用,开始我以为是windows系统,结果发现是linux控制台的。其实主要问题是这个:我把项目部署到服务器,需要和服务器之间有联系才行,简单点说,最起码要能相互传输文件吧,要现在服务器上安装tomcat,JDK吧,我租的是阿里云服务器,Centos系统,进入官网那个命令行界面(那也是我第一次知道原来linux做服务器全都是黑色的控制台),简直了...... 敲命令快要疯了,而且不知道怎么上传文件,然后在网上搜到了这个软件(当然也有别的 putty啊,TimeViewer啊),所以这里顺便废话一下,有很多知识的学习和工具的使用还是源于自己的生活,也是我不得不要在Centos下部署工程,才会了这个工具,才去网上搜了无数遍linux下JDK安装,MySql安装还有错误处理等等。(以上文字有感而发,激励新手以及和我一样正在奋斗的同学,感觉太废话请见谅哈。)
选择文件->新建,出来这么一个界面
在主机那个位置写你linux系统的IP地址(咱先说好,你的linux必须要先能和你的windows ping通,否则连不上)。然后他会让你输入用户名,密码。写root用户就行了。我们就连接到了我们的linux。
怎么证明我们连进去了呢?来到我们linux环境,输入 netstat -anp 我们会发现有一行数据 ip地址就是我们虚拟机网卡地址,这个网络进程就是我们的机子,后面有一个PIDj进程号,我们也可以通过这个进程号将这个链接kill了,那我们用XShell登陆的那个界面也就会被弹出来了。
怎么进行文件传输呢?需要我们下载一个东西:Xftp 这个软件是用来传输文件的
打开后和那个Xshell差不多,输入用户名密码那些,然后你就能看到主机和服务器的文件信息了,通过拖拽就能实现文件传输。很简单吧。
工具的其他用法我知道的不多,就讲到这里,这个工具简直是做web开发的开发者的福音,因为一般做web开发的程序员还是希望使用IDE进行开发,而通常服务器都是控制台不含图形界面的,用vi编辑器开发项目对于大多数开发者来说确实比较累,因此我们可以在windows下用IDE将项目做好,然后发送到服务器,开服务跑就是了(我不敢说用vi编辑器开发不舒服简直不好,因为有很多大神级别的人从学习编程一直到做开发就用记事本这种工具,人家确实厉害,只不过我这种菜鸟达不到,用不好反而会浪费时间,所以随大家的爱好吧)。
最后说一个linux的启动过程的步骤的分析吧,我也不能说将这个步骤完全了解了,只能说知道这么回事儿,如果真的完全了解了linux启动过程就可以去做linux内核开发了。
从linux系统通电开机会有这么几个过程:
1.BIOS自检 检测硬件的基本设施,从哪里启动等等。
2.启动GRUB/LILO 进入系统的时候的那个图形界面,是个引导界面,引导作用
3.运行linux内核并检测硬件检查有没有外设,检测磁盘有没有坏道等等。在这个阶段能够检测电脑的硬件的出错位置。
4.运行系统的第一个进程init(所有进程的父进程)没有init进程是不会有其他进程的
5.init读取系统引导配置文件 /etc/inittab 中的信息进行初始化inittab文件里面有你设置的启动模式级别
6./etc/rc.d/rc.sysinit 系统初始化脚本这个脚本文件能够设置linux系统的许多配置,比如欢迎界面的设置,用户切换等等
7./etc/rc.d/rcX.d/[KS]* - 根据运行级别X来配置服务。终止以K打头的服务,启动以S开头的服务
8./etc/rc.d/rc.local 执行本地特殊服务
9.启动其他服务
这个笔记是我在视频记录的,也在网上查了一点。这部分信息其实和我之前的博客有重叠,比如那个init进程,这个进程既然是所有进程的父进程就肯定要在开机过程中先启动起来了;还有那个inittab文件,是我第一篇博客里面写的,这个文件里面记录了linux系统设置的启动模式,有关中启动模式请看我第一篇博客 http://blog.csdn.net/rpgmakervx/article/details/43883073 有关进程请看 :http://blog.csdn.net/rpgmakervx/article/details/43925007 还有前面那个用XShell做文件传输,要是还没有ping通,也可以看看我之前写的有关linux网络配置的博客:http://blog.csdn.net/rpgmakervx/article/details/43916261
经过5天linux学习我还是深有感触的,寒假的时间也不长,时间宝贵过年期间我也没闲着。之所以选择用接近一个周时间学习整理linux知识是因为做J2EE开发所使用的服务器环境大多都在linux下,况且做web开发,最终都是要学习网络知识的,学习网络知识则少不了linux环境,从最初排斥命令行控制环境,到现在欣然接受,也实属不易,虽然没有很大的成就,但是这段时间的学习让我也受益匪浅,让我不局限于只学习一门语言和一本开发框架,转而接触与其相关的平台。还有一个比较重要的原因是,去年暑假去面试实习(水平不够那时候连SSH框架都不会),人家HR特别提出了两个问题:会不会开发贪吃蛇游戏;会不会linux下的配置和操作。那时都不会,当时我十分羞愧,当即回去就搜集资料花了一天的时间做了一个贪吃蛇,唯独linux久久没有进行一个比较正式的学习,导致我放假之前的时候其实只会ls cd pwd这几个简单的命令。
说这么多,其实无非是想告诉自己也告诉大家:学习是需要一个动力的,或者需要一个值得你学习的理由的。否则这种学习对我们来说是无意义的。并不是所有学习对我们来说都是有收益的,就好比去年刚接触linux的时候十分抵触,因为不了解这个平台感觉今后就做windows平台开发不使用这个系统不就完了,结果面试碰上那么一茬,导致我有了学习的动力。
倒有点像写日志了,刚开始写博客没啥经验,感觉写得好的赞一下吧,不好的就提一提,别骂的太狠,嘿嘿。
明天我将开始学习hibernate(其实我想写一个mybaties的自学教程,但是愧对自己的技术水平mybaties也就学了个一知半解,写出来怕大家笑话),从明天开始博客将记录hibernate的学习过程。