| 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 ~命令将当前目录更改到用户目录); ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7fgiOZFB-1638972628368)(https://s2.loli.net/2021/12/08/K9hLZnlGcR7TVqj.png)]](https://img-blog.csdnimg.cn/c9841ccbdca949ad97976442dfac349b.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQ3Jlc2NlbnRfUA==,size_20,color_FFFFFF,t_70,g_se,x_16)
 ? 7)用参数-l列出/bin目录下的文件gzip的目录信息,并说明其各部分的意义,如文件长度、访问权限等;
 ![[外链图片转存中...(img-ohaVwReP-1638972661854)]](https://img-blog.csdnimg.cn/4e8d2e36567e43deb7cd32e37bcf1020.png) -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"
 ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y1rSCdS8-1638972567143)(https://s2.loli.net/2021/12/08/7TQ5ueXvc9GlUnj.png)]](https://img-blog.csdnimg.cn/bfaebee6a1014b4f9abb3fa02e047833.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQ3Jlc2NlbnRfUA==,size_20,color_FFFFFF,t_70,g_se,x_16)
 ? 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
 ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-25j1s1VP-1638972567145)(https://s2.loli.net/2021/12/08/HsjPDTq3inwYL6W.png)]](https://img-blog.csdnimg.cn/ae342c5e74ec4a2eacebb0eec8e3cbb3.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQ3Jlc2NlbnRfUA==,size_20,color_FFFFFF,t_70,g_se,x_16)
 ? 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
 ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j8YNrfSM-1638972567146)(https://s2.loli.net/2021/12/08/Cdw39MaFNlqPSXY.png)]](https://img-blog.csdnimg.cn/0063d90a276b4144b059248c4a8e2f81.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQ3Jlc2NlbnRfUA==,size_20,color_FFFFFF,t_70,g_se,x_16)
 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 进程号
 进程的后台运行方法 前台进程与后台进程 >> 追加
> 直接写入
 
 ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BcbwPTBd-1638972567153)(https://s2.loli.net/2021/12/07/VoeQhGbi6JYRns4.png)]](https://img-blog.csdnimg.cn/c546b2fc5814476cad1202d40835d4ea.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQ3Jlc2NlbnRfUA==,size_18,color_FFFFFF,t_70,g_se,x_16)
 ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LXZk1cf7-1638972567154)(https://s2.loli.net/2021/12/07/9HpWmx32NJOGDwI.png)]](https://img-blog.csdnimg.cn/c64591de10224c9fb1948d7fc16dbe91.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQ3Jlc2NlbnRfUA==,size_18,color_FFFFFF,t_70,g_se,x_16)
 ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iUDz3edo-1638972567155)(https://s2.loli.net/2021/12/07/riP4Yn9CBLdjcxu.png)]](https://img-blog.csdnimg.cn/41b9a0c65f934da18a97b40ec1782c15.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQ3Jlc2NlbnRfUA==,size_20,color_FFFFFF,t_70,g_se,x_16)
 
 ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HXH71JAF-1638972567157)(https://s2.loli.net/2021/12/07/zEqFvmUtfJVyABR.png)]](https://img-blog.csdnimg.cn/e5bb6dd3e96b41f5ba7d80e19b71f7d4.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQ3Jlc2NlbnRfUA==,size_18,color_FFFFFF,t_70,g_se,x_16)
 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;
 }
 }
 }
 
 |