Linux复习
1、LINUX基本操作
? 要求熟练掌握下述命令: ? cd,ls,dir,pwd,mkdir,rmdir,mv,rm,cp,less,cat,more,grep,find,tail,tuch,head,wc,date,cal,logout,echo以及管道、IO重定向、目录与路径、绝对路径与相对路径、(登录)用户目录的概念等 ? 完成下列操作: ? 1)检查当前目录,并将当前目录更改为用户目录(注意目录表示的意义:. 、… 、~);
pwd
cd 或者cd ~
. 当前目录
.. 上一层目录
~ 当前用户的home目录
? 2)在当前目录下创建名为sun和smith的子目录;
mkdir sum
mkdir smith
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ec0lQbGG-1638972567140)(https://s2.loli.net/2021/12/08/ZKTp5hvqsN1kx7X.png)]
? 3)将/etc目录下扩展名为.conf的文件拷贝到sun子目录中;
cp /etc/*.conf ./sun/
? 4)在sun子目录中创建新的子目录2010-10-10;
mkdir 2021-12-8
? 5)将/bin目录下的以m头的文件复制到2010-10-10目录下;
cp -r /bin/m* ./2021-12-8/
? 6)列表用户目录下的所有文件,包括隐含文件(注:可以用cd ~命令将当前目录更改到用户目录);
? 7)用参数-l列出/bin目录下的文件gzip的目录信息,并说明其各部分的意义,如文件长度、访问权限等;
-rwxr-xr-x 1 root root 97496 12月13 2019 /bin/gzip
第一个- :普通文件
rwx : 创建者可以读可写可执行
r-x : 同一组可读不可写可执行
r-x:其它成员可读不可写可执行
1:文件个数,是文件的话就是1,是目录的话,就是目录中文件的个数
root:该文件的拥有者
root:所属的组
97496 :文件的大小,单位是Byte
12月13 2019 :最后一次修改时间
/bin/gzip :文件名
? 8)查找系统中文件名为touch的命令文件,并记录该文件的位置;
sudo find / -name "touch"
? 9)使用帮助系统,获取touch命令的功能与用法,并使用该命令,实现现1至2个功能;
? 10)分别用less、cat、more命令显示文件/etc/services的内容;
? 11)执行ls -l /etc命令,并通过管道|将命令结果送more命令处理;
ls -l /etc | more
? 12)运用重定向符,将目录/etc、/dev信息保存到文件dirinfo.txt中,存储位置为用户目录,用less、cat或more命令检查文件内容是否正确;
ls /etc >> dirinfo.txt
ls /dev >> dirinfo.txt
? 13)在用户目录拷贝dirinfo.txt一份备份文件,文件名为directoryinfo.bak,运用cat命令,将/etc/services文件内容连接到directoryinfo.bak文件后面,并检查命令执行结果是否正确;
cp dirinfo.txt directoryinfo.bak
cat /etc/services >> directoryinfo.bak
? 14)使用目录列表命令列出/dev目录信息,并用grep命令过滤除文件名中含有“fd”字符的文件信息;
ls /dev | grep fd
2、shell编程
3、用户管理
1)以管理员(又称超级用户)身份登录;
su
2)创建用户帐户tarry和bill,并设置口令;
usradd tarrry
useradd bill
passwd tarry
passwd bill
3)在开启另一个控制台,分别是tarry和bill身份登录,登录成功后,检查用户目录是否分别是/home/tarry和/home/bill,如果不是,检查步骤2)中的命令是否正确,注销该登录;
发现并没有home目录
带上参数
useradd -m tarry
这样就有目录了
4)删除用户bill,并在另一控制用bill身份登录,是否成功?
不能
4、文件管理
5、备份管理
1)tar命令的使用:打包与解包;见课堂示例
2)压缩与解压缩命令:gzip,unzip,Compress 等用法,压缩文件的扩展名
3)tar的压缩与解压缩
6、软件包的安装维护
1)rpm命令的使用:软件包W查询、安装、删除操作。见课堂示例 2)软件包安装,从CDROM上安装软件(包括CDROM加载/卸载) 3)软件删除
8、进程管理
进程的查看
ps [选项]
-a 显示所有用户的进程
-x 显示没有控制终端的进程和后台进程
-u 显示进程所有者的信息
-e 显示所有的进程
查到的进程可以通过管道来过滤
进程的终止
kill 进程号
进程的后台运行方法
前台进程与后台进程
>> 追加
> 直接写入
typedef struct {
int val;
struct MyLinkedList* next;
} MyLinkedList;
MyLinkedList* myLinkedListCreate() {
MyLinkedList* head = (MyLinkedList*)malloc(sizeof (MyLinkedList*));
head->next = NULL;
return head;
}
int myLinkedListGet(MyLinkedList* obj, int index) {
MyLinkedList *cur = obj->next;
for(int i = 0; cur != NULL;i++){
if(i == index){
return cur->val;
}else{
cur = cur->next;
}
}
return -1;
}
void myLinkedListAddAtHead(MyLinkedList* obj, int val) {
MyLinkedList *nhead = (MyLinkedList *)malloc(sizeof(MyLinkedList));
nhead->val = val;
head->next = obj->next;
obj->next = next;
}
void myLinkedListAddAtIndex(MyLinkedList* obj, int index, int val) {
if(index == 0){
myLinkedListAddAtHead(obj,val);
}
MyLinkedList *cur = obj->next;
for(int i = 1;cur != NULL;i++){
if(i == index){
MyLinkedList* newnode = (MyLinkedList*)malloc(sizeof(MyLinkedList));
newnode->val = val;
newnode->next = cur->next;
cur->next = newnode;
return;
}else{
cur = cur->newnode;
}
}
}
void myLinkedListDeleteAtIndex(MyLinkedList* obj, int index) {
if(index == 0){
MyLinkedList *tmp = obj->next;
if(tmp != NULL){
obj->next = tmp->next;
free(tmp);
}
return;
}
MyLinkedList *cur = obj->next;
for(int i = 1;cur != NULL && cur->next != NULL;i++){
if(i == index){
MyLinkedList *tmp = cur->next;
if(tmp != NULL){
cur->next = tmp->next;
free(tmp);
}
return;
}else{
cur = cur->next;
}
}
}
;cur != NULL && cur->next != NULL;i++){ if(i == index){ MyLinkedList *tmp = cur->next; if(tmp != NULL){ cur->next = tmp->next; free(tmp); } return; }else{ cur = cur->next; } } }
|