写在前面

记得大约两年以前第一次学习linux,当初的目的还仅仅是学习操作系统,后来慢慢开始写linux内核代码,慢慢学会重构与代码的维护。在娄老师课上感觉这些工具是如此亲切和熟悉,没错这些曾经被我抛弃甚至遗忘的国产“盗版” StackOverflow与github,如今已经发生了巨大的变化,我从博客园转到csdn也有两年了,也许今天我可能没有当时的执拗与倔强,所以我再次打开博客园的随笔写下这些,希望自己可以从“零”开始,以娄老师的教学路线为学习计划,虽然知识是旧的但思想永远是新的,相信一个学期走下来必定有所收获,再次感谢娄老师。

plus:附上我csdn的地址(读研以来好久没写过了)

我的csdn博客

开篇(从实习说起)

为什么要说实习呢,因为我实习的公司就是实验楼。。。当时的工作就是给一部分课程上传的教程找bug,看看能不能按照教程指引完成操作,所以上面很多内容都再熟悉不过了,linux的实验其实早就做过,当时实习的时候觉得这个平台比较小众,虽然自己很喜欢但没有什么实用性。今天来看可能我的判断不完全准确,上面的课程与分类越来越多,很多老师的制定教学平台就是实验楼,但依旧没有到达“火”的程度,我想可能是归咎于大数据与云计算的发展。为什么这样说呢,现在很多高校都有自己的虚拟化平台与云计算服务器(包括我们学校,可能很多人不知道罢了),很多的课程老师们可能不愿意发布到网上而是更喜欢班级的氛围,当然这只是我个人的推断。

中篇

实验我又认真地重做了一遍,具体实验我就不一张一张地截图了,我会将作业报告的链接附在下面(前10个作业),只针对一些问题简要说一下我的理解和认识。

命令执行顺序控制与管道

文件系统操作与磁盘管理

文件打包与解压缩

环境变量与文件查找

Linux 目录结构及文件基本操作

用户及文件权限管理

cheat命令



其实之前我查看帮助的方式比较特别,就是直接输入指令而不加任何参数,它会列出所有可能的参数,以sudo为例



如果输入cheat sudo的话会发现No cheatsheet found for sudo,可见cheat虽然方便但很多指令并没有,尤其是在第三方程序中,因此灵活使用man、--help和cheat才能将效率提升至最高。

环境变量



其实这一部分虽然常用但一直都有一点模糊,不论配置什么平台程序可能都离不开环境变量,那么什么时候应该添加系统环境变量,什么时候应该添加用户环境变量可能是很多人至今都分不清楚的(我也是其中之一),实验楼的实验并没有做具体说明(毕竟只是入门教程),但我觉得对于开发人员来说,这注定是一个不可回避的问题。

一般修改环境变量有三种方式:

1、直接用export命令(以编译器为例):

#export PATH=$PATH:/opt/au1200_rm/build_tools/bin
查看是否已经设好,可用命令export查看:
[root@shiyanlou]# export
declare -x BASH_ENV="/root/.bashrc"
declare -x G_BROKEN_FILENAMES="1"
declare -x HISTSIZE="1000"
declare -x HOME="/root"
declare -x HOSTNAME="localhost.localdomain"
declare -x INPUTRC="/etc/inputrc"
declare -x LANG="zh_CN.GB18030"
declare -x LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
declare -x LESSOPEN="|/usr/bin/lesspipe.sh %s"
declare -x LOGNAME="root"
declare -x LS_COLORS="no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*NaNd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35:"
declare -x MAIL="/var/spool/mail/root"
declare -x OLDPWD="/opt/au1200_rm/build_tools"
declare -x PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin:/opt/au1200_rm/build_tools/bin"
declare -x PWD="/opt/au1200_rm/build_tools/bin"
declare -x SHELL="/bin/bash"
declare -x SHLVL="1"
declare -x SSH_ASKPASS="/usr/libexec/openssh/gnome-ssh-askpass"
declare -x SSH_AUTH_SOCK="/tmp/ssh-XX3LKWhz/agent.4242"
declare -x SSH_CLIENT="10.3.37.152 2236 22"
declare -x SSH_CONNECTION="10.3.37.152 2236 10.3.37.186 22"
declare -x SSH_TTY="/dev/pts/2"
declare -x TERM="linux"
declare -x USER="root"
declare -x USERNAME="root"

可以看到,环境变量已经设好,PATH里面已经有了我要加的编译器的路径。

2、修改profile文件:

#vi /etc/profile
在里面加入:
export PATH="$PATH:/opt/au1200_rm/build_tools/bin"
让环境变量立即生效需要执行如下命令:
#source /etc/profile

3、修改.bashrc文件:

# vi /root/.bashrc
在里面加入:
export PATH="$PATH:/opt/au1200_rm/build_tools/bin"

其中前两种修改的是系统环境变量,最后一种修改的是用户环境变量。

grep命令的技巧

一个优秀的软件架构师可能离不开grep命令,以我为例,我目前正使用caffe从事深度学习的开发,caffe源码较为庞大和复杂,如果不能快速定位的话会浪费大量时间。例如,在src/caffe/layer_factory.cpp(caffe基于工厂模式设计的)有一个宏调用:REGISTER_LAYER_CREATOR(Pooling,GetPoolingLayer),可能一眼看上去不知道它想做什么,那么可以在caffe的根路径运行如下命令:
grep -n -H -R "REGISTER_LAYER_CREATOR" *

