1、Linux概述(3学时)
-
Linux的起源与发展,软件版权,开源软件与自由软件,常见的开源许可协议。
-
起源与发展
1991年,Linus写出了属于自己的Linux操作系统(Linus's Minix),最初版本为Linux0.01,是Linux时代开始的标志。 1993,Linux0.99发布,代码量10万行。 1994,Linux1.0发布,代码量17万行。 1996,Linux2.0发布,代码量40万行。
-
开源软件与自由软件
- 自由软件(Free Software) 自由软件中的free一词强调的是对软件的解放,而非价格上的免费。因此,为避免英语歧义,有时也称为 libre software。 自由软件是一项思想运动,强调用户拥有如何使用软件的自由。 可以自由地运行;可以自由地拷贝;可以自由地修改;可以自由地再发布。 - 开源软件(Open Source Software) 开源软件就是把软件程序和源代码文件一起打包提供给用户,用户既可以不受限制地使用该软件的全部功能,也可以根据自己的需求修改源代码,甚至编制成衍生产品再次发布出去。
-
常见的开源许可协议
-
GPL --最严格的!
GNU General Public License,GUN通用公共许可协议。GPL保证任何人有共享和修改自由软件的自由。任何人有权取得、修改和重新发布自由软件的源代码,并且规定在不增加附加费用的条件下可以得到自由软件的源代码。同时还规定自由软件的衍生作品必须以GPL作为它重新发布的许可协议。Linux采用了GPL。
-
BSD
BSD是Berkeley Software Distribution的缩写,伯克利软件发行版,BSD许可并不禁止演绎作品成为版权所有软件。是一种对商业集成很友好的软件,很多公司企业在选用开源软件的时候都首选BSD协议。
-
MIT
MIT许可源于麻省理工学院,是一种和BSD一样宽泛的许可协议,又称为X11协议。MIT和BSD类似,但是比BSD更加宽松,是目前限制最少的许可协议,这个协议唯一的条件就是在修改后的代码或者发行包中包含原作者的许可信息,适用于商用软件。使用MIT许可的软件项目有JQuery、Node.js。
-
Mozilla
-
Apache
Apache License,Apache许可证,是Apache软件基金会发布的一个自由软件许可证。
-
LGPL
GNU宽通用公共许可证,简称LGPL(GNU Lesser General Public License).
-
-
Linux实验环境、远程登录、虚拟机的安装与配置、SSH
-
使用SSH远程登录Linux。Ubuntu默认安装了ssh客户端openssh-client但没有安装ssh服务器。
# 下载openssh-server服务 sudo apt install openssh-server # 查看ssh版本 sudo ssh -V # 启动ssh服务 sudo systemctl start sshd # 远程登录 ssh 用户名@主机名 -p 端口号(默认是22) # 配置文件的位置 /etc/ssh/sshd_config
-
-
Linux启动与关闭、登录与注销
-
linux启动过程
内核的引导 init进程的运行 系统初始化 建立终端 用户登录系统
-
关机与注销
logout --注销 shutdown -h now | init 0 | telinit 0|power-off --立刻关机 shutdown +5 --5分钟后关机 shutdown 10:30 --在10:30关机 shutdown -c --取消按规定时间关闭系统 shutdown -r now --立即关闭系统并重启 sutdown -r 10:30 --在10:30关机并重启 reboot -f --直接关机并重启(一般直接reboot,不加参数) reboot -I --重启之前关闭所有网络接口 init 6 --重启
-
2、Linux基本操作(6学时)
-
目录操作 mkdir,rmdir,cd,dir,ls,pwd
-
mkdir
mkdir dir1 mkdir dir1 dir2 mkdir -p dir1/dir2 --创建一个目录树
-
rmdir
rmdir dir1 --dir1为空
-
ls
ls -l ls -a --显示了隐藏文件 ls -s -S --显示每个文件所用的空间,并按空间大小排序
-
dir pwd
-
-
文件操作 cp mv rm ln
-
cp
cp (-v) file1 file2 --显示复制过程 cp file dir cp dir/* . --复制dir目录下的所有文件导当前目录 cp -a dir1/dir2 . --复制一个目录到当前目录 cp -a dir1 dir2 --复制一个目录
-
mv
mv dir1 new_dir --重命名/移动目录
-
rm
rm -f file1 --强迫删除文件 rmdir dir1 --dir1为空 递归删除:-r 也是一个相当常用的参数,使用此参数可同时删除指定目录下的所有文件及子目录。 rm -rf(-r) dir1 --dir1里面可以有文件 rm -rf dir1 dir2 rm -r * --删除所有文件
-
ln
ln -s file1 file2 --创建一个指向文件或目录的软链接 ln file1 file2 --创建一个指向文件或目录的物理链接
-
-
文件显示与编辑
- cat,从前往后显示文件内容
- tac,从后往前显示文件内容
- nl,显示文件内容的时候顺道输出行号,不计算空行
- head,查看文件的前十行内容
- tail,查看文件的后十行内容
- more,一页一页显示文件内容
- less,和more类似,但是支持上下翻页
- 利用cpio 可将文件或目录从文件库获取出来或将散列文件拷贝到文件库
-
管道与输入输出重定向
-
管道
管道(pipe)命令的符号是“|”,可将某命令的结果输出给另一命令 ls | grep conf -- 搜索并显示ls命令运行结果中包含有“conf”字符串 yes | rm –r mydir --删除时会有确认yes提示,直接传yes进去
-
重定向
重定向(redirect)可将某命令的结果输出到文件中,它有两中命令:“>”和“>>”。“>”可将结果输出到文件中,该文件原有的内容会被删除:“>>”则将结果附加到文件中,原文件内容不会被清除。 ls -a > 123.txt --将命令结果输出到123.txt中 cat data1.txt >> data2.txt --将1的内容追加到2中
-
-
文件属性
-
chmod
chmod 751 file chmod u=rwx,g=rx,o=x file --同上
-
chown
chown root file --将file所有者设置为root chown kong:deyu file --将file拥有者设为kong群体的使用者deyu
-
-
文件查找
-
grep --用来过滤
grep text*.conf --搜索当前目录扩展名为.conf且包含text字符的文件 ls | grep conf -- 搜索并显示ls命令运行结果中包含有“conf”字符串 yes | rm –r mydir --删除时会有确认yes提示,直接传yes进去
-
find
find / -name file1 #从 '/' 开始进入根文件系统搜索文件和目录 find / -user user1 #搜索属于用户 'user1' 的文件和目录 find /home/user1 -name *.bin #在目录 '/ home/user1' 中搜索带有'.bin' 结尾的文件 find /usr/bin -type f -atime +100 #搜索在过去100天内未被使用过的执行文件 find /usr/bin -type f -mtime -10 #搜索在10天内被创建或者修改过的文件 find / -name *.rpm -exec chmod 755 '{}' \; #搜索以 '.rpm' 结尾的文件并定义其权限 find / -xdev -name *.rpm #搜索以 '.rpm' 结尾的文件,忽略光驱、捷盘等可移动设备
-
diff --用来比较两个文件
//file1.txt I need to buy apples. I need to run the laundry. I need to wash the dog. I need to get the car detailed. //file2.txt I need to buy apples. I need to do the laundry. I need to wash the car. I need to get the dog detailed. $ diff file1.txt file2.txt 输出如下结果: 2,4c2,4 < I need to run the laundry. < I need to wash the dog. < I need to get the car detailed. --- > I need to do the laundry. > I need to wash the car. > I need to get the dog detailed. 2,4c2,4 的含义是:第一个文件中的第[2,4]行(注意这是一个闭合区间,包括第2行和第4行)需要做出修改才能与第二个文件中的[2,4]行相匹配。接下来的内容则告诉我们需要修改的地方,前面带 < 的部分表示左边文件的第[2,4]行的内容,而带> 的部分表示右边文件的第[2,4]行的内容,中间的 --- 则是两个文件内容的分隔符号。
-
3、文件编辑(2学时)
-
vi使用:编辑、修改、复制、粘贴、查找、替换等
#打开 vi file #编辑 按i进去编辑模式 #退出 按ESC后:wq! # h j k l分别控制 左下上右 #删除 「x」:每按一次,删除光标所在位置的"后面"一个字符。 「#x」:例如,「6x」表示删除光标所在位置的"后面"6个字符。 「X」:大写的X,每按一次,删除光标所在位置的"前面"一个字符。 「#X」:例如,「20X」表示删除光标所在位置的"前面"20个字符。 「dd」:删除光标所在行。 「#dd」:从光标所在行开始删除#行 #复制 「yw」:将光标所在之处到字尾的字符复制到缓冲区中。 「#yw」:复制#个字到缓冲区 「yy」:复制光标所在行到缓冲区。 「#yy」:例如,「6yy」表示拷贝从光标所在的该行"往下数"6行文字。 「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与"y"有关的复制命令都必须与"p"配合才能完成复制与粘贴功能。 #替换 「r」:替换光标所在处的字符。 「R」:替换光标所到之处的字符,直到按下「ESC」键为止。 #查找 “/”+要查找的字符 #粘贴 p #修改 :42,73s/getInt/getInteger
4、Linux编程(2学时)
- C链表操作
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
// struct lnode;
// struct node;
struct lnode{
int data;
struct lnode *next;
};
typedef struct lnode node;
node* head;
node* temp;
node* tail;
void add(int);
void insert(int,int);
void update(int,int);
void sort();
void reverse();
void show();
int main(){
int i=0;
head = (node *)malloc(sizeof(node));
tail=head;
for(i=0;i<10;i++){
add(i);
}
tail->next = NULL;
update(-8,7);
show();
printf("\n");
insert(-2,4);
sort();
show();
reverse();
printf("\n");
show();
}
void reverse(){
node *pa, *p, *pb;
pa = NULL;
p = head->next;
while(p!=NULL){
pb = p->next;
p->next = pa;
pa = p;
p = pb;
}
head->next = pa;
}
void update(int data,int position){
node *p = head->next;
int i=0;
for(i=0;i<position;i++){
p = p->next;
}
p->data = data;
}
void sort(){
int count=0,i=0,j=0;
node *p=head->next;
while(p!=NULL){
p=p->next;
count++;
}
for(i=0;i<count-1;i++){
p = head;
node *t;
for(j=0;j<count-1-i;j++){
if(p->next->data > p->next->next->data){
t = p->next->next;
p->next->next = t->next;
t->next = p->next;
p->next = t;
}
p=p->next;
}
}
}
void add(int data){
temp = (node*)malloc(sizeof(node));
temp->data = data;
tail->next = temp;
tail = temp;
}
void insert(int data,int position){
node *p = head;
int i=0;
for(i=0;i<position;i++){
p=p->next;
}
temp = (node *)malloc(sizeof(node));
temp->data = data;
temp->next = p->next;
p->next = temp;
}
void show(){
node *p;
p=head->next;
while(p!=NULL){
printf("%d->",p->data);
p=p->next;
}
}
5、Linux安装(2学时)
- Linux分区、分区工具
- 安装步骤
6、系统管理(3学时)
-
用户管理
- 在root权限下,useradd只是创建了一个用户名,如 (useradd +用户名 ),它并没有在/home目录下创建同名文件夹,也没有创建密码,因此利用这个用户登录系统,是登录不了的,为了避免这样的情况出现,可以用 (useradd -m +用户名)的方式创建,它会在/home目录下创建同名文件夹,然后利用( passwd + 用户名)为指定的用户名设置密码。也可以直接利用adduser创建新用户(adduser +用户名)这样在/home目录下会自动创建同名文件夹。
- useradd -m codekong
- passwd codekong
- adduser user_name --增加一个user_name的用户
- adduser -e 1/2/14 user_name --建立账户并指定有效期为2014年1月2号
- userdel user_name --删除一个用户
-
进程管理ps,kill,who,cron,at
-
ps --报告程序状况
ps -A #显示所有程序
ps -ef #显示所有程序,并以ascii字符显示树状结构,表达程序间的相互关系
ps -ef | grep xx #在上面基础上添加查找关键字并显示出来。
pstree -a #以树状图显示程序
-
kill --杀死进程
kill -s name #杀死name程序
kill -s pid #杀死指定pid的程序
-
who --本地系统上的所有用户的信息(登录名、tty、登录日期和时间)
- -a 等同于指定 -bdprtTu
- -b 系统最近启动时间和日期
- -d 打印一个僵死的进程(显示没有被 init 重新生成的所有到期的进程)
- -h 打印一个标题
- -l 列出登录进程
- -p 列出活动进程
- -r 显示当前的运行级别
- -s 仅列出名字、线路和时间字段。这个标志是缺省值;因此,who 和 who -s 命令是等效的。
- -t 显示 root 用户上一次用 date 命令对系统时钟做的更改。如果 date 命令自从系统安装以来还没有被运行过, who -t 命令就不产生输出。
who #显示当前登录系统的用户
who -H #显示标题栏
who -T -H #显示终端属性
who -m -H #只显示当前用户
who -q #简约信息显示
whoami #显示当前登陆用户
w #当前机器开机了多久,当前多少个用户正在登陆,,当前机器负载情况,以及登录用户正在做什么
-
cron --周期执行的任务一般由cron这个守护进程来处理
*/5 * * * * ls /tmp >> /tmp/123 #每隔5分钟,将/tmp目录中的文件名重定向(追加)到/tmp/123文件中
1 0-3 * * * (cd /home/tom ;make)
每天凌晨的12点到3点过一分时,在/home/tom目录下运行make命令
vim /tmp/123 #创建文件
* * * * * ls >> /tmp/ls
crontab /tmp/123
crontab -l 查看任务
crontab -r 删除任务
对于普通用户而言,每个用户自己定义的crontab只有用户自己能看到。当然root例外。如果root想删除普通用户的crontab任务,可以用
crontab -u 用户名 -r
-
at --指定Linux系统何时运行脚本,at命令会将作业提交到队列中,指定shell在何时运行该作业。at的守护进程atd会以后台模式运行,检查作业队列来运行作业。atd守护进程会检查系统上的一个特殊目录来获取at命令的提交的作业。默认情况下,atd守护进程每60秒检查一次目录。有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业。
在使用at命令的时候,一定要保证atd进程启动。
- 1.三天后的下午5点钟执行 /bin/ls
at 5pm+3 days
at> /bin/ls
at> --CTRL + D
- 2.明天17点钟,输出时间到指定文件内
at 17:20 tomorrow
at> date > /root/log.log
at>
- atrm 12 #删除已经设置好的任务
- at -c 12 #显示已经设置的任务
-
-
磁盘安装与使用 mount,umount
- mount /dev/cdrom /mut/cdrom --加载光盘
- mount /dev/fd0 /mut/floppy --加载软盘
- umount /dev/cdrom --卸载
- fuser -km /mnt/hda2 --设备繁忙时强制卸载
- mount /dev/fd0 /mnt/floppy #挂载一个软盘
- mount /dev/cdrom /mnt/cdrom #挂载一个cdrom或dvdrom
- mount /dev/hdc /mnt/cdrecorder #挂载一个cdrw或dvdrom
- mount -o loop file.iso /mnt/cdrom #挂载一个文件或ISO镜像文件
- mount -t vfat /dev/hda5 /mnt/hda5 #挂载一个Windows FAT32文件系统
- mount /dev/sda1 /mnt/usbdisk #挂载一个usb 捷盘或闪存设备
-
文件压缩、备份 tar,gz,gzip,dd
tar命令参数繁多,以下举例常用参数作说明:
-c:创建一个新的tar文件;
-v:显示运作过程信息;
-f:指定文件名称;
-z:调用gzip压缩命令执行压缩;
-j:调用bzip2压缩命令执行压缩;
-t:参看压缩文件内容;
-x:解开tar文件。
- tar -cvf archive.tar file1 #创建一个非压缩的 tarball
- tar -cvf archive.tar file1 file2 dir1 #创建一个包含了 ‘file1’, ‘file2’ 以及 'dir1’的档案文件
- tar -tf archive.tar #显示一个包中的内容
- tar -xvf archive.tar #释放一个包
- tar -xvf archive.tar -C /tmp #将压缩包释放到 /tmp目录下
- tar -cvfj archive.tar.bz2 dir1 #创建一个bzip2格式的压缩包
- tar -jxvf archive.tar.bz2 #解压一个bzip2格式的压缩包
- tar -cvfz archive.tar.gz dir1 #创建一个gzip格式的压缩包
- tar -zxvf archive.tar.gz #解压一个gzip格式的压缩包
- unzip file1.zip #解压一个zip格式压缩包
- zip file1.zip file1 #创建一个zip格式的压缩包
- zip -r file1.zip file1 file2 dir1 #将几个文件和目录同时压缩成一个zip格式的压缩包
- gunzip file1.gz #解压一个叫做 'file1.gz’的文件
- gzip file1 #压缩一个叫做 'file1’的文件
- gzip -9 file1 #最大程度压缩
- dd --用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。
- if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file >
- of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=output file >
- ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。
obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。
bs=bytes:同时设置读入/输出的块大小为bytes个字节。 - cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。
- skip=blocks:从输入文件开头跳过blocks个块后再开始复制。
- seek=blocks:从输出文件开头跳过blocks个块后再开始复制。
注意:通常只用当输出文件是磁盘或磁带时才有效,即备份到磁盘或磁带时才有效。 - count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。
- conv=conversion:用指定的参数转换文件。
- dd if=/dev/hdb of=/dev/hdd #将本地的/dev/hdb整盘备份到/dev/hdd
- dd if=/dev/hdb of=/root/image #将/dev/hdb全盘数据备份到指定路径的image文件
- dd if=/root/image of=/dev/hdb #将备份文件恢复到指定盘
- dd if=/dev/hdb | gzip > /root/image.gz
-
软件包安装与管理 rpm
安装:rpm -ivh 包全名
- -i(install):安装
- -v(verbose):显示详细信息
- -h(hash):显示进度
- –nodeps:不检测依赖性
更新:rpm -Uvh 包全名(可替代安装)
- -U(upgrade):升级
卸载:rpm -e 包名(只能跟包名,不能跟包全名,可在任何目录执行)
- -e(erase):卸载
- –nodeps:不检查依赖性
查询:
- rpm -q 包名:查询包是否安装
- rpm -qa:查询所有已安装的RPM包
- rpm -qa | grep httpd:查询匹配
- rpm -qi 包名
- i(information):查询软件信息
- p(package):查询未安装包信息(包全名)
- rpm -ql 包名:查询包中文件安装位置
- -l
- -p
- rpm -qf 系统文件名:查询系统文件属于哪个RPM包
- -f(file) :查询系统文件属于哪个软件包
-
LILO/Grub管理 – Linux启动引导程序
TODO。。。。。
7、Linux网络管理(3学时)
-
配置文件及命令:ifconfig,ping,ftp ,相关配置文件如hosts等。
-
一般hosts文件格式如下
IP地址 用户名1
IP地址 用户名2
。。。。。。。。
-
-
常用服务器软件配置方法:Telnet,FTP,Apache服务器
-
Telnet
rpm -qa telnet-server #检测telnet-server的rpm包是否安装
yum install telnet-server #若未安装,则安装telnet-server
rpm -qa telnet #检测telnet-server的rpm包是否安装
yum install telnet #若未安装,则安装telnet,否则忽略此步骤
service xinetd restart #重新启动xinetd守护进程
netstat -tnl |grep 23 #TCP的23端口是否开启正常
-
ftp
sudo apt-get install vsftpd #安装ftp服务器
sudo vi /etc/vsftpd.conf #配置文件配置
sudo vi /etc/vsftpd.chroot_list #为服务器配置用户
sudo /etc/init.d/vsftpd/ restart #重启服务
-
Apache
-
sudo apt install apache2 -y --安装
-
systemctl status apache2 --是否开启服务器
/etc/init.d/apache2 start //启动Apache服务
/etc/init.d/apache2 stop //停止Apache服务
/etc/init.d/apache2 restart //重启Apache服务
- 访问http://127.0.0.1/
- 修改根目录 vim /etc/apache2/sites-available/000-default.conf
- sudo apache2ctl -k restart --重启服务
-
-
-
启动和关闭网卡
ifconfig查看网卡信息(假设网卡为atao)
sudo ifconfig atao down --关闭
sudo ifconfig atao up --开启
8、Linux内核重构(3学时)
-
配置编译新内核
- 到官网下载内核源码
- tar -xvf linux-2.4.0.tar.xz
- cd linux-2.4.0.tar.xz
- make menuconfig
- sudo make -j4
- sudo make modules_install
- sudo make install
- reboot
- 重启系统后,出现了选择内核的界面,说明内核编译成功。