linux应用与配置 - CSDN
  • Tomcat在Linux上的安装与配置  以下使用的Linux版本为: Redhat Enterprise Linux 7.0 x86_64,Tomcat版本为tomcat-7.0.54. 1.下载JDKTomcat.  jdk下载地址:  ...

    Tomcat在Linux上的安装与配置



        以下使用的Linux版本为: Redhat Enterprise Linux 7.0 x86_64,Tomcat版本为tomcat-7.0.54.


    1.下载JDK与Tomcat.
        jdk下载地址:
        http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
        tomcat下载地址:
        http://tomcat.apache.org/download-70.cgi


    2.jdk安装与配置.
        (1)jdk安装
        rpm包:
        # rpm -ivh jdk-7u55-linux-x64.rpm


        tar.gz包:解压缩
        # mkdir /usr/java
        # cd /usr/java
        # tar -zxvf /software/jdk-7u55-linux-x64.tar.gz
        生成链接以便版本升级
        # ln -s jdk1.7.0_55 latest
        # ln -s latest default


        (2)配置环境变量
        # vi /etc/profile
        export JAVA_HOME=/usr/java/default
        export JAVA_BIN=$JAVA_HOME/bin
        export PATH=$PATH:$JAVA_HOME/bin
        export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
        export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH


        使配置生效
        # source /etc/profile


        测试jdk.
        # java -version
        java version "1.7.0_55"
        Java(TM) SE Runtime Environment (build 1.7.0_55-b13)
        Java HotSpot(TM) 64-Bit Server VM (build 24.55-b03, mixed mode)


    3.Tomcat的安装
        解压缩
        # mkdir /usr/local/tomcat
        # cd /usr/local/tomcat
        # tar -zxvf /software/apache-tomcat-7.0.54.tar.gz
        生成链接以便版本升级
        # ln -s apache-tomcat-7.0.54 server


        启动Tomcat
        # cd /usr/local/tomcat/server/bin
        # ./startup.sh
        Using CATALINA_BASE: /usr/local/tomcat/server
        Using CATALINA_HOME: /usr/local/tomcat/server
        Using CATALINA_TEMDIR: /usr/local/tomcat/server/temp
        Using JRE_HOME: /usr/java/default
        Using CLASS_PATH: /usr/local/tomcat/server/bin/bootstrap.jar:/usr/local/tomcat/server/bin/tomcat-juli.jar
        Tomcat started.


        测试Tomcat:
        打开防火墙,使外部能访问
        # /sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
        # service iptables save
        # service iptables restart
        或直接修改文件/etc/sysconfig/iptables.
        # vi /etc/sysconfig/iptables
        -A INPUT -p tcp -m tcp --dport 8080 -j ACCEPT
        # service iptables restart
        在浏览器输入: http://192.168.16.133:8080
        如在本机可以输入: http://localhost:8080
        出现tomcat的页面表示安装成功.


        停止Tomcat
        # ./shutdown.sh


    4.配置web管理帐号
       修改文件conf/tomcat-users.xml,在<tomcat-users>元素中添加帐号密码,需要指定角色.
       # vi /usr/local/tomcat/server/conf/tomcat-users.xml
         <tomcat-users>
           <user name="admin" password="admin" roles="admin-gui,manager-gui" />
         </tomcat-users>


    5.配置web访问端口
       可以修改conf目录下的文件server.xml,修改Connector元素(Tomcat的默认端口是8080),需要重新启动Tomcat服务生效.
       # vi /usr/local/tomcat/server/conf/server.xml
       <Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> 


    6.配置https安全连接(ssl加密连接)
       https连接需要用到数字证书与数字签名(MD5算法)
       网站https连接首先需要申请数字证书,配置加密连接器,浏览器安装证书.
       ·使用java的工具keytool产生数字证书
         # keytool -genkey -alias tomcat -keyalg RSA
         生成文件.keystore
         注意:CN为主机名称,本机可用localhost
       ·将文件.keystore放到Tomcat服务器的conf目录下
         # cp .keystore /usr/local/tomcat/server/conf/
       ·修改conf/server.xml文件,修改加密连接器,添加keystoreFile与keystorePass
        <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
                   maxThreads="150" scheme="https" secure="true"
                   clientAuth="false" sslProtocol="TLS" 
                   keystoreFile="conf/.keystore" keystorePass="123456"/>    
       ·重新启动tomcat.浏览器输入https://localhost:8443访问,并安装证书.


    7.Tomcat的目录结构
       ·bin     //存放Tomcat的命令脚本文件
       ·conf    //存放Tomcat服务器的各种配置文件,最主要是server.xml
       ·lib     //存放Tomcat服务器支撑jar包
       ·logs    //存放日志文件
       ·temp    //存放临时文件
       ·webapps //web应用所在目录,外界访问web资源的存放目录
       ·work    //Tomcat的工作目录


    8.web应用的目录结构
       webapp                           -- web应用所在目录
         |--- html, jsp, css, js文件等  -- 这些文件一般在web应用根目录下,根目录下的文件外界可以直接访问.
         |--- WEB-INF 目录              -- java类、jar包、web配置文件存在这个目录下,外界无法直接访问,由web服务器负责调用.
               |--- classes 目录        -- java类
               |--- lib 目录            -- java类运行所需要的jar包
               |--- web.xml 文件        -- web应用的配置文件


    9.虚拟主机的配置
       指定虚拟主机名,修改conf/server.xml,添加<host>元素.
       <host name="hostname.domainname" appBase="/webapps">
         <Context path="/webapp" docBase="/webapps/webapp"/>
       </host>
       例:
       <host name="www.163.com" appBase="/webapps">
       </host>
       <host name="mail.163.com" appBase="/mailapps">
       </host>
       须设置DNS解析(host文件或DNS系统).




    10.web应用和虚拟目录的映射.
       可以修改xml配置文件的<Context>元素来设置web应用和虚拟目录的映射.
       ·conf/server.xml         //在<host>元素下添加<Context path="/webdir" docBase="/webappdir"/>,需要重新启动Tomcat服务生效,不建议使用.
       ·conf/context.xml        //添加<Context>元素所有web应用有效.
       ·conf/[enginename]/[hostname]/context.xml.default  //[enginename]一般是Catalina,主机[hostname]的所有web应用有效.
       ·conf/[enginename]/[hostname]/   //在目录下任意建一个文件(扩展名xml),文件名即为虚拟目录名.多级目录使用#分割. <Context docBase="/webappdir"/>
                                         //缺省值web应用目录可以定义为ROOT.xml,添加<Context docBase="/webappdir"/>,需重新启动Tomcat服务器.
       ·META-INF/context.xml    //
       可以将web应用放在webapps目录下让Tomcat服务器自动映射,适用开发环境,实际运用环境中不用自动映射。
       如没有修改配置文件,web应用目录为ROOT时则为默认web应用。


    11.web应用首页(welcome file)的配置
       修改web应用的配置文件: [webapp]/WEB-INF/web.xml
        <welcome-file-list>
           <welcome-file>index.html</welcome-file>
           <welcome-file>index.htm</welcome-file>
           <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>



    展开全文
  • 系统版本:centos6.5版本 java版本:1.7一、准备工作1、java -version 检查是否有java环境,没有则需要去安装并配置到环境变量中。2、下载tomcat包,下载地址:http://tomcat.apache.org/download-70.cgi可以本地...

    系统版本:centos6.5版本 java版本:1.7

    一、准备工作

    1、java -version 检查是否有java环境,没有则需要去安装并配置到环境变量中。
    2、下载tomcat包,下载地址:http://tomcat.apache.org/download-70.cgi
    可以本地下载后上传到服务器上,也可以直接在服务器上使用wget命令下载,本案例直接使用wget命令下载 :

    [root@localhost ~]# wget http://apache.fayea.com/tomcat/tomcat-7/v7.0.77/bin/apache-tomcat-7.0.77.tar.gz

    ~

    二、安装Tomcat

    1、新建tomcat存放的目录

    [root@localhost ~]# mkdir /usr/local/tomcat

    2、拷贝下载好的 apache-tomcat-7.0.77.tar.gz 到 tomcat目录下

    [root@localhost ~]# cp apache-tomcat-7.0.77.tar.gz /usr/local/tomcat/

    3、进入tomcat目录,并解压apache-tomcat-7.0.77.tar.gz

    [root@localhost ~]# cd /usr/local/tomcat/
    
    [root@localhost tomcat]# tar -zxvf apache-tomcat-7.0.77.tar.gz

    4、进入解压的tomcat包的bin目录,并启动tomcat

    [root@localhost tomcat]# cd /usr/local/tomcat/apache-tomcat-7.0.77/bin/
    
    [root@localhost bin]# ./catalina.sh start
    
    或:[root@localhost bin]# ./startup.sh
    注: ./catalina.sh start 和 ./startup.sh 都能启动tomcat。使用 ./catalina.sh stop 或 ./shutdown.sh 停止tomcat。

    5、浏览器访问并解决防火墙问题。

    在浏览器使用ip进行访问(端口默认:8080),http://192.168.0.111:8080,可以看到tomcat的管理界面。
    192.168.0.111 为服务器的ip地址,如果访问不了,有可能是服务器防火墙问题,8080端口被拦截了,于是需要打开8080端口,并保存重启防火墙:
    [root@localhost bin]# iptables  -I  INPUT  -p  tcp  --dport  8080  -j  ACCEPT  
    
    [root@localhost bin]# /etc/init.d/iptables  save
    
    [root@localhost bin]# /etc/init.d/iptables  restart
    在server.xml配置中可以修改访问端口,

    6、配置 tomcat 帐号密码权限(登陆使用Web管理界面)

    修改tomcat下的配置文件 tomcat-users.xml
    [root@localhost ~]# vim /usr/local/tomcat/apache-tomcat-7.0.77/conf/tomcat-users.xml
    在前添加以下代码:
    <role rolename="tomcat"/>
    <role rolename="manager-gui"/>
    <role rolename="admin-gui"/>
    <role rolename="manager-script"/>
    <role rolename="admin-script"/>
    <user username="tomcat" password="tomcat" roles="tomcat,manager-gui,admin-gui,admin-script,manager-script"/>
    注:username 和 password 则是登陆tomcat管理界面需要的账号密码。
    :wq 保存退出,重启tomcat
    浏览器访问:http://192.168.0.111:8080

    image

    可以通过 Manager App 管理已部署的项目。
    点击进入 Manager App 需要账号密码,上面有设置。

    ~

    三、Tomcat配置服务和自启动

    1、Tomcat配置服务

    新建服务脚本:
    [root@localhost ~]# vim /etc/init.d/tomcat
    添加脚本内容:
    #!/bin/bash
    # description: Tomcat7 Start Stop Restart
    # processname: tomcat7
    # chkconfig: 234 20 80
    
    CATALINA_HOME=/usr/local/tomcat/apache-tomcat-7.0.77
    
    case $1 in
            start)
                    sh $CATALINA_HOME/bin/startup.sh
                    ;;
            stop)
                    sh $CATALINA_HOME/bin/shutdown.sh
                    ;;
            restart)
                    sh $CATALINA_HOME/bin/shutdown.sh
                    sh $CATALINA_HOME/bin/startup.sh
                    ;;
            *)
                    echo 'please use : tomcat {start | stop | restart}'
            ;;
    esac
    exit 0
    :wq 保存脚本。
    执行脚本,启动、停止 和 重启服务。
    启动:service tomcat start
    停止:service tomcat stop
    重启:service tomcat restart

    2、Tomcat配置开机自启动

    向chkconfig添加 tomcat 服务的管理
    [root@localhost ~]# chkconfig --add tomcat
    设置tomcat服务自启动
    [root@localhost ~]# chkconfig tomcat on
    查看tomcat的启动状态
    [root@localhost ~]# chkconfig --list | grep tomcat
    状态如下:
    [root@localhost ~]# chkconfig –list | grep tomcat
    tomcat 0:off 1:off 2:on 3:on 4:on 5:on 6:off
    关闭tomcat服务自启动:chkconfig tomcat off
    删除tomcat服务在chkconfig上的管理:chkconfig –del tomcat

    ~

    四、部署web项目(三种方式)

    1、第一种方式 : 部署项目到webapps(不推荐)

    进入tomcat下的webapps目录,并新建一个目录为web项目的主目录。
    [root@localhost ~]# cd /usr/local/tomcat/apache-tomcat-7.0.77/webapps
    
    [root@localhost webapps]# mkdir sam
    
    [root@localhost webapps]# ls
    docs  examples  host-manager  manager  ROOT  sam
    sam 目录为项目的目录,现在把web项目打包出来的war拷贝并解压到sam目录下。
    这里我直接用最简答的 index.html 来代替web项目war包作测试。
    [root@localhost sam]# ls
    index.html
    浏览器访问:http://192.168.0.111:8080/sam/index.html 既可访问到sam目录下的index.html
    这种方式不被推荐,项目不好管理,而且需要链接加上项目名才能正常访问。

    2、第二种方式:修改server.xml文件,配置虚拟主机

    修改tomcat conf下的server.xml配置
    [root@localhost conf]# vim server.xml 
    在Engine节点内添加 Host节点
    <Host name="www.sam.com">
          <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                 prefix="www.sam.com_access_log." suffix=".txt"
                 pattern="%h %l %u %t "%r" %s %b" />
          <Context path="" docBase="/home/sam/site/com.sam.www" />
    </Host>
    name=”www.sam.com”:指访问的域名,所以需要你先拥有 sam.com 这个域名,并把 www.sam.com 映射到当前服务器上才能正常访问,本地测试可以通过修改本机host文件来做映射测试。
    :value里面配置了log日志的相关信息
    :path 配置了访问的路径,docBase指向项目的真实路径,这里我在主目录下新建了site目录专门存放web项目,com.sam.www为其中我的一个项目,这个目录也是该项目的根目录,所以你只需要把war包解压到该根目录下,再重启tomcat 就能正常访问了。
    浏览器访问:http://www.sam.com:8080 能访问到 /home/sam/site/com.sam.www 下的项目。
    注:www.sam.com为我个人域名,你需要自行注册域名,并做相应的ip映射。如果仅是本地测试,可以修改本机的host文件,添加记录:192.168.0.111 www.sam.com ,将web.sam.com的访问映射到192.168.0.111这台服务器中。

    3、第三种方式:修改server.xml和Catalina,配置虚拟主机。

    这种方式,我用 web.sam.com 这个项目为例。
    修改tomcat conf下的server.xml配置
     [root@localhost conf]# vim server.xml 
    在Engine节点内添加 简单的Host节点,:wq 保存退出
    <Host name="web.sam.com"></Host>
    进入tomcat conf下的Catalina目录
    [root@localhost conf]# cd /usr/local/tomcat/apache-tomcat-7.0.77/conf/Catalina
    新建目录 web.sam.com (与server.xml中配置的host名称一样)
    [root@localhost Catalina]# mkdir web.sam.com
    进入web.sam.com目录并新建ROOT.xml文件,添加相应的配置内容。
    [root@localhost Catalina]# cd web.sam.com/
    [root@localhost web.sam.com]# vim ROOT.xml
    ROOT.xml 文件添加以下内容:
    <?xml version="1.0" encoding="UTF-8"?>
    <Context path="" docBase="/home/sam/site/com.sam.web" >
    
            <Valve className="org.apache.catalina.valves.AccessLogValve"
                    directory="logs/com.sam.web"
                    prefix="web.sam.com_localhost_access_log." suffix=".txt"
                    resolveHosts="true"    
                    pattern="%h %l %u %t "%r" %s %b" />
    
    </Context>

    ###### :wq保存退出。

    ###### 同样,新建项目目录 /home/sam/site/com.sam.web ,并把war包解压到该目录下,重启tomcat。

    ###### 浏览器访问:http://web.sam.com:8080,此时就会访问到web.sam.com这个项目的内容,而不是 www.sam.com的内容。

    ###### 当然,需要在sam.com域名管理中添加 web.sam.com域名映射,或者本地测试需要修改本机host文件,添加记录 :192.168.0.111 web.sam.com ,将web.sam.com的访问映射到192.168.0.111这台服务器中。

    #### ~

    五、配置静态资源访问,配置目录位置的网络映射

    配置后,可以直接访问到本地资源文件,而不需要访问到具体项目。

    1、针对第二种部署方式的配置(以 www.sam.com 项目为例)

    修改tomcat conf下的server.xml配置
     [root@localhost conf]# vim server.xml 
    在 配置中多添加 Context节点,如:
    <Host name="www.sam.com">
          <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                           prefix="www.sam.com_access_log." suffix=".txt"
                           pattern="%h %l %u %t "%r" %s %b" />
          <Context path="" docBase="/home/sam/site/com.sam.www" />
          <Context path="/upload" docBase="/home/sam/share/upload" />
    </Host>
    在 /home/sam/share/upload 存放共享资源 a.jpg
    浏览器访问:http://www.sam.com:8080/upload/a.jpg ,即可获取到该资源。
    说明:
    以上配置后,会把www.sam.com域名下的所有 http://www.sam.com:8080/upload 请求拦截,并直接从/home/sam/share/upload 共享目录下寻求对应的资源文件。
    如访问:http://www.sam.com:8080/upload/a/b.txt , 该请求直接从/home/sam/share/upload目录下寻找a目录,并寻找a目录下的b.txt,然后直接把该资源返回。
    于是我们只要把共享资源存放在配置的共享目录中,就能通过域名直接访问相应的资源。

    2、针对第三种部署方式的配置(以 web.sam.com 项目为例)

    修改Catalina目录下对应的项目目录里面的内容。
    进入Catalina 下的 web.sam.com 目录
    [root@localhost conf]# cd /usr/local/tomcat/apache-tomcat-7.0.77/conf/Catalina/web.sam.com
    新建文件 upload.xml
    [root@localhost web.sam.com]# vim upload.xml
    添加内容:
    <?xml version="1.0" encoding="UTF-8"?>
    <Context path="/upload" docBase="/home/sam/share/upload" >
            <Valve className="org.apache.catalina.valves.AccessLogValve"
            directory="logs/com.sam.web_upload"
            prefix="web.sam.com_upload_localhost_access_log." suffix=".txt"
            resolveHosts="true"
            pattern="%h %l %u %t "%r" %s %b" />
    </Context>
    :wq 保存推出,重启tomcat。
    在 /home/sam/share/upload 存放共享资源 a.jpg
    浏览器访问:http://www.sam.com:8080/upload/a.jpg ,即可获取到该资源。

     个人开源中国博客:https://my.oschina.net/magicalSam
    【版权声明:本文为博主原创文章,若需转载,请注明出处。】

    展开全文
  • 接触过Linux的朋友们都知道,linux内部的时间分为系统时间和硬件时间。系统时间一般是在系统启动时读一下RTC,然后就依靠定时器维护的时间,这个时间的是掉电不保存的。而 硬件时间通常指的就是RTC,只要RTC有电池...

    接触过Linux的朋友们都知道,linux内部的时间分为系统时间和硬件时间。系统时间一般是在系统启动时读一下RTC,然后就依靠定时器维护的时间,这个时间的是掉电不保存的。而 硬件时间通常指的就是RTC,只要RTC有电池供电,这个时间是可以掉电保存的。

    系统时间在应用程序中,可以用gettimeofday() / setttimeofday() 读取和设置。
    硬件时间在终端中可以通过如下命令设置:
    date -s 2017.05.16-17:07:13
    hwclock -w

    但是,在应用程序中改如何设置硬件时间呢?这里可以有两种方法:

    1.通过子线程调用设置时间脚本,在脚本中执行上述的命令。这里不具体分析。
    2.通过/dev/rtc 设置,打开/dev/rtc,我们可以对齐进行 读时间-RTC_RD_TIME,设置时间-RTC_SET_TIME等操作。

    void setlocaltime(_local_time *tim)
    {
        int fd_t;
        struct rtc_time dt;
        struct timeval tv;
        struct timezone tz;
        struct tm tm;
    
        /***set hardware RTC time 此处打开/dev/rtc***/
    
        fd_t=open("/dev/rtc",O_RDWR);
        if(fd_t<0)
            perror("open rtc");
    
        /*** 将本地时间格式转换为rtc_time ***/
        dt.tm_sec = tim->sec;
        dt.tm_min = tim->min;
        dt.tm_hour = tim->hour;
        dt.tm_mday = tim->day;
        dt.tm_mon = tim->month-1;
        dt.tm_year = tim->year+100;
    
        /*** 执行RTC_SET_TIME的操作,时间写入RTC,可以掉电保存***/
        if(ioctl(fd_t,RTC_SET_TIME,&dt)<0)
            perror("ioctl set time");
    
        /***set system time 同步更新系统时间***/
        gettimeofday(&tv,&tz);
    
        tm.tm_sec = dt.tm_sec;
        tm.tm_min = dt.tm_min;
        tm.tm_hour = dt.tm_hour;
        tm.tm_mday = dt.tm_mday;
        tm.tm_mon = dt.tm_mon;
        tm.tm_year = dt.tm_year;
    
        tv.tv_sec = mktime(&tm);
    
        settimeofday(&tv,&tz);
    
        close(fd_t);
    
    }

    通过上面的函数,可以实现RTC硬件时间的设置,并同时更新系统时间。

    展开全文
  • 在 「关于我 」那篇博文里,朋友们应该知道了我不是科班出身,是由机械强行转行到Linux应用开发方向。下面我就详细向大家介绍自己这一路上的转行历程,希望对大家有所启发。   我是学机械专业的,对于机械专业我...

     

    前言

     

     

     

     

    在 「关于我 」那篇博文里,朋友们应该知道了我不是科班出身,是由机械强行转行到Linux应用开发方向。下面我就详细向大家介绍自己这一路上的转行历程,希望对大家有所启发。

     

    我是学机械专业的,对于机械专业我还是很感兴趣,而且当年这个专业也是我自己选择的。本科时成绩没排第一,但也排专业前列。硕士时成绩一直是专业第一,还拿过国家奖学金。由此可见,我还是挺热爱机械的,考研时甚至还想去中科院深造(可惜落榜了),想成为一名机械砖家。

     

     

    转折点

     

     

     

    但转机在我毕业之后。本来我就想一直踏踏实实的做机械,但阴差阳错的,第一份工作由机械工程师调剂到电子工程师。虽然是电子工程师,但做了很多代码工作,那时候学了一些Verilog,以及C#,并且用C#开发了一个测试工具及一个生产用的上位机,据说那个测试工具现在还在电子部门使用。也就是那时,我真正接触到了编程,并深深的被编程世界所着迷。

     

    可是,我在学校学的是机械啊,跟软件相关的东西顶多是C语言及汇编语言,但C语言是十年前(那时候)学的,早就还给老师了。因此,为了工作的需要,我硬着头皮开始学习编程。我每天早上6点起床,学习一个小时后7点去赶班车,晚上下班回来再继续学习。在这样的条件下我学会了Verilog及C#,同时对STM32有个大概的了解。

     

    但那个岗位毕竟不是完全做软件工作,还需要做电子方面的工作。做软件的都知道,写代码的时候需要一个不被打扰的环境,而我那个岗位,一天可以接到十几个电话,严重干扰我的软件开发进度,因此,我决定离开公司,去做真正的软件工程师。

     

     

    入门

     

     

     

    第二份工作,我是嵌入式工程师。在去公司之前,我系统的学了一遍51,看的是 「郭天祥十天学会51单片机」,对单片机有个初步的入门。真正入职后,再利用一个月的时间系统学习一遍C语言,看的是C语言之父写的 「C程序设计语言」。这本书虽然写于80年代,但现在看来依然不过时。而且这本书比较薄,容易看完,比较有成就感。

     

    看完 「C程序设计语言」之后,最好再看 「C和指针」 ,「C专家编程」,「C陷阱与缺陷」。这三本书号称「C语言三剑客」 ,学完它们你的C语言水平绝对是非常之高了。做我们这行,C语言是基础语言,一定要把C语言完全拿下。

     

    之后为了工作的需要,开始接触了Marvell 88MC200及88MW300。这两款是WIFI芯片,但本质是单片机,采用的是ARM M3内核。底层驱动已经由厂家写好了,我们要做的工作就是在SDK基础上做应用做二次开发。在这个过程中,我对敏捷开发有了初步的认识,看了 「高效程序员的45个习惯:敏捷开发修炼之道」这本书。

     

    在第二家公司里,我知道了物联网的整体解决方案,对于物联网的整体框架有了更深入的了解。同时对嵌入式开发所需的技能有了全面的掌握,达到能够独立做一个物联网项目的水平。当然,期间还学会了版本控制工具git,看的是 「Pro Git」及 「git权威指南」。同时再进一步系统学习了STM32,看的书是野火的 「STM32库开发实战指南」,但看的视频却是正点原子的。这里强烈推荐正点原子的视频,真的是做的非常好。

     

    由于我是转行,我自知底子薄,起点比别人落后很多,因此我很刻苦学习。我就住在公司附近,公司8点上班,我依然6点起床,12点睡觉。平时没事的时候就在公司学习,看代码,写代码,调代码,甚至好几个周末也是在公司度过。为了转行我一心扑在了学习上,放弃了一切娱乐活动,只为能赶上同事一点半点。这个状态一直持续了我在这个公司的整个过程。

     

     

    新挑战

     

     

     

    可惜,一年之后我不得不离开了,因为我老婆在广州,我去广州追随我老婆了。由于我面试时的不错表现,以及我不错的英语口语,我顺利的被广州一家外资世界500强录用。我的新岗位是Linux应用开发工程师,使用C++开发。而在那时,我既不会Linux,也不会C++,所以公司敢录用我真的是勇气可嘉。

     

    从单片机到Linux又是一个比较大的跨度。Linux主要有三个方向:运维、应用、底层,而我选择的是应用方向。为了工作的需要,我必须先拿下C++。好在公司是外企,几乎不加班,于是我有充足的时间学习。可是,每天坐班车的时间加起来有三个小时,这么好的时间我不能浪费啊,于是,我买了个iPad,下载一套视频,在班车上也进行学习。当然,我也注意保护眼睛,在班车上绝不看书,看视频的时候也经常往窗外看看。

     

    这里讲讲自学过程中是采用看书还是看视频的方式。我采用的是先看视频再看书的方式。为什么要这样?因为我个人觉得,很多技术书都是很厚的一本,自己看下来要花费很多时间精力,而且很多知识点在工作中很少会用到,可以暂时先略过的。视频一般会比较短,一般是几天就能看完,而且老师一般只挑重点的讲。我们时间都很宝贵,我建议先把老师讲的知识完全掌握了以后,再利用书籍进一步扩展其它知识。但是,不管是看书还是看视频,一定要写代码,一定要写代码,一定要写代码,否则非常容易造成眼高手低!!

     

    我这家公司里我依然保持着早上6点起床,晚上11点睡觉的习惯。这样早上有1个小时,晚上3个小时,班车上3个小时,一天总共有7个小时可以用于学习。而周末我会睡个懒觉,7点起床,依然11点睡觉,周末几乎不出门,所以周末又有大量的时间可以用来学习。

     

    C++实在是太难了,我用了一个多月才将视频里的知识完全拿下来。之后,在工作中,陆续开始看「C++ Primer」 进一步巩固。其它书籍推荐:「Effective C++」,「C++语言的设计与演化」,「C++ 标准程序库」。在stackoverflow上有个C++必读书单,可以去看看。

     

    学完C++我再学习了Linux系统编程,同样采用的是先视频后书籍的方式进行。不管是视频还是书籍,一定要看最经典的。市面上有太多良莠不齐的视频和书籍,如果选择了一个质量不好的材料来看,不仅会浪费很多时间,而且有可能还会被误导。对于视频的选择,可以去各大培训机构,里面通常有一些免费视频资料供我们下载。

     

    对于Linux应用的学习,主要有六部分:1. 环境搭建;2. 基本操作;3. 系统编程;4. 网络编程;5. 数据库编程,6. Shell编程。下面一一详细介绍。

     

    1. 环境搭建

    作为Linux工程师,毋庸置疑一定需要Linux环境。对于Linux环境的获取,我们通常有两种方式:

    • 将电脑整体安装为Linux系统;

    • 在电脑里安装一个虚拟机,跑Linux电脑;

    • Window+Linux双系统。

    得到Linux环境后还不够,还要知道如何配置、如何远程连接Linux电脑、如何与Linux电脑互传文件、如何在主机上阅读Linux电脑中的代码,等等。

     

    2. 基本操作

    众所周知,Linux很少或几乎没有界面,所有的操作几乎都可以通过命令行来完成。对于运维人员来说,需要掌握相当大量的Linux命令。而对于应用、驱动方向的人员来说,只需掌握一些基本的常用的命令即可。对于这部分很多人建议看 「鸟哥的私房菜」 ,但我觉得这个更适合运维人员,我们无需掌握那么多命令。

     

    3. 系统编程

    在学系统编程之前,一定要先学习Makefile,这会为后续的学习提高很大效率。之后的系统编程,主要有几大块:IO编程、进程、线程、进程间通讯(包括管道、信号、信号量、共享内存等)。这几部分学完了,基本也就差不多了。

     

    4. 网络编程

    网络编程主要就是socket,poll,epoll,以及对TCP/IP的理解,同时要学会高并发式服务器的编写。

     

    5. 数据库编程

    数据库的内容其实并不属于Linux,但在项目中经常要用到。这部分主要要学会数据库的基本操作,以及如何写一套接口去操作数据库。

     

    6. Shell编程

    Shell是Linux下的脚本语言,功能虽然不如高级语言强大,但它可能做很多事,在某些场合甚至比高级语言要方便得多。当然除了Shell脚本,还有Python脚本。

     

    Linux应用编程书籍推荐:

    • UNIX环境高级编程。简称APUE,号称程序员的圣经。它不是一本API字典,它还讲述了很多操作系统的细节,内存,文件系统等方面,是一本难得的好书。但是它起点有点高,不适合初学者。

    • Linux程序设计。如果觉得APUE有点难入门的话,可以选择此书进行入门。

    • Unix/Linux系统编程手册。这本书号称是一本超越APUE的书,它是一本比较新的书,里面新增了APUE所没有的Linux/Unix新特性。而且对于一些概念性的东西讲的确实比APUE好。但至于能否超载APUE,还有待历史的考验。

    • UNIX 网络编程。也是一本非常经典的书,主要是网络编程方向的。

    • MySQL必知必会。本书在Amazon上长期排在数据库销售榜首,建议想快速了解数据库原理和MySQL的新手阅读。快餐性质,简洁明快,小开本,而且很薄,比较好阅读。

    • Linux Shell脚本攻略。这本书很薄很精华,它追求的不是全,而是精,所以用它来入门再适合不过了。

     

    学完以上六部分,基本就有能力完成Linux环境下的应用编程了。当然,在有些场合我们可能还需要用到Python脚本。像我公司的项目部分脚本就是用Python完成的。对于Python的入门,可以参考 「简明Python教程」。但如果想进一步提高的话,那就需要阅读大量书籍了。对于Linux层级的脚本应用,掌握一些基础的足够了。

     

    以上就是我的Linux应用开发自学之路,虽然我离高手还有很长的距离,但我还是将自己的这段自学经历分享出来,希望能够帮助朋友们少走一些弯路,同时也期待和高手一起学习、提高。好了,今天的分享就至此为止。

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

    我是良许,世界500强外企 Linux 开发工程师,专业生产 Linux 干货。欢迎关注我的公众号「良许Linux」,回复「1024」获取最新最全的技术资料,回复「入群」进入高手如云技术交流群。

     

     

     

     

    展开全文
  • 《嵌入式Linux应用开发完全手册》全面介绍了嵌入式Linux系统开发过程中,从底层系统支持到上层GUI应用的方方面面,内容涵盖Linux操作系统的安装及相关工具的使用、配置,嵌入式编程所需要的基础知识(交叉编译工具的...
  • 1. linux目录结构 2. linux常用命令 3. vi的3种工作模式:命令行模式、插入模式和底行模式 4. 嵌入式系统:以应用为中心,以计算机技术为基础,软件硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等...
  • 在Windows上每个程序运行以后就自动生成一个该程序的配置文件目录,里面会存放一些自由该程序可以访问的文件比如配置文件以及DLC或者插件一类的东西。Linux上也有这样一个文件夹,只不过是隐藏的,用~/.config就可以...
  • 嵌入式linux开发流程: 1.搭建前期的开发环境,例如搭建linux主机环境,交叉编译器的安装,还有一些常用的开发辅助软件如source insight等等。 2.学习对硬件的直接操作,这里和单片机操作类似,我们需要查看原理图...
  • 1. 环境变量代理设置 export http_proxy=http://web-proxy.atlanta.hp.com:8080/ export https_proxy=http://web-proxy.atlanta.hp.com:8080/ export ftp_proxy=http://web-proxy.atlanta.hp.com:8080/ export ...
  • Linux应用层的定时器Timer使用详解
  • Linux常用配置讲解

    2018-03-28 16:05:24
     本文主要讲解Linux的用户设置、主机名设置、网络配置、防火墙配置 用户传输包的命令lrzsz的安装以及SSH服务配置等基本操作。1. 用户名设置 服务肯定是为了用户,而用户可能对于Linux并不了解,比如刚开始学习的...
  • 我们会列举出那些在所有 Linux 发行版上你都会安装的最优秀的 Linux 应用程序。-- Munif Tanjim有用的原文链接请访问文末的“原文链接”获得可点击的文...
  • 使用SDK设计linux应用程序
  • 笔记:在linux应用程序中延时有sleep()、msleep()和usleep()函数之类的延时,也有如下形式的延时: struct timeval delay; delay.tv_sec = sleepSecond; delay.tv_usec = 0; select( 0, NULL, NULL, NULL, &delay...
  • linux应用领域

    2019-05-12 14:16:26
    1.2linux应用领域 1.2.1个人桌面领域 1.2.2服务器应用领域:linux具有免费,稳定,高效的特点,在服务器领域应用最强。 1.2.3嵌入式应用领域:linux运行稳定,对网络有良好的支持性、低成本,并且可以根据需要...
  • 《从实践中学嵌入式Linux应用程序开发》 内容简介: 《从实践中学嵌入式linux应用程序开发》结合大量实例,讲解了嵌入式linux应用程序设计各个方面的基本方法及必要的核心概念。主要内容包括搭建嵌入式linux开发...
  • Linux服务器配置与管理标签(空格分隔): LinuxLinux服务器配置与管理 DNS服务器的配置与应用Domain Name System 简介 发展 配置配置文件 设置跟区域etcnamedconf 这只主区域etcnamedconf 1. DNS服务器的配置与...
  • 嵌入式ARM平台设备采用Embedded Linux操作系统进行开发已经越来越成为主流,本文就着重说明在EmbeddedLinux配置应用程序开机自启动的方法,并就基于Qt的应用程序卡机自启动脚本的配置进一步说明。   本文所演示...
  • 在性能和稳定性上,Linux不输给任何操作系统,但是在桌面应用中,Linux不再有其巨大优势。可是这两者需求不同,而这些不同正是Linux适合应用于服务器的根本所在。 服务器要求的是稳定性以及其性能,而Linux的稳定性...
  • 韦东山《嵌入式Linux应用开发完全手册》配套视频教程无需下载无需解压,百度云在线观看学习!教程目录: Linux视频第0课第1节刚接触开发板之接口接线工具 Linux视频第0课第2节刚接触开发板之烧写裸板程序 Linux...
1 2 3 4 5 ... 20
收藏数 760,997
精华内容 304,398
热门标签
关键字:

linux应用与配置