结果见下图

尾篇

其实并没有写完,但由于导师项目较多,暂时就说这些吧,同时选修了娄老师的移动平台开发,更多内容请见移动平台开发提交的博客,里面对于linux上的部分操作进行了必要的补充。

年年岁岁花相似,岁岁年年人不同。——linux课程初探的更多相关文章

  1. 14门Linux课程,打通你Linux的任督二脉!

    Linux有很多优点:安全.自主.开源--,也正是这些优点使得很多人都在学Linux. 虽说网上有大把的Linux课程资源,但是对很多小白来说网上的课程资源比较零散并不适合新手学习. 正因为此,总结了 ...

  2. linux课程总结

    linux课程总结 --20125111 李冰清 转眼间,为期十六周的linux课程已进入尾声,回想起这十六周的课程,不断浮现在脑海里的是娄老师的笑容以及这十六周以来的点点滴滴. 第一次听到娄老师说将 ...

  3. Linux 基金会宣布联合 edX 提供免费 Linux 课程

    edX   是一个由麻省理工学院和哈佛大学创建的大规模开放在线课堂平台.它免费给大众提供大学教育水平的在线课堂.” edX 学习平台” 就像 开源软件似的发展,它使得其它院校机构也可以提供其高级学习的 ...

  4. Linux课程---11、Linux中软件安装和调试

    Linux课程---11.Linux中软件安装和调试 一.总结 一句话总结: 启动过程:1.安装软件,2.修改配置文件,3.启动服务 查看过程:4.查看进程,5.查看端口 关闭过程:6.关闭软件,7. ...

  5. Linux课程---9、安装RPM包(RPM的全称是什么)

    Linux课程---9.安装RPM包(RPM的全称是什么) 一.总结 一句话总结: redhat package management 1.在Packages中查找和php相关的文件如何查找? ls ...

  6. Linux课程知识点总结(一)

    Linux课程知识点总结(一) 一.Linux系统的简介 1.1 什么是Linux Linux是一个免费的多用户.多任务的操作系统,其运行方式.功能和Unix系统很相似,但Linux系统的稳定性.安全 ...

  7. Linux课程学习之我思

    陈民禾,原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000,我的博客中有一部分是出自M ...

  8. 20135302魏静静——Linux课程期中总结

    Linux期中总结 Linux课程第一周实验及总结:[http://www.cnblogs.com/20135302wei/p/5218607.html] 冯诺依曼体系结构的核心思想是存储程序计算机. ...

  9. 20135302魏静静——linux课程第三周实验及总结

    linux课程第三周实验及总结 一.实验:跟踪分析Linux内核的启动过程 使用gdb跟踪调试内核从start_kernel到init进程启动 使用实验楼的虚拟机打开shell cd LinuxKer ...

随机推荐

  1. apache commons lang包中的StringUtils

    计算一个字符串某个字符的出现次数 a, 使用charAt方法截取之后,循环判断. b, 使用apache commons lang包中的StringUtils: int n = StringUtils ...

  2. VMware Workstation 12 Pro(安装CentOS7)

    之前安装了一版 Ubuntu 14.04版本,发现蛮不好用的,果断放弃,换上CentOS7版本(在远程服务器上的安装方式除了网络设置有差异,基本相同) VMware Workstation 12 Pr ...

  3. C语言学习笔记---好用的函数memcpy与memset

    这个主要用于我个人的学习笔记,便于以后查询,顺便分享给大家. 想必在用C的时候难免会与数组,指针,内存这几样东西打交道,先以数组为例,例如有一个数组int a[5] = {1, 2, 3, 4, 5} ...

  4. C链表

    结构指针的应用,链表处理 1,链表的概念 链表是将若干数据项按一定规则连接起来的[数据类型]表,链表中的每一个数据称为一个节点,既链表是由称为节点的元素组成的,节点多少根据需要确定. 链表连接规则: ...

  5. Oracle导出CSV文件

    -- 建立存储过程 CREATE OR REPLACE PROCEDURE SQL_TO_CSV ( P_QUERY IN VARCHAR2, -- PLSQL文 P_DIR IN VARCHAR2, ...

  6. SQLite的基本用法

    SQLite是Android自带的轻量级数据库,接口封装的很好,不会SQL的也能很好的使用. 接下来讲一下怎么创建数据库.通过adb查看数据表和数据.增删查改. 一.创建数据库 Android封装了S ...

  7. Django 实现用户认证set_Cookie

    当用户通过认证时,set_Cookie(key, value) request.Cookie.get(key) 如果key不为空,就说明验证通过,否者重新跳转回login登录页面 对于URL urlp ...

  8. 表单验证常用的JS正则表达式

    在表单验证中,使用正则表达式来验证正确与否是一个很频繁的操作,本文收集整理了15个常用的javaScript正则表达式,其中包括用户名.密码强度.整数.数字.电子邮件地址(Email).手机号码.身份 ...

  9. requesth获取参数

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) t ...

  10. Java中Final修饰一个变量时,是引用不能变还是引用的对象不能变

    Java中,使用Final修饰一个变量,是引用不能变,还是引用对象不能变? 是引用对象的地址不能变,引用变量所指的对象的内容可以改变. final变量永远指向这个对象,是一个常量指针,而不是指向常量的 ...