俗话说出来混迟早要还的,在大学欠下的Linux账,现在是该还了。大学学完Linux,然后基本再没碰过了,已经基本全部交还给老师了。现在又要重新开始学习了。
因为在项目开发中,想要入手Linux开发还是比较简单的,不需要掌握太多的东西,熟悉一下基本的命令模式操作,熟悉常用的vim编辑器操作就可以了。当我们开发到一定程度就会根据不同需求去学习掌握更多的Linux知识和操作。
刚开始上手SecureCRT还真不是件简单的事,因为我根本不知道这是个什么东西,后来才知道是远程登录Linux的。搜了一些相关命令就开始动手操作,还要装vim,过了这么久我都忘了vim是怎么装好的了,很悲剧的说,不过身边的人就是一切可以利用的资源,身边这么多大牛就不要浪费了。然后看着大牛的演示和自己慢慢操作,也熟悉了一些Linux和vim的命令操作。
目前这个阶段,只要熟悉一些基本的概念掌握一些基本的命令操作就OK了,根据我自己的经历来说,和root相关的可以先不管,这样就省下了很多精力。大概要知道的就是这些了:
1.了解Linux的目录配置
用cd /命令进入根目录,然后查看该目录下所有的文件,就会发现有很多的文件夹,这都是根据FHS标准来安排的,相应的软件放在相应的目录下,因为Linux的版本有很多。
上图就是我所登陆的Linux的所有非隐藏文件了,还有隐藏文件,只要输入命令ls -al就可以看见,说说系统自带的目录文件吧,没说到的都是自己后期创建的。
/bin 放置的是在单用户维护模式下还能被操作的命令,主要有cat,mv,mkdir,cp等等。
/boot 放置开机会使用到的文件,包括Linux内核文件以及开机菜单与开机所需配置文件等。
/dev 在Linux系统上,任何设备与接口设备都是以文件的形式存在于这个目录当中。
/etc 系统主要的配置文件几乎都放置在这个目录内,包括人员的账号密码文件,当然这个一般人是没办法看到和修改的,这个涉及到权限问题。
/home 这个文件夹我是最熟悉的,因为这是系统默认的用户主文件夹,我每次登陆就在这个文件夹下面,我所有的东西都在这里面。
/lib 系统的函数库非常多,lib里面放置的是开机会用到的库函数。
/lost+found 当文件系统发生错误的时候,将一些丢失的片段放置到这个目录下。
/media 这里放置的是可删除的设备,像光盘,DVD等。
/mnt 用作挂载,具体挂载是什么东西以后再说。
/opt 这个是用来给第三方软件放置的,你可以将自己的软件安装在这里面。
/proc 虚拟文件系统,放置的数据都是在内存中的,如系统内核,进程等。
/root 系统管理员的主文件夹,也就是系统的老大。
/sbin 放置开机过程中所需要的命令。
/srv 一些网络服务启动之后,这些服务所需要取用的数据目录。
/sys 虚拟文件系统,主要记录内核相关的信息,和/proc差不多。
/tmp 一般用户或者正在执行的程序暂时放置文件的地方。
看了这么多的东西是不是已经晕了,这些只要了解一下,以后学的东西多了,自然会掌握,自然会用到。
2.熟悉Linux的文件权限
用ls -l查看目录的文件,就会看见文件很多的属性,下图是我这个用户的主文件夹,我所有的东西:
第一列代表的是这个文件的类型和权限,乍一看,这个字母符号是个什么玩意,第一个字符带包这个文件到底是个什么东西,我这里面的都是d,d代表的是目录,当然还有别的,-代表的则是文件,l代表的是连接文件(linkfile),b代表的是设备文件里面的可供存储的接口设备,c代表设备文件里面的串行端口设备。那后面的字符代表什么呢,后面的字符每三个一组,而且都为rwx组合,r代表可读,w代表可写,x代表可执行,这三个权限位置是不会改变的,如果没权限就是字符-(减号)。比如我的第一个目录c++分好组就是:[rwx][r-x][r-x],第一组为文件所有者的权限,第二组为同组用户的权限,第三组为非本组用户的权限。这里第三列表示文件的所有者,这里是我自己,所以我对这些文件有绝对的权限(三个权限都有)。同组用户是什么,在开发中都有分组的现象,有的东西当然不希望让组外的人看见,或者不让组外的人修改,这就是用户组的作用。
第二列代表的是有多少文件名连接到此节点,这个设计到磁盘文件,以后再学。
第三列代表的这个文件的所有者账号。
第四列代表的这个文件的所属用户组。
第五列代表这个文件的容量大小,单位是B。
第六列代表这个文件的创建日期或者最近的修改日期。
第七列代表这个文件的文件名。
r为可读,如果对一个文件有读的权限,那么就可以读取该文件的内容,如果对一个目录有可读的权限,那么就可以读取该目录的文件列表。
w为可写,如果对一个文件有写的权限,那么就可以编辑,新增或者修改该文件的内容,但是不能删除该文件,如果对一个目录有写的权限,那么就可以更改该目录结构列表,这个是很强大的,可以新增新的文件或目录,删除已经存在的文件或目录,重命名已存在的文件或目录还有可以转移该目录内的文件活目录的位置。
x为可执行,如果对一个文件有执行的权限,那么就可以被执行,如果对一个目录有执行的权限,那么就可以进入该目录成为工作目录。这个可能有点难理解,首先能否进入一个目录是看你有没有x权限,如果没有的话,不仅不能进入该目录,而且无法执行该目录下的任何命令。
什么,只要有x权限就能执行,那还要扩展名何用?在Linux下一个文件能不能执行,能怎样执行不是肯扩展名的,而是看权限。在Linux下,扩展名只是让你了解该文件可能的用途而已,不像windows下,.exe通常是可执行的。比如压缩文件,扩展名太多了,它只是让你了解是用哪种方式压缩的,让你知道该用什么命令解压。
3.掌握Linux常用命令
Linux下的命令太多了,目前入门阶段只要掌握一些常用的命令就OK了。
其中用的最多的要数ls和cd了,ls是列出一个文件夹下所有文件的命令,当然还可以配参数,其中-a和-l是用的比较多的,-a表示把隐藏文件也列出来,-l表示列出文件的详细信息,当然两个参数可以同时使用,如ls -al或者ls -a -l都可以,作用就是两个的综合。cd命令表示进入特定目录,cd ..表示退一级目录,cd /进入根目录,cd ~name表示进入/home目录下的一个特定目录,不输入name表示进入自己的主目录,这里就牵扯出相对路径和绝对路径的问题了,/开头的都是绝对路径,比如cd /home/tengpeng表示进入我的主文件夹,这里的/home/tengpeng就是绝对路径,如果在我的主文件夹下,cd c++/learn进入我的c++文件夹下的learn文件夹,这里的c++/learn就是相对路径。
当然在开发过程中,对文件的操作是最多的,这就涉及到了文件的创建,删除,移动,复制等
创建一个文件的命令touch name,创建文件夹就不一样,mkdir name如果我要创建一个test1文件夹,然后在test1中创建一个文件夹test2,然后在test2中创建文件夹test3,除了进入目录中一个一个创建,还有种递归式创建,mkdir -p test1/test2/test3,这个-p参数特别重要,没有的话就创建失败。既然Linux中扩展名没什么用,那为什么我们在创建文件的时候还是要写呢,比如创建一个c++文件,会写上hello.h或者hello.cpp,我问了一下别人,说是为了让别人知道你这是一个什么文件,相当于标识符,还有就是可能别人写的软件可能只允许某种扩展名的文件执行。
删除一个文件的命令为rm name,那如果是删除一个目录呢,如果该目录里面是空的,那么就是rmdir name,如果不是空的就要用递归将该目录下所有的文件和文件夹都删除为rm -r name,-r是参数,如果删除上面创建的test1/test2/test3这种,如果这三个文件夹中没有别的文件就可以用命令rmdir -p test1/test2/test3。
移动一个文件的命令mv name1 name2,name1是文件原来的名字,name2是改过后的名字,为什么是改过后的名字呢,因为这个命令也可用来更改文件的名字,比如把hello.h改成hello.cpp就是mv hello.h hello.cpp,那移动呢,如果我要把hello.h移动到c++目录下,命令为mv hello.h c++/hello.h 或者mv hello.h /home/tengpeng/c++/hello.h,有个路径的问题。
复制文件和移动差不多,命令为cp name1 name2,也会像mv一样有路径问题。cp还有权限的问题,因为复制得到的文件所有者是操作者本身。
还有查看一个文件的内容命令cat name,tac name nl, more, less,head,tail这些,试一下就知道效果,其中还可以加参数达到不同的效果。
当然还有文件的查找,which,whereis,locate,find等等。
如果一个命令不知道怎么用,当然还有帮助嘛,man page和info page,如果不知道ls这个命令怎么用,怎么加参数,只要输入man ls或者info ls都是查到相应的用法,我们可以根据查出来的用法来使用以达到我们的目的。以上都是一些常用命令,当然我们学习一段时间后还会继续学习更多的命令,只要多用就会很熟练,对了还有tab键,这是一个很常用的补全快捷键,比如我要进入/home/tengpeng/c++这个目录,只要输入cd /h+tab+/t+tab+/c+tab,如果按下tab没反应,说明你给的条件还不是很精确,比如不仅有个c++文件件还有一个c#,那么给出c再按tab键是不能补全的,因为它不知道你是要c++还是c#,当然如果连续按两次还会有惊喜哦,还不快试试。
4.掌握vim编辑器的常用命令和功能
vim是一款相当经典相当好用的编辑器,虽然它在编辑的时候不能补全(或者补全比较麻烦,目前我知道的Ctrl+p,或者有补全软件什么的),但是用了一段时间我觉得是非常好用的一款编辑器,很喜欢,感觉比eclipse什么的好用多了,主动以字体颜色辨别语法的准确性,方便程序设计。当然这也是命令模式操作,所以也会有很多的命令。下面就来熟悉一下编写程序中常用到的命令。
vim一共有三种模式,一般模式,编辑模式和命令行模式,一般模式进入编辑模式通常是按i(I),o(O),a(A),r(R)键,编辑模式到一般模式是按键Esc,只能从一般模式切到命令行模式,用:,/,?这三个符号,反过来也是Esc键。一般模式退出编辑器只要用:w(保存),:q(退出),:wq(保存并退出)。
在编写代码的时候,我们往往需要很多的操作来提高我们编写代码的速度和质量,这就需要很多的命令来实现,用的多自然也会很熟练。
当然还有一些相关的功能,如果要复制一个文件中的部分内容粘贴到另一个文件里面,这就要用到多文件编辑,如果当你编写一个文件的时候,需要另一个文件做参考,可以再开一个窗口,但是这样就要手动切换窗口浪费时间,这是就要多窗口功能等。
先来看一下多文件编辑的功能吧,当输入vim test.h test.cpp这样就可以多文件编辑,只要用命令:n,:N来切换文件,并且其中一个文件中复制的内容在另一个文件中可以使用。
再看看多窗口功能,当我们用vim test.cpp编辑的时候,用命令:sp test.h,就会再显示test.h在窗口下方,如果不加名字,就将正在编辑的文件再显示一份在下方,上下两个文件之间的切换只要用ctrl+w+j(ctrl+w+↓)或者ctrl+w+k(ctrl+w+↑)。:vsp就会显示左右窗口,通过ctrl+w+h和ctrl+w+l进行切换。
当然还要学会makefile的编写,这其中又会涉及到编译原理的相关东西,我表示这些东西我又该再学一次了。
对于一个新手来说,能做到这些就足够应付目前的开发工作了,当然当我们不断学习不断进步的时候,我们就会发现会的这点东西真的是才刚刚跨入Linux的门槛,慢慢的我们要掌握的东西会越来越多。