///实验1 Linux操作基础和文本编辑
useradd 用户名
passwd 用户名
groupadd 用户组名
man 命令
help命令
vi 文件名
i命令插入文本
删除一个字符,用x命令
删除一行,用dd命令
删除剩下的行,用d命令
复原文字命令用u
命令ndd:能够剪切从当前行开始的n行文本
命令p:能将剪切的内容粘贴到文档内任何地方
向前查找:使用命令/+要查找的文本,向后查找:使用命令?+要查找的文本
:.=并按回车键确定光标所在当前行行号
:行号并按回车键,光标移动到输入的行号。:$:光标移动到最后一行
ESC
:wq把编辑缓冲区的内容写到你编辑的文件中,退出编辑器,回到系统提示符下
:ZZ仅当作过修改时才将缓冲区内容写到文件上
:x与 :ZZ 相同
:q!强行退出vi
///实验2Linux文件系统
1.ls命令显示当前工作目录的内容
命令格式:ls [选项]目录名 (显示目录中所有子目录及文件名)
选项:-l:以列表方式显示。
2.命令mkdir创建目录;命令rmdir删除目录;
语法:
mkdir [选项]目录名
rmdir [选项]目录名(注意目录下必须为空)
选项-p:可以创建和删除一系列具有父子关系的目录
3.pwd命令确定你当前的工作目录
命令cd .. 移到上一目录
命令cd 当前目录下的文件名 移到当前目录下的指定文件内
date > file1 将当前日期和时间存放到新建文件file1中
命令 > 输出文件(文件输出重定向)
#ls >file1 (将ls显示的结果输出到文件file1中,如果file1存在,则覆盖)
4.cat命令查看file1文件的内容
man date >> file1 将date命令的用法附加到文件file1的后面
命令 >> 输出文件(给文件追加数据)
#ls –l >>file1 (将ls -l显示的结果追加到文件file1末尾)
ls -l file1命令列出文件file1的较详细的信息
5.cp file1 fa 生成文件file1的副本fa
cp[选项] 文件1 文件2(复制文件1,并将副本命名为文件2。如果文件2是个目录,就将文件1的副本放在目录中。)
选项:
-i : 如果目标文件存在,在覆盖前提示
-r : 复制目录
注意:复制前必须具有文件1的读权限和文件2的写权限
6.rm fa命令将文件fa删除
rm [选项] 文件列表
选项:
-i : 删除前提示
-f : 强制删除,不考虑权限
-r : 删除目录中所有内容包括所有非空子目录
7.mv file1 file_a
文件的移动和重命名,mv命令
格式:mv [选项] 文件1 文件2
#mv temp temp.moved(将temp重新命名为temp.moved)
#mv dir1/* dir2 (将目录dir1中所有文件和目录(不包括隐藏文件)移到目录dir2中)
8.查看文件命令cat
格式:cat [选项]文件名
选项 –n:为显示行添加行号
命令more:如果要查看的文件超过一页,可以分屏显示。
空格键:显示下一屏
回车键:显示下一行
命令head:显示文件的头10行内容
命令tail:显示文件的末尾10行内容
cat file*命令列出当前工作目录中以file开头的所有文件
cat file?命令
9.find 目录列表 -name 文件名 -print
其中,目录列表是指定开始查找的目录,文件名是你要查找的文件或目录。-name和-print是find命令的选项。
#find /usr/include –name socket.h –print
(在/usr/include及子目录中查找文件socket.h,并打印该文件的绝对路径)
10.whereis [选项]命令名
找到显示该命令的绝对路径名及手册页的绝对路径名(执行命令时,该命令有效但shell找不到它时用)
11.grep命令在文件中找到用户的有关信息
grep命令常用于文本文件中查找给定的词或短语。包含给定模式字符串的行在标准输出(即显示器)上显示出来。
格式:grep [选项] 字符串 文件名
#grep xiaomei /etc/passwd(在/etc/passwd目录中寻找字符串xiaomei,找到则显示包含该字符串的行信息)
#grep –n xiaomei /etc/passwd (文件中包含xiaomei字符串的行都显示了行号)
12.命令echo $HOME : 确认当前用户的主目录
13.修改文件权限
<1>符号模式格式如下:
chmod key 文件 [文件列表]
其中,key由以下成分组成:
[who] [+|-|=] [mode]
——who这一部分可以由下面的一个和多个字符组成:u,g,o或a,它们分别表示文件主,组用户,其他用户或所有三种用户。默认值是a。
——第二部分必须是以下三个字符中的一个:+,-,或者=,分别表示增加,删除或者设定。
——mode成分可以由以下字符任意组合:r,w或x,分别表示读,写或者执行/查询的权限
以上三个部分必须依次输入,而且它们之间没有空格。在一个命令行中可以指定多个key,彼此间用逗号隔开,中间没有空格。
如:设文件f原来的权限是rw-rw-r--,现在想让所有用户都具有执行权限,则可使用以下命令:
chmod a+x f
该命令执行后,文件f的权限变成rwxrwxr-x
<2>绝对模式格式如下:
chmod 八进制模式 文件 [文件列表]
例子:权限 rw- rw- r-- 用二进制表示应为:110 110 100,
八进制表示则为:664
#chmod 664 file1(将文件1赋予rw- rw- r--权限)
14.改变文件或目录所属的组 chgrp命令
格式:chgrp [选项] 组名 文件名
15.改变文件的属主 chown命令
格式:chown [选项] 用户名 文件名
例:#chown xiaomei test(将文件test的所属用户由root改为xiaomei)
///实验3 Linux的进程控制
1.who命令查看当前在线用户信息
2.w命令查看目前登录的用户及正在执行的命令
3.ps命令用法:
格式:ps 选项
常用选项说明:
-e: 显示所有进程
-a:显示终端上所有进程,包括前一会话中运行的后台进程
-l: 以长列表的方式输出,显示如下内容:
F:与进程相关的标志,指示进程是否为一个用户进程或内核进程。
S:进程状态。R(就绪态),S(睡眠状态),D(不间断睡眠状态,如执行I/O时),T(终止状态),Z(僵化进程)。
UID:用户号
PID:进程号
PPID:父进程号
PRI:优先权
SZ:大小
TTY:终端,该字段显示附加进程的终端名
TIME:进程运行时间
CMD:命令名
WCHAN:等待通道:对于正在运行或准备运行的进程,值为空;对于等待进程,该字段列出进程等待的内核事件名。
NI:进程的nice值,计算进程优先号的参数
4.kill命令终止进程
Kill [-信号编号] 进程pid号
信号编号:1(终止)2(中断)9(必杀)
5.新建一终端窗口,运行vi编辑器 ctrl+Z终止该前台进程
后台运行vi编辑器。切换到前台(使用fg命令)。
产生后台命令格式:命令 &
后台运行vi编辑器后撤销该后台vi命令。使用ps查看是否已经终止。(注意kill命令不带信号编号使用后的进程状态。)
前台运行vi编辑器。切换到后台。(先终止该前台命令,再使用bg命令切换到后台。
///实验4 Linux程序开发基础
1.vi first.c 创建C语言文件
2.cat first.c 查看完整文件
3.more first.c 每次查看一页文件
4.命令格式:gcc 【选项】 文件列表
该命令用于调用C编译系统。当命令执行后,它依次进行预处理,编译,汇编,链接,最后产生可执行代码。默认情况下,可执行代码放在a.out文件中。
例:
#gcc first.c //对文件first.c进行编译,并产生默认的可执行文件a.out。
#gcc –o success first.c //gcc命令带上选项–o表示对文件first.c进行编译,并将可执行代码存放在一个自己指定的文件中(此处为success)。
5.<1>使用gdb调试C程序之前,用gcc对程序进行编译的时候带上-g选项。
例: #gcc –g first.c –o success
<2>运行gdb:
gdb 文件名(编译后的可执行文件)
例:%gdb success
<3>退出gdb:使用命令quit退出gdb返回shell
<4>Gdb帮助命令:
help:获得gdb命令的相关信息。help命令显示了所有gdb命令的类名。
help 命令名:显示该命令的简要说明。
如:(gdb)help run:显示命令run的简要说明
<5>执行程序:使用run命令
<6>设置断点:
(gdb)break 17(行数)
(gdb)run :程序将在17行处停住。
<7>程序的单步调试:
(gdb)step:逐行执行程序
(gdb)continue:继续将后面程序执行完毕。
<8>显示执行中程序的变量或表达式的值:
(gdb)print 变量名
///实验5 进程管理
#include<stdio.h>
#include<signal.h>
#include<unistd.h>
Void waiting(),stop();
Int wait_mark;
Main()
{
int p1,p2;
while((p1= fork()) = = -1);
if (p1>0)
{
while((p2= fork()) = = -1);
if (p2>0)
{
Wait_mark=1;
Signal(SIGINT, stop); //如果键盘不认del键,思考此处如何解决?能否跳
Waiting(); // 过,使用别的方法?比如任意输入字符getchar():w继续
Kill(p1,16);
Kill(p2,17);
Wait(0);
Wait(0);
Printf(“/n parent process is killed!/n”);
Exit(0);
}
Else
{
Wait_mark=1;
Signal(17, stop);
Waiting();
Printf(“/n child process2 is killed by parent!/n”);
Exit(0);
}
}
Else
{
Wait_mark=1;
Signal(16, stop);
Waiting();
Printf(“/n child process1 is killed by parent!/n”);
Exit(0);
}
}
Void waiting()
{
While(wait_mark!=0);
}
Void stop()
{
Wait_mark=0;
}