Linux系统编程一二章学习笔记

学习笔记

知识点归纳

第一章

Unix与Linux的背景

Unix背景

Unix (Thompson和Richie 1974. 1978) 是一种通用操作系统。该系统诞生于20世纪70年代早期,由肯.汤普森(Ken Thompson)和丹尼斯.里奇(Dennis Ritchie)采用贝尔实验室的PDP-11微型计算机开发。1975年,贝尔实验室向公众发布了Unix, 称为V6 Unix.该Unix系统的最初使用者以各大高校和非营利性机构为主。这一早期版本,连同有关C编程语言的经典著作(Kemighan和Richie 1988 ),在操作系统领域掀起了Unix革命,其影响一直持续至今。

Linux背景

Linux (Linux 2017)是一个类Unix系统。它最初是林纳斯.托瓦兹(Linus Torvalds)在1991年为基于Intel x86的个人计算机开发的一个实验性内核。 后来,世界各地的人都开始加人Linux的研发队伍。Linux 的-个重要里程碑发生在20世纪90年代末,当时,它与GNU ( Salman 2017)相结合,纳入了许多GNU软件,如GCC编译器、GNU emacs编辑器和bash等,极大地促进了Linux 的进一步发展。 不久之后,Linux 实现了访问互联网的TCP/IP协议族,并移植了支持GUI的X11 (X-window),成为一个完整的操作系统。

Linux包含其他Unix系统的许多特性。在某种意义上,它是由各种最为流行的Unix系统组合而成。在很大程度上,Linux 是兼容POSIX标准的。Linux已被移植到许多硬件体系结构中,如摩托罗拉、SPARC和ARM等。主要的Linux平台仍然是基于Intelx86的个人计算机,包括广泛可用的台式机和笔记本电脑。此外,Linux 可免费使用,且易于安装,因此,颇受计算机科学专业的学生欢迎。

在VitualBox下安装Ubuntu Linux

详见作者的另一篇文章Linux的使用与安装

Unix/Linux文件系统组织

Unix/Linux系统文件树

