年年岁岁花相似,岁岁年年人不同。——linux课程初探
写在前面
记得大约两年以前第一次学习linux,当初的目的还仅仅是学习操作系统,后来慢慢开始写linux内核代码,慢慢学会重构与代码的维护。在娄老师课上感觉这些工具是如此亲切和熟悉,没错这些曾经被我抛弃甚至遗忘的国产“盗版” StackOverflow与github,如今已经发生了巨大的变化,我从博客园转到csdn也有两年了,也许今天我可能没有当时的执拗与倔强,所以我再次打开博客园的随笔写下这些,希望自己可以从“零”开始,以娄老师的教学路线为学习计划,虽然知识是旧的但思想永远是新的,相信一个学期走下来必定有所收获,再次感谢娄老师。
plus:附上我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课程初探的更多相关文章
- 14门Linux课程,打通你Linux的任督二脉!
Linux有很多优点:安全.自主.开源--,也正是这些优点使得很多人都在学Linux. 虽说网上有大把的Linux课程资源,但是对很多小白来说网上的课程资源比较零散并不适合新手学习. 正因为此,总结了 ...
- linux课程总结
linux课程总结 --20125111 李冰清 转眼间,为期十六周的linux课程已进入尾声,回想起这十六周的课程,不断浮现在脑海里的是娄老师的笑容以及这十六周以来的点点滴滴. 第一次听到娄老师说将 ...
- Linux 基金会宣布联合 edX 提供免费 Linux 课程
edX 是一个由麻省理工学院和哈佛大学创建的大规模开放在线课堂平台.它免费给大众提供大学教育水平的在线课堂.” edX 学习平台” 就像 开源软件似的发展,它使得其它院校机构也可以提供其高级学习的 ...
- Linux课程---11、Linux中软件安装和调试
Linux课程---11.Linux中软件安装和调试 一.总结 一句话总结: 启动过程:1.安装软件,2.修改配置文件,3.启动服务 查看过程:4.查看进程,5.查看端口 关闭过程:6.关闭软件,7. ...
- Linux课程---9、安装RPM包(RPM的全称是什么)
Linux课程---9.安装RPM包(RPM的全称是什么) 一.总结 一句话总结: redhat package management 1.在Packages中查找和php相关的文件如何查找? ls ...
- Linux课程知识点总结(一)
Linux课程知识点总结(一) 一.Linux系统的简介 1.1 什么是Linux Linux是一个免费的多用户.多任务的操作系统,其运行方式.功能和Unix系统很相似,但Linux系统的稳定性.安全 ...
- Linux课程学习之我思
陈民禾,原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000,我的博客中有一部分是出自M ...
- 20135302魏静静——Linux课程期中总结
Linux期中总结 Linux课程第一周实验及总结:[http://www.cnblogs.com/20135302wei/p/5218607.html] 冯诺依曼体系结构的核心思想是存储程序计算机. ...
- 20135302魏静静——linux课程第三周实验及总结
linux课程第三周实验及总结 一.实验:跟踪分析Linux内核的启动过程 使用gdb跟踪调试内核从start_kernel到init进程启动 使用实验楼的虚拟机打开shell cd LinuxKer ...
随机推荐
- Java 中 wait, notify 和 notifyAll的正确使用 – 以生产者消费者模型为例
如何使用Wait 尽管关于wait和notify的概念很基础,它们也都是Object类的函数,但用它们来写代码却并不简单.如果你在面试中让应聘者来手写代码,用wait和notify解决生产者消费者问题 ...
- KEGG Pathway Anonatation
转载于 Original 2017-06-20 liuhui 生信百科 KEGG 数据库中,把功能相似的蛋白质归为同一组,然后标上 KO 号.通过相似性比对,可以为未知功能的蛋白序列注释上 KO 号. ...
- 千万别在UI线程上调用Control.Invoke和Control.BeginInvoke,因为这些是依然阻塞UI线程的,造成界面的假死
原文地址:https://www.cnblogs.com/wangchuang/archive/2013/02/20/2918858.html .c# Invoke和BeginInvoke 区别 Co ...
- 深入浅出 Java Concurrency (8): 加锁的原理 (Lock.lock)
接上篇,这篇从Lock.lock/unlock开始.特别说明在没有特殊情况下所有程序.API.文档都是基于JDK 6.0的. public void java.util.concurrent.lock ...
- CSS 父级方法清除浮动方法
.baseMod:after { clear: both; content: ' '; display: block; visibility: none; height: 1% } 2. overfl ...
- [Z] Linux下进程的文件访问权限
原文链接:http://blog.csdn.net/chosen0ne/article/details/10581883 对进程校验文件访问权限包括两个部分,一是确定进程的角色(属于哪个用户或者组), ...
- 经验总结:WebBrowser自动点击弹出提示框alert、弹出对话框confirm、屏蔽弹出框、屏蔽弹出脚本错误的解决办法
经验总结:WebBrowser自动点击弹出提示框alert.弹出对话框confirm.屏蔽弹出框.屏蔽弹出脚本错误的解决办法 网上有好多解决方法,可是不一定好使,本人经过多次试验,针对WebBrows ...
- 「小程序JAVA实战」小程序开发注册用户的接口(33)
转自:https://idig8.com/2018/08/30/xiaochengxujavashizhanxiaochengxukaifazhuceyonghudejiekou33/ 从用户注册接口 ...
- 解读linux中用户密码规则及忘记root口令的破解(思路)
linux当中,用户名和密码表对应关系放在/etc/passwd中,如: root:x:0:0:root:/root:/bin/bash 格式代表意义分别为 用户名:密码:用户id:组id:用户描述 ...
- Delphi三层开发小技巧:TClientDataSet的Delta妙用
Delphi三层开发小技巧:TClientDataSet的Delta妙用 转载 2014年10月13日 09:41:14 标签: 三层 / ClientDataSet 318 from :http:/ ...