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) |
(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:将光标向上移动一行 |
- 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进入插入模式
进入文件,输入指令
username ALL=(ALL:ALL) ALL
输入Ctrl+S
保存,Ctrl+X
退出
使用emacs
- 安装emacs
输入指令
sudo apt install emacs
- 查看emacs版本
enacs --version
- 使用emacs
输入指令调用emacsemacs filename
- 使用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语言程序
打开
终端
,输入指令
gcc -o QAQ QAQ.c //将QAQ.c编译为QAQ的可执行文件
输入指令执行该程序./ QAQ
执行成功
苏格拉底挑战
选用知识点为Unix/Linux文件系统知识
和emacs的使用
Unix/Linux文件系统知识
提问
- 问题1
- 问题2
- 问题3
- 问题4
- 问题5
- 问题6
总结
emacs的使用
提问
- 问题1
- 问题2
- 问题3
总结
问题与解决思路
虚拟机屏幕大小不适合
提问ChatGPT如何设置屏幕分辨率
,得到回答:
修改问题为VBox下的Ubuntu如何调整屏幕分辨率
,得到回答:
遂解决
VBox增强功能安装
提问ChatGPTVBox如何安装增强功能
,得到回答:
遂解决
Ubuntu经常黑屏,打不开终端
提问ChatGPTVBox下Ubuntu经常黑屏,终端打不开
,得到回答:
Ubuntu显示部分乱码
提问ChatGPT系统的语言设置乱码,终端打不开
,得到回答:
user不在sudoers
文件内
提问ChatGPT使用sudo指令显示用户不在sudoers文件中,怎么办
,得到回答:
遂解决