/---> |--> bin (普通用户指令)
|--> boot (内核镜像)
|--> dev (设备文件)
|--> etc (系统维护文件)
|--> home (用户主目录)
|--> lib (链接库)
|--> proc (系统信息相关的文件
|--> sbin (超级用户命令)
|--> |--> bin (命令)
|--> tmp |--> include (头文件)
|--> |--> lib (库文件)
|--> usr ---> |--> local
|--> |--> man (用户手册)
|--> |--> X11 (X-Windows)
##### 文件类型 (1)**目录文件:** 一个目录可能包含其他目录和(非目录)文件 (2)**非目录文件:** 非目录文件要么是“REGULAR”(常规)文件,要么是“SPECIAL”(特殊)文件,但只能是文件系统树中的叶节点。非目录文件可以进一步分为: * **常规文件:** 常规文件也称为“ORDINARY” (普通)文件。这些文件要么包含普通文本,要么包含可执行的二进制代码。 * **特殊文件:** 特殊文件是/dev目录中的条目。它们表示I/O设备,可进一步分为: * **字符特殊文件:** 字符I/O * **块特殊文件:** 块I/O * 其他类型:如网络(套接字)特殊文件、命名管道等。

(3)符号链接文件: 属于常规文件,其内容为其他文件的路径名。因此,这些文件是指向其他文件的指针。例如

文件路径名

Unix/Linux文件系统树的根节点(用“/”符号表示)称为根目录,或简称为根。文件系统树的每个节点都由以下表单的路径名指定:

/a/b/c/d OR a/b/c/d

以“/”开头的路径名为绝对路径名,反之则为相对于进程当前工作目录(CWD)的相对路径名。当用户登录到Unix/Linux时,CWD即被设为用户的主目录。CWD可通过cd (更改目录)命令更改。pwd 命令可打印CWD的绝对路径名。

Unix/Linux指令
●Is 列出CWD或目录的内容。
●cd dirname 更改目录。
●pwd 打印CWD的绝对路径名。
●touch filename 更改文件名时间戳(如果文件不存在,则创建文件)。
●cat filename 显示文件内容。
●cp src dest 复制文件。
●mv src dest 移动或重命名文件。
●mkdir dirname 创建目录。
●rmdir dirname 移除(空)目录。
●rm filename 移除或删除文件。
●In oldfile newfile 在文件之间创建链接。
●find  搜索文件。
●grep 搜索文件中包含模式的行。
●ssh  登录到远程主机。
●gzip filename 将文件压缩为.gz文件。
●gunzip file.gz  解压.gz文件。
●tar -zcvf file.tgz 从当前目录创建压缩tar文件。
●tar -zxvf file.tgz 从.tgz 文件中解压文件。
●man 显示在线手册页。
●zip file.zip filenames 将文件压缩为.zip 文件。
●unzip file.zip  解压.zip 文件。

sudo命令

出于安全原因,Ubuntu 禁用了根或超级用户账户,这可防止任何人以根用户身份登录(其实也不完全是;有一个方法可杜绝这种情况,但不便透露)。sudo (“超级用户执行")允许用户以另一个用户(通常是超级用户)的身份执行命令。它在执行命令时临时将用户进程提升到超级用户特权级别。完成命令执行后,用户进程将恢复到原来的特权级别。为确保能够使用sudo,用户名必须保存在/etc/sudoers文件中。为确保用户能够发出sudo,只需在sudoers文件中添加一行,如下所示:

username ALL(ALL) ALL//username为自己的用户名

但/etc/sudoers文件的格式非常严格。文件中的任何语法错误都可能破坏系统安全性。Linux建议只使用特殊命令visudo来编辑该文件,该命令可调用vim编辑器,但需要检查和验证

第二章

Linux的文本编辑器

vim

vim (Linux Vi和Vim Editor 2017)是Linux的标准内置编辑器。它是Unix原始默认vi编辑器的改进版本。与其他大多数编辑器不同,vim 有3种不同的操作模式,分别是

  • 命令模式:用于输入命令。
  • 插入模式:用于输入和编辑文本。
  • 末行模式:用于保存文件并退出。

vim启动时,处于默认的命令模式,在该模式下,大多数键表示特殊命令。移动光标的命令键示例如下:

h:将光标向左移动一个字符 l:将光标向右移动一个字符
j:将光标向下移动一个字符 k:将光标向上移动一行
在X-window中使用vim时,也可以通过箭头键来完成光标的移动。要输人文本进行编辑,用户必须输入i (插入)或a (追加)命令将vim切换到插入模式:
  • i;切换到插人模式,插人文本。
  • a:切换到插入模式,追加文本。
    要退出插入模式,请按ESC键-次或多次。 在命令模式下,输入“:”进人末行模式,将文本保存为文件或退出vim:
  • w:写入(保存)文件。
  • q:退出vim。
  • wq:保存并退出。
  • q!:不保存更改,强制退出。

虽然许多Unix用户已经习惯了vim不同的操作模式,但是其他用户可能认为与其他基于图形用户界面(GUI)的编辑器相比,vim使用起来既不自然也不方便。以下类型的编辑器属于通常所说的所见即所得(WYSIWYG)编辑器。在WYSIWYG编辑器中,用户可以输人文本,用箭头键移动光标,和普通的文本输入一样。通常,通过输入一个特殊的meta键,接着输入一个字母键即可创建命令。例如:

  • Ctrl+C: 中止或退出。
  • Ctrl+K: 删除行到缓冲区。
  • Ctrl+Y:从缓冲区内容中复制或粘贴。
  • Ctrl+S;保存已编辑文本等。
gedit

gedit是GNOME桌面环境默认的文本编辑器。它是Ubuntu及其他使用GNOMEGUI用户界面的Linux的默认编辑器,包含用于编辑源代码和结构化文本(如标记语言)的工具。

emacs

emacs( GNU Emacs 2015)是一.款强大的文本编辑器, 可在多个不同的平台上运行。最受欢迎的emacs版本是GNU Emacs,可在大多数Linux发行版中使用。

使用文本编辑器

使用vim编辑sudoers文件

打开终端,输入如下指令进入sudoers文件夹

su - root
visudo

按I进入插入模式
按I
进入文件,输入指令

username ALL=(ALL:ALL) ALL

visudo
输入Ctrl+S保存,Ctrl+X退出

使用emacs
  • 安装emacs
    输入指令
sudo apt install emacs

安装emacs

  • 查看emacs版本
enacs --version

查看emacs版本

  • 使用emacs
    输入指令调用emacs
    emacs filename
    
    emacs打开文件
  • 使用emacs编写C语言程序
    emacs编写C语言
    输入以下指令
    emacs QAQ.c
    #include<stdio.h>
    int main(void){
        char number[]={"hello world\n"};
        printf("%s",number);
        return 0;
    }
    
    保存文件Save as
    保存文件
    保存位置

使用C语言程序

  • 编辑C语言程序

    如上使用emacs编写,结果如下
    C语言文件位置

  • 编译C语言程序

    打开终端,输入指令

    gcc -o QAQ QAQ.c //将QAQ.c编译为QAQ的可执行文件
    

    gcc-o
    输入指令执行该程序

    ./ QAQ
    

    执行C语言程序
    执行成功

苏格拉底挑战

选用知识点为Unix/Linux文件系统知识emacs的使用

Unix/Linux文件系统知识

提问

  • 问题1
    1.1
  • 问题2
    1.2
  • 问题3
    1.3
  • 问题4
    1.4
  • 问题5
    1.5
  • 问题6
    1.6

总结

1.7
1.8

emacs的使用

提问

  • 问题1
    2.1
  • 问题2
    2.2
  • 问题3
    2.3

总结

2.4
2.5

问题与解决思路

虚拟机屏幕大小不适合

提问ChatGPT如何设置屏幕分辨率,得到回答:
屏幕分辨率
修改问题为VBox下的Ubuntu如何调整屏幕分辨率,得到回答:
屏幕分辨率2
遂解决

VBox增强功能安装

提问ChatGPTVBox如何安装增强功能,得到回答:
安装增强功能1
安装增强功能2
遂解决

Ubuntu经常黑屏,打不开终端

提问ChatGPTVBox下Ubuntu经常黑屏,终端打不开,得到回答:
黑屏1
黑屏2

Ubuntu显示部分乱码

提问ChatGPT系统的语言设置乱码,终端打不开,得到回答:
语言1
语言2

user不在sudoers文件内

提问ChatGPT使用sudo指令显示用户不在sudoers文件中,怎么办,得到回答:
sudoers
遂解决

posted @ 2023-09-10 15:16  20211120  阅读(58)  评论(1编辑  收藏  举报