学校暑期开了Linux的短期培训课程,也就是简单地讲一下Linux下的基本知识,包括
1. 基本命令
2.shell编程
3.软件包和用户管理
4.计划任务
5.网络以及服务器
6.内存泄漏
本篇文章会简单地介绍一下上面的几个内容,在后续的文章中再针对各个部分进行详细的说明。
芬兰赫尔辛基大学的LinusTorvalds 在1991年宣布自己写出了一个可以在Intel 386机器上运行的核心,也就是后来广为人知的Linux了。Linux系统遵循GPL(GeneralPublic License)协议,是今天绝大多数服务器使用操作系统。
虽然Linux的创始人曾经也相信Linux不仅可以在服务器所向披靡,还能在桌面系统和Windows抗衡,但是,现实很残酷。Linux更适合服务器操作系统,非要说Windows可以做到怎样怎样,而Linux做不到,这样的对比是没有多少意义的。
可以在自己的电脑上安装Linux虚拟机来开始学习,VMware是比较推荐的软件。至于Linux的版本,根据个人喜好,喜欢界面漂亮一点的话,可以选择Ubuntu ,没有太多要求的话,Fedora 也是不错的选择。
在虚拟机上安装好Linux后,就可以开始了,需要的时候,就像打开一个软件一样简单,不用的时候,关掉就好,不会对物理机造成任何影响,实在是省心省事儿的首选。
1. 基本命令
私以为鸟哥的Linux私房菜 这本书,从各方面来说都是一本不错入门书籍,当然,你得适应一下鸟哥的湾湾腔。如果比较适应看网页这种方式的话,鸟哥的官网 也是很好的学习途径,这是简体版,习惯繁体的话,可以用这个。学习Linux,各种命令少不了,每天一个Linux命令,也比较有用。
Linux许多操作通过字符界面下的命令来完成,不同于视窗操作系统,可以用鼠标点来点去,这里的命令都是需要你一个个去输入的。也许你认为这不是太老古董了吗?鼠标点一下就完成的事情,为什么要这么麻烦呢?实际上,在操作系统中许多命令,是没有办法图形化的,使用图形化界面会很影响效率。偷懒是人的天性,如果命令行效率又低,操作又麻烦,早就活不过“三集”,被大家抛弃了。
虽然Linux 的命令有很多,但常用的也就是那几十个,就像你手机里装了很多APP,但使用频率最高也就那几个。所以只要掌握这些常用的命令,应对日常的任务就足够了。
命令 |
说明 |
pwd |
显示当前用户工作目录 |
cd |
切换路径 |
ls |
显示文件和文件夹列表 |
cat |
查看文件内容 |
grep |
搜索关键字 |
cp |
复制 |
mv |
移动 |
rm |
删除 |
mkdir |
创建文件夹 |
touch |
修改文件日期 |
more |
分页查看文件内容 |
find |
搜索文件 |
file |
查看文件类型 |
wc |
统计字节数、字数、行数 |
ln |
创建文件链接 |
dmesg |
查看系统信息 |
echo |
回显 |
clear |
清屏 |
shutdown |
关机 |
使用相应的快捷键可以打开终端,进行命令操作,就像Windows下的cmd一样。各个Linux版本的快捷键不同,当然也可以自己设定。
每个命令都对应着不同的参数,不同的参数还可以进行搭配使用,所以这让每个命令都有了很多的用法。比如ls打印文件列表的这个命令,使用参数 -l 可以进行长格式的输出,也就是输出详细信息。使用-a参数可以输出隐藏文件,将-a和-l组合在一起,就可以输出所有文件包括的隐藏文件的详细列表信息了。
每个命令的格式略有不同,但大体都是“命令 参数 对象”这样的的格式,比如ls这个命令就是“ls[参数] 路径”,执行这个命令就可以输出对应路径的文件的信息,当然缺省的路径的当前的路径。使用Tab键可以补全命令,比如你输入了文件名字的前一半,按一下tab键,可以自动补全。使用↑上下↓键可以切换到之前运行过的命令。
熟练掌握一些基本的常用的命令是进行下一步学习的基础,如果每次都需要去查询命令,会很影响效率。
2.shell编程
我觉得下面这张图可以解释shell在Linux中的作用
不论是应用还是用户,都是不能直接接触到系统核心的,这是出于对系统的保护,因为用户的非法操作可能给系统带来某些不可预料的危害,甚至导致系统的崩溃。用户可以通过Shell这个交互的界面,给系统下达指令,系统核心操控硬件,进行相应的工作,取得结果。
Shell 有很多的版本,Linux默认使用的是Bash,
使用cat 命令查看用户信息文件,即可查看到当前用户的默认Shell。这里用到的命令“cat/etc/passwd | grep 用户名”,前面部分是cat查看文件内容的命令,后面grep是查询关键字段的命令,两个命令通过“管道”(中间的竖线 |)组合在一起。cat返回的结果通过“管道”又作为grep的命令的输入,也就是grep命令在cat 的内容中去查询关键字段并返回结果。这里只是举例说明管道的用法,针对这个命令,用“grep 用户名 /etc/passwd”即可。
Shell 有一点像Windows下的批处理,用它来进行数字的处理比较麻烦,比如一个简单的数字表达式在这里会变得很麻烦。使用Shell可以帮助我们完成许多需要重复进行的工作。比如你是某个机房的管理员,你每天早上都要进行一些常规的系统检查,而这些命令可能有几百条,而且每天都一样。你会选择每天都去把这些命令一条条敲一遍吗?还是选择把它们写到一个shell中,需要的时候运行这个shell程序就好了呢?很显然,后者看起来是个更好的选择。
使用命令“vi 文件名”来创建并编辑一个shell程序,vi编辑器是Linux默认的编辑器,你可以把它想象成一个记事本,可以通过相应的配置使它更符合你的操作习惯,比如语法高亮,行号标记等。关于vi编辑器的使用可以参考我之前的文章。
一个简单的shell程序如上图所示,第一句#号打头表明这一句是一句注释,其后的内容说明这个shell程序使用的是bash,第二句注释说这个文件的名字是hello。第三句,是程序的“正文”,echo命令回显date,date是显示当前日期的命令,注意这里的单引号为反单引号,也就是在键盘左上角ESC键下面的那个。
使用chmod+x 文件名 给这个文件赋予可运行的权限,然后执行这个程序,
可以看到这个文件的后缀名为.sh,说明这是个shell文件,其实Linux是无所谓后缀名的。Linux中所有的东西都可以看作文件,屏幕是文件,打印机是文件,文件夹是文件,一切都是文件,取后缀名的做法是参考了其他系统,方便区分文件。
Shell里面一样可以有for循环,while循环等等基本的语法,但是比起C那样的编程语言,Shell显得很简单很简单。shell的对于格式有很严格的要求,比如有空格和没空格完全不一样,所以,使用过程中一定要注意。有很多Shell的练习,做几道就可以对shell有个初步的掌握。
3.软件包和用户管理
Linux 是一个多用户的操作系统,使用su-用户名 即可切换到另一个用户。注意这里的“-”,加了“-”后,会将用户环境也切换。
使用管理员进行用户的管理,包括添加新用户,修改已有用户的属性,或者删除已有的用户。管理员在Linux系统中拥有无限的权限,所以,为了系统的安全,进行日常的工作的时候,应该使用普通用户,必要的时候再切换到管理员。
这是一个创建批量用户的shell程序,其中有几个关键的命令,groupadd,useradd,passwd,从名字就能大概看出命令的用途。用户至少属于一个组,我们先用groupadd创建一个组,再向这个组中用useradd添加用户,用户需要设置密码才可以登录,使用passwd命令设置密码。所以,可以看出,shell程序一个作用就是将某些命令放到一起来按照要求执行,减少劳动量。
Linux下的软件包有很多版本,但是最后大家都选择了RPM(RedHat Package Manager),rpm也就成了软件包的默认标准了。软件包可以理解为大家都遵循的一个协议,比如安卓的安装包是apk。
rpm命令加-q 参数可以查询机器中通过rpm的方式安装的软件,通过其他方式安装的软件无法查到,后面通过管道的方式去查询关键字“gcc”。通过rpm 加参数 –I 即可安装软件,不过这种安装方式有个比较头疼的问题就是需要手动按照各个软件包的依赖关系去安装。比如A软件包需要B软件包作为依赖,所以你需要先安装B,如果B软件包还依赖于C,那么你… … 总之安装这种方式有的时候会让人抓狂,yum就可以解决这些问题。
yum 是一个在线的安装方式,通过“yum install 软件名”命令即可安装相应的软件,它会根据包之间的依赖关系自动安装相关的软件包,大大减省了用户的工作。如果说rpm的安装方式是你自己手动下载应用的安装文件手动安装的话,yum的安装方式就是从软件市场比如豌豆荚去安装应用。需要注意的是,yum安装的还是rpm包,就像你从豌豆荚下载安装时还是apk文件一样。
yum有很多的yum源供选,比如国内很多大学都提供了yum源,只需要在配置文件中修改yum的地址即可。当然,你可以用Linux的安装光盘建立你自己的本地yum源。
4.计划任务
计划任务其实我们经常用到,比如让迅雷下载完后关机,这就是一个计划任务。Linux中有两种计划任务,一种是at,这种计划任务是一次性的;另一种是crontab,这种任务可以按照设置的规律执行,比如每年生日给朋友发一封祝福邮件。
at计划任务由atd进程控制,-d为系统的“守护进程”,这样的进程还有“httpd”“crond”“vsftpd”等,它们一直在系统中运行着,除非手动地关闭它们。在终端输入at+时间 即可进入at的编辑模式下,在输入需要执行的命令后,使用ctrl+d来结束编辑。
crondtab计划任务通过crontab –e 命令进入编辑,每一行就是一个计划任务。
前面的五项就是时间,依次为分 时 日 月 周 ,比如第一个的意思就是每天的16:50执行其后的命令,第二个就是每天的8:00~18:00执行后面的命令。需要注意的是,每隔多少时间的表达,比如8点到18点,每隔两个小时,就是8-18/2。
5.网络以及服务器
在虚拟机中安装的Linux系统,有一些是安装完就可以上网的,比如Ubuntu,而另外一些,比如Fedora是需要一些额外的配置才可以上网的。以Fedora为例,需要配置本机的ip,网关,dns服务器,还需要在宿主机上配置网络适配器共享,并将vmware的上网方式设置为自定义。
服务器方面,主要是针对LAMP(Linux+Apache+Mysql/MariaDB+Perl/PHP/Python)的网站架构,需要安装Apache服务器,当然,LNMP(linux+nginx+mysql+php)也是不错的选择。可以一个个手动安装,当然也可以选择LNMP一键安装包 这种简单的方式。
6.内存泄漏
在Java中,程序编写者不需要操心内存回收的问题,Java本来就有回收的机制。而在C或者C++这些语言中,是需要自己去释放先前申请的资源的。由于各方面的原因,程序的编写者可能没有对不再使用的资源进行释放,从而导致内存泄漏。这在一个小程序中看起来或许没有太大问题,但是,再大的系统也是由很小的部分组成。随着运行时间的增加,运行规模的扩大,任何一个小小的问题都可能给整个系统带来致命的损害。
就像消防队做得最多的不是灭火,而是定期在辖区内进行险情排除一样,问题发生后再来补救始终是不得已的下策,最好的便是养成良好的编程习惯,避免不必要的麻烦。
Linux下可以通过多种方式对内存泄漏进行检查,比如在代码中嵌入mtrace,
在main.c代码中嵌入:
#include<mcheck.h>
mtrace();
/*你要检查的代码段*/
muntrace();
除了这种方式,还可以自己下载内存检查的工具,用得比较多有Valgrind,Memwatch。
写得比较简略,会在后续的文章中进行详细地介绍。时间能力有限,不免有疏漏之处,还望大家多多包涵,提出批评建议,不胜感激。以下是参考资料:
链接:http://pan.baidu.com/s/1c2oiMZ2 密码:5sf1 Linux培训