一、Linux 发展历史过程及关键人物
Unix:1969 年由贝尔实验室的 Ken Thompson 和 Dennis Ritchie 研发成功,1971 年发布第一个版本,其内核短小精悍、性能优异且源代码公开,发明者于 1983 年获图灵奖。
Minix:荷兰阿姆斯特丹自由大学 Andrew S. Tanenbaum 教授编写的操作系统示范教学程序,约 12,000 行代码,是迷你版本的类 Unix 操作系统。
Linux:1991 年由芬兰赫尔辛基大学 Linus Torvalds 设计,因 Minix 在其计算机上运行不佳,他用汇编语言编写了 Linux 原型。同年 8 月 25 日 Linus 在 MINIX 新闻组征求意见,9 月中旬 Linux 0.01 版问世并放网上,引发关注。1991 年 10 月 5 日发布 0.02 版,12 月发布 0.10 版等,后续版本不断更新,其源代码通过芬兰等地 FTP 站点传遍世界。20 世纪 80 年代中期 Internet 形成后,众多程序员参与改进和测试,使其迅速发展壮大,1994 年 3 月 14 日发布 1.0 版。Linux 遵循 POSIX 标准,大量使用 GNU 软件,虽未包含 Unix 源代码,但与 Unix 关系密切。
二、Linux 操作系统特点及说明
- 开放性:与 Unix 系统(如 System V、BSD 等)几乎完全兼容,遵循 POSIX 标准,Unix 下程序大多可移植到 Linux,且遵循 OSI 国际标准,便于与其他软硬件互联。
- 高效性:核心源代码针对体系结构优化,运行稳定顺畅,对内存分配合理,将闲置内存用作缓冲区。
- 多用户多任务:可同时执行多个程序,允许多用户同时登录使用软件。
- 设备独立性:把外部设备当作文件处理,安装驱动程序后,用户可像操作文件一样操纵设备,无需了解其具体存在形式。
- 系统安全性:采取设备和文件读写控制、审计跟踪等安全措施。
- 良好的用户界面:有基于文本的命令行界面(Shell)支持强大功能,还有 X Window 图形界面方便使用。
- 提供丰富的网络功能:支持 Internet,可通过命令传输文件、进行远程访问等。
- 良好的可移植性:能在从微型到大型计算机的各种环境和平台运行。
三、Linux 操作系统组成(内核、shell、文件系统、应用程序)及含义
- 内核:是操作系统核心,具备存储管理、CPU 管理、进程管理、文件系统、设备管理和驱动、网络通信、系统初始化和系统调用等基本功能。
- Shell:是用户界面,提供用户与内核交互的接口,其命令解释器和编程语言具有普通编程语言特性,编写的 shell 程序与其他应用程序效果相同。
- 文件系统:是文件在磁盘等存储设备上的组织方式,Linux 支持多种流行文件系统,如 EXT2、EXT3、FAT、FAT32、VFAT 和 ISO9660 等。
- 应用程序:标准 Linux 系统包含文本编译器、编程语言、X Window、办公套件、Internet 工具和数据库等程序集。
四、Linux 与 Windows 系统区别
- 适用场景:Windows NT 融入 Windows 9x 图形化界面优势,易用但效率因图形界面有所降低,适合中小企业、个人用户及对性能要求不严格的场合;Linux 适用于强调性能、对用户界面要求不高的应用。
- 开发环境:Linux 是开放环境下开发,得到广泛支持,任何志愿者可参与;Windows 是有版权产品,接口和设计由公司控制,在封闭环境发展。
五、Linux 操作系统的应用场景和前景
- 应用场景
- 服务器操作系统:是首选系统之一,在服务器领域应用广泛。
- 嵌入式领域:在军事、工业控制系统、信息家电、通信设备、医疗仪器、智能仪器仪表等众多领域广泛应用。
- 云计算和数据中心:备受青睐。
- 桌面应用:已有改进。
- 其他:如电影制作(《泰坦尼克号》等)、指纹识别设备驱动开发、汽车智能驾驶(Sony 车载导航、Volvo 卡车和有轨电车)、搜索引擎(Google)、即时通讯软件服务器(QQ)、智能手机(安卓系统内核基于 Linux)、火星探测器、天气预报等领域均有应用。
六、Ubuntu 版本组成及发布周期
由版本号和代号组成,例如 Ubuntu 10.04 LTS Lucid Lynx,自 2004 年 10 月发布首版本,发布周期为六个月。
七、基本分区方案(根分区、交换分区)
- 根分区(/):建议 6GB 以上,是 Linux 系统的根目录,所有目录挂载其下,剩余空间可分配给根分区。
- 交换分区(swap):建议为物理内存 1 - 2 倍,用于虚拟内存,在内存不足或休眠时发挥作用。
八、系统安装过程(四步)
- 确认安装在硬盘还是虚拟机。硬盘安装需备份数据或安装双系统;虚拟机安装要提前准备好虚拟机软件并配置硬件信息。
- 检查计算机硬件是否被 Ubuntu 默认支持,不支持则准备好驱动程序。
- 规划好用户名、密码、网络 IP 地址配置等信息。
- 确认安装方式是光盘安装、硬盘安装还是 U 盘安装等。
九、使用虚拟机的优点
一台计算机模拟多台虚拟机运行不同系统且互不干扰,可同时运行多系统且切换方便。能虚拟分区和配置,用虚拟网卡连虚拟机成局域网。
十、操作系统接口类型
- 命令行用户接口:用户在文本界面通过键盘输入命令获取操作系统服务,结果也以文本显示。如 Bourne Shell(sh)、C Shell(csh)等,不同 Shell 有其特定提示符。其特点是效率高、灵活,但需记忆命令和语法,命令分为内部命令(如 cd、pwd 等,程序在 Shell 内部,执行快)和外部命令(存储在磁盘,执行时需调入内存)。
- 图形用户接口:通过图标、窗口等元素形成直观操作环境,以鼠标驱动。用户点击操作图形元素实现交互,结果以图形显示,优点是直观易用,无需记忆命令。
- 程序接口:由系统调用命令组成,是程序员访问系统资源的途径,系统调用是操作系统提供给应用程序访问系统资源的唯一接口,每个系统调用是完成特定功能的子程序,用户接口功能最终通过它实现。
十一、命令解释程序工作流程
首先显示提示符等待用户输入命令行。
接收命令后判断命令是否合法,若不合法则提示出错信息。
对于合法命令,判断是否为内部命令,若是则直接执行;若不是则从外存调入外部命令执行,执行后将结果显示在屏幕上,接着再次显示提示符等待下一次输入。
十二、X Window 系统组成、架构、主要特点、核心
- 系统组成:主要由 X Server、X Client 和 X Protocol 组成。
- 架构特点:客户 / 服务器架构
- 主要特点:应用程序的 “运行” 和 “显示” 可分离。具有广泛移植性,是图形接口标准体系框架,著名的 GNOME 和 KDE 基于其构建。
- 核心组件
- X Server:运行在有显示设备主机上,负责支持显示卡等硬件、响应 X Client 请求绘图与管理窗口、维护字体颜色等资源及输入输出操作,可独立安装更新,Linux 常用的有 XFree 86 和 Xorg,后者逐渐成为主流。
- X Client:需在屏幕显示图形的程序,通过请求让 X Server 管理图形界面,不能直接接受用户输入,输出显示时确定内容并通知 X Server 完成实际显示。
- X Protocol:是 X Client 和 X Server 通信规则,规定信息格式和顺序,运行在 TCP/IP 协议之上,使二者可跨主机通信。
- 核心:X Server
十三、系统调用的作用
是应用程序和系统内核之间的接口,由操作系统内核提供一系列内核函数,通过系统调用这个接口供用户使用。
作用是将应用程序请求传递给内核,调用相应内核函数处理,再把结果返回应用程序。
十四、目录操作命令
- ls:用于查看目录内容。例如
ls -a可显示包括隐藏文件在内的所有内容,ls -l以详细列表格式显示,包括文件权限、所有者、大小、修改时间等信息,如ls -l /home可查看/home目录下文件的详细信息。 - cd:改变工作目录。如
cd /home/ubuntu可进入/home/ubuntu目录,cd..返回上一级目录,cd ~回到用户主目录。 - pwd:显示当前所在目录的绝对路径,如在
/home/ubuntu目录下执行pwd,会显示/home/ubuntu。 - mkdir:创建新目录。
mkdir mydir可创建名为mydir的目录,mkdir -p dir1/dir2能递归创建多级目录。 - rmdir:删除空目录。如
rmdir mydir可删除mydir目录,若目录非空则删除失败,使用rmdir -p可递归删除子目录。
十五、文件操作命令
- touch:创建新文件或更改文件的最后修改日期。如
touch textfile.txt若文件不存在则创建,若存在则更新修改时间。 - cat:显示文件内容。
cat hello.txt可查看hello.txt文件内容,cat -n hello.txt会对文件内容进行编号显示,cat file1 file2 > file3可将file1和file2的内容合并到file3中。 - cp:复制文件或目录。
cp number.txt dir1将number.txt复制到dir1目录下,cp -r dir1 dir2可递归复制dir1目录及其所有子目录和文件到dir2目录。 - rm:删除文件或目录。
rm number.txt可删除文件,rm -r dir1可递归删除dir1目录及其内容,rm -i会在删除前进行安全询问。 - mv:移动文件或目录,或对其重命名。如
mv number.txt /home/ubuntu/mydir将number.txt移动到/home/ubuntu/mydir目录,mv /home/ubuntu/dir1 /home/ubuntu/dir2移动目录,mv /home/ubuntu/pict.png /home/ubuntu/pict1.png对文件重命名。 - chmod:修改文件权限。如
chmod a+rwx filename为所有用户增加读、写、执行权限,chmod 777 filename也可达到相同效果,还可使用chmod u+rwx,g+r,o+r filename为不同用户组设置不同权限。 - file:判断文件类型。如
file /usr/games/banner可判断banner文件为二进制可执行文件,file Textfile.txt判断Textfile.txt为文本文件。
十六、文件处理命令
- grep:在文件中查找特定字符串。如
grep hello hello.txt在hello.txt文件中查找hello字符串,grep -i选项可忽略大小写。 - head:显示文件前几行。如
head -2 hello.txt显示hello.txt文件的前 2 行,单独使用head默认显示前 10 行。 - tail:显示文件最后几行。如
tail -1 hello.txt显示hello.txt文件的最后 1 行,单独使用tail默认显示最后 10 行。 - wc:统计文件的行数、单词数、字符数。如
wc -l hello.txt统计hello.txt文件的行数,wc -w统计单词数,wc -m统计字符数。 - sort:对文件内容进行排序。如
sort -t":" -k2 hello.txt以:为分隔符,按照第二列对hello.txt文件内容进行排序。 - find:查找文件或目录。如
find hello.txt在当前目录下查找hello.txt文件,find Desktop查找Desktop目录及其下所有内容。 - which:按
PATH变量查找命令或文件的绝对路径。如which ls可查找ls命令的绝对路径。 - whereis:查询命令及相关文件。如
whereis passwd可查找passwd命令及相关文件的位置。 - locate:查找文件名相同的文件,需先使用
updatedb更新数据库。如locate file查找名为file的文件。
十七、压缩解压命令
- bzip2 和 bunzip2:
bzip2用于压缩文件,如bzip2 hello.txt将hello.txt压缩为hello.txt.bz2,bunzip2用于解压,如bunzip2 hello.txt.bz2可解压该文件。 - gzip:压缩和解压文件。如
gzip hello.txt压缩hello.txt为hello.txt.gz,gzip -d可解压。 - zip 和 unzip:
zip压缩成.zip文件,如zip file.zip file将file压缩为file.zip且原文件不消失,unzip解压.zip文件,如unzip file.zip。 - tar:打包备份或解包。如
tar -cf new.tar hello.txt number.txt将hello.txt和number.txt打包为new.tar,tar -xf new.tar解包,tar -czf new.tar.gz hello.txt number.txt打包并压缩为.tar.gz格式。
十八、磁盘操作命令
- mount:挂载设备。如
mount -t vfat /dev/sdd1 /mnt/usb可挂载vfat格式的/dev/sdd1设备到/mnt/usb目录,mount -o loop –t iso9660 /home/sunky/mydisk.iso /mnt/vcdrom挂载光盘镜像文件。 - umount:卸载文件系统。如
umount /mnt/usb卸载/mnt/usb挂载点的文件系统。 - df:查看文件系统磁盘空间使用情况。如
df -h以人类可读格式显示磁盘空间使用情况。 - du:查看当前目录下文件及目录信息。如
du -h以合适大小单位显示目录和文件大小。 - fsck:硬盘检测,需 root 用户执行。如
fsck 分区名检测指定分区。
十九、关机重启命令
- shutdown:安全关机或重启。如
shutdown -h +2在 2 分钟后关机,shutdown -r +1 “system will be reboot after 1 minute”在 1 分钟后重启并提示用户。 - halt:关机,单独使用等于
shutdown -h,halt -f可强行关机。 - poweroff:关机。
- reboot:重启系统。
- init:切换运行级别。如
init 0停机,init 3进入完全多用户模式,init 6重新启动。
二十、变换用户身份命令
- su:切换用户。如
su root切换到 root 用户,需输入 root 用户密码。 - sudo:以超级管理员身份执行操作。如
sudo command以 root 权限执行command命令。 - useradd:创建新用户。如
sudo useradd -d "/home/tt" -m -s "/bin/bash" tt创建用户tt并指定主目录、创建主目录(若不存在)和 shell 版本。 - passwd:修改用户密码。如
passwd zhang修改zhang用户的密码,需 root 用户执行。
二十一、网络操作命令
- ifconfig:查看和设置网络设备 IP 地址。如
ifconfig查看网络接口信息,ifconfig eth0 192.168.0.1 netmask 255.255.255.0设置eth0接口的 IP 地址和子网掩码。 - ping:测试网络连通性。如
ping 127.0.0.1测试本地回环地址是否连通,ping -c5 127.0.0.1发送 5 个数据包测试。 - netstat:检测网络端口连接情况。如
netstat -a显示所有网络连接信息。 - ftp 和 bye:
ftp用于登录 FTP 服务器进行文件传输,如ftp 192.168.0.1登录,bye下线。 - telnet 和 logout:
telnet远程登录,如telnet 192.168.0.1登录,logout下线。 - 其他命令:
- echo:显示字符串。如
echo hello world显示hello world,echo -n输出后不换行。 - more 和 less:分屏显示文件内容。如
more filename或cat filename | more可分屏查看filename文件内容,less命令类似但翻页键不同。 - help 和 man:
help显示内嵌命令信息,man获取联机帮助。如man ls查看ls命令的详细帮助,help cd查看cd命令的内嵌帮助。 - cal:显示日历。如
cal 2000显示 2000 年日历,cal -y显示今年日历。 - date:显示和设置系统日期时间。如
date显示当前日期时间,date 122110322011.00(需 root 权限)设置系统时间,设置后需clock -w写入 CMOS。
- echo:显示字符串。如
二十二、Linux 操作系统默认的文件系统(Ext2、Ext3、Ext4)
- Ext2:于 1993 年发布,由 Rey Card 设计,是 GNU/Linux 系统中标准文件系统,存取文件性能好,尤其对中小型文件优势明显,支持 256 字节长文件名,在常见 Intel x86 兼容处理器系统中,簇最大为 4KB 时,单一文件大小上限为 2048GB,文件系统容量上限为 6384GB,但写入文件内容与元数据不同步,可能在断电等情况下导致文件系统不一致。
- Ext3:在 Ext2 基础上加入日志功能,由 Stephen tweedie 开发,能保持向前和向后兼容性,非正常关机后恢复时间短,通常仅需一秒(依赖硬件速度),数据以保持文件系统一致的方式写入磁盘。
- Ext4:自 Linux kernel 2.6.28 开始支持,是 Ext3 改进版,与 Ext3 兼容,可在线迁移,支持更大文件系统(达 1EB)和文件(16TB),有无限数量子目录,引入 extents 概念提高大文件操作效率,采用多块分配、延迟分配策略,具备快速 fsck、日志校验、“无日志” 模式、在线碎片整理等功能,inode 相关特性也更丰富,默认 inode 大小为 256 字节。
二十三、Linux 文件系统的分层结构(虚拟、实际、缓冲机制、设备驱动)及结构图
- 设备驱动程序:存储设备是文件系统物质基础,Linux 将设备视为文件统一管理,设备驱动程序控制设备启动、数据传输和中断处理等,通过统一接口与文件系统连接,实现文件 I/O 操作。
- 缓冲机制:文件系统与存储设备数据传输时采用缓存技术提高效率,VFS 使用 “缓存区缓存”“目录项缓存” 和 “i 结点缓存”,数据先暂存缓存区,读取时优先查找缓存,写入时先入缓存再分批写入磁盘。
- 实际文件系统:以磁盘分区划分,不同分区可采用不同文件系统,Linux 支持多种格式,如 Ext2/Ext3、JFS、XFS、ReiserFS、NFS 等,默认是 Ext2/Ext3/Ext4。
- 虚拟文件系统(VFS):为屏蔽不同实际文件系统差异,提供统一访问接口,位于具体文件系统之上,是可堆叠的抽象层,相关系统调用包括 mount、umount、statfs 等,用于文件系统挂载、卸载及信息获取等操作。
二十四、Ubuntu 目录结构的各目录含义
- /:根目录,是 Linux 文件系统的起始点。
- /bin:存放系统常用可执行文件(二进制文件),如
ls、cp、mkdir等基础系统命令,普通用户可使用。 - /boot:存储 Linux 内核和系统启动文件,如
Grub、lilo启动程序。 - /dev:包含所有设备文件,如硬盘、分区、键盘、鼠标、USB、
tty等,设备通过文件系统抽象访问,每个设备在该目录下有对应文件(设备节点),可通过cat /proc/devices查看加载设备驱动程序主设备号。 - /etc:存放系统配置文件,如
passwd存储用户账户信息,hostname记录主机名,/etc/fstab用于设置开机自动挂载分区。 - /home:用户主目录默认位置。
- /initrd:存放启动时挂载
initrd.img映像文件及载入设备模块的目录。 - /lib:存放共享库文件,供
/bin和/sbin中程序使用。 - /lost+found:在
ext2或ext3文件系统中,系统意外崩溃或关机产生的文件碎片存放于此,系统启动时fsck工具会检查修复。 - /media:即插即用存储设备挂载点自动创建目录,如 USB 盘、CDROM/DVD 挂载后在此生成目录存放临时文件。
- /mnt:常作为挂载文件系统的挂载点。
- /opt:用于存放可选文件和程序,自定义软件包或用户编译软件包可安装在此。
- /proc:存放标志为文件的进程,通过进程号或系统动态信息标识,如
cpu、硬盘分区、内存信息等。 - /root:根用户(超级用户)主目录。
- /sbin:超级权限用户
root的可执行命令存放处。 - /srv:存放系统提供的服务数据。
- /sys:将系统设备组织成层次结构,提供内核数据信息。
- /tmp:临时文件目录,
/var/tmp与之类似。 - /usr:存放与系统用户直接相关文件和目录,如应用程序及支持库文件。
- /var:通常存放长度可变文件,如日志文件和打印机文件。
二十五、文件系统的创建、挂载、卸载命令
- 创建文件系统:可使用
mkfs命令,它是通用总控程序,根据指定文件系统类型调用相应创建程序 “mkfs.fs”(fs可为ext2、ext3、vfat等)在选定磁盘分区创建文件系统。
也可利用特定工具,如mke2fs、mkfs.ext2、mkfs.vfat等直接创建特定类型文件系统。例如在虚拟机中添加磁盘分区后,可执行 “mkfs -t ext2 /dev/sdb” 创建ext2文件系统(需确认操作,创建时会显示文件系统相关参数信息)。 - 挂载文件系统:使用
mount命令,将文件系统安装到 Linux 文件系统目录层次结构的挂载点(必须是目录)上才能使用。例如 “mount /dev/sdb/datal/” 可将/dev/sdb设备挂载到/datal目录,可通过 “mount” 命令或查看/etc/mtab文件获取挂载信息。 - 卸载文件系统:使用
umount命令,要卸载的文件系统必须处于空闲状态,如 “umount /dev/sdb” 可卸载/dev/sdb设备的挂载。卸载后可通过查看/etc/mtab文件确认是否卸载成功,原挂载点目录内容将不可访问(若目录非空,卸载可能失败)。
二十六、Linux 图形化文本编辑器和命令行文本编辑器
- Gedit 图形化文本编辑器:可通过搜索按钮或在 shell 中输入 “
gedit” 启动。具有直观的图形界面,涵盖文件打开、保存、另存为等常规操作,能自动检测字符编码,支持在不同文件夹中查找定位文件,适用于习惯图形操作环境的用户进行简单文本处理。 - vi 命令行文本编辑器:在 Linux 和 Unix 系统广泛应用,由 Bill Joy 于 1978 年开发。具有强大编辑功能,可编写脚本、编辑文本与查找信息;适用性强,兼容多种 Unix 和 Linux 版本;基于命令操作,灵活性高、效率出众。通过在 shell 终端输入 “
vi [文件名]” 启动,未指定文件名则创建新文件,指定不存在文件名也创建新文件并定位光标至首行首列,指定存在文件则直接打开并定位光标。
二十七、Vim 编辑器工作模式及转换
Vim 编辑器有三种工作模式:命令模式、插入模式和底行模式。
- 命令模式:启动 Vim 后默认进入该模式,在此模式下可进行光标移动、文本删除、复制、粘贴等操作,通过相应快捷键进入其他模式。
- 插入模式:在命令模式下按
i、a、o等键可进入插入模式,用于输入文本内容。 - 底行模式:在命令模式下按
:键进入底行模式,可进行文件保存、退出、查找替换等操作,输入命令后按回车键执行。
二十八、Vim 编辑器的添加、删除、复制、粘贴、查找、替换、保存、退出命令
- 添加文本:
- 光标移动与定位:“
h”“j”“k”“l” 分别左、下、上、右移一个字符;“w”“b”“e” 以单词为单位移动光标;“( )”“{ }” 移至句首、句尾、段首、段尾;“$”“0” 移至行尾、行首;“[n] G” 定位到第n行;Home、End、PageUp、PageDown、Backspace、Space、Enter键及小键盘箭头键也可移动光标;Ctrl + U、Ctrl + D、Ctrl + B、Ctrl + F用于屏幕滚动。 - 插入命令:“
a”“A”“i”“I”“o”“O” 在不同位置开始接收输入。
- 光标移动与定位:“
- 删除文本:“
x” 删光标处字符,“X” 删左边字符,“D” 删一行(光标在中部则删右边文本),“dd” 删光标所在行,“J” 合并当前行与下一行;“d + 定位符” 删指定范围字符,命令前加数字扩大删除范围,Delete键同 “x” 命令。 - 复制、粘贴与剪切:“
yy” 复制光标所在行,“y0”“y$” 复制光标左右文本;“p” 粘贴文本至光标处,“dd” 剪切光标所在行。 - 查找与替换:
- 查找:在底行模式下用 “
/关键字” 从光标处查找,“n” 继续向后,到文件尾后再按 “n” 返回头部查找。 - 替换:“
s” 替换光标处字符,“S” 替换光标所在行;“r” 替换光标处单个字符,“R” 逐个替换光标后字符。在底行模式下用 “[替换起始处,替换结束处] s /被替换字符串 /替换字符串 /[g][c]” 替换指定范围字符串,“g” 替换所有匹配,“c” 互动确认。
- 查找:在底行模式下用 “
- 保存与退出:“
:q” 未修改时直接退出,“:q!” 强制不保存退出,“:wq!” 强制保存退出,“:e!” 放弃修改恢复原样,“:w” 保存当前文件,“:w 路径名/文件名” 另存为。
二十九、用户种类及 UID 划分
- 用户种类:分为超级用户(
UID = 0)、管理用户(ID号位于1 - 999)和普通用户(标识号从1000开始)。超级用户可访问任何程序和文件,管理用户用于运行系统服务程序,普通用户需账号密码登录访问资源。 - UID 作用:系统内部用
UID标识用户,与用户名一一对应,不同用户可共享UID,但口令、主目录、登陆Shell等可不同。
三十、用户和群组相关配置文件及含义,增加、删除命令
- 配置文件:
- /etc/passwd:每行记录一个用户信息,格式为
LOGNAME:PASSWORD:UID:GID:USERINFO:HOMEDIR:SHELL。其中LOGNAME是登陆名,PASSWORD早期存放加密口令,现多为 “x” 等特殊字符,UID是用户标识号,GID是用户所属组号,USERINFO记录用户个人情况,HOMEDIR是主目录,SHELL是登陆后运行的命令解释器。 - /etc/shadow:每行包括 8 个字段,格式为
username:passwd:lastchg:min:max:warn:inactive:expire。username与/etc/passwd中登陆名一致,passwd存放加密口令,其他字段分别表示从上次修改口令的天数、两次修改口令最小天数、密码有效最大天数、系统警告到密码失效天数、账号无登录活动但仍有效天数、账号生存期。 - /etc/group:格式为
groupname:passwd:GID:userlist。groupname是组名,passwd一般为空或 “*”,GID是组标识号,userlist是组内用户列表。
- /etc/passwd:每行记录一个用户信息,格式为
- 用户添加:命令行使用
useradd命令,如sudo useradd –u 1001 –d /home/jack –m –s /bin/bash jack,还可指定注释、所属组、登陆shell等选项;图形界面可通过系统管理的用户和组设置进行添加,需设置名称、密码、账户类型等信息。添加后需设置密码才能登录。 - 用户删除:
userdel命令可删除用户相关信息,sudo userdel –r jack可同时删除用户主目录及其文件。 - 组添加:命令行用
groupadd添加组,如groupadd user;也可手工编辑/etc/group文件添加。 - 组删除:
groupdel命令删除组;groupmod可修改组属性(如GID、组名);gpasswd可改变组成员、组密码等,如gpasswd -a student user1添加用户到组,gpasswd -d student user1从组删除用户。图形界面可在系统管理的组设置中操作。
三十一、网络配置及测试命令:ifconfig, ping, netstat 等
- IP 地址配置文件:
/etc/network/interfaces,/etc/netplan/01-network-也可配置网络,如设置网关、域名服务器等。 - 主机名称配置文件:
/etc/hostname,用hostname命令查看当前主机名,hostname newname设置主机名,系统启动时读取该文件获取主机名。 - DNS 配置文件:可在
/etc/hosts中设置主机名和对应IP地址进行静态查询,访问DNS服务器查询需设置/etc/resolv.conf文件。 - 网络测试命令:
- ifconfig:查看网卡设置,如
ifconfig查看活动接口IP信息,ifconfig -a查看所有网卡配置,ifconfig eth0查看特定网卡配置,还可配置网卡IP地址(如ifconfig eth0 192.168.84.132)和更改网卡地址及子网掩码。 - ifup/ifdown:启用(
ifup eth0)或禁止(ifdown eth0)网卡,也可用ifconfig eth0 up/down实现。 - route:查看路由表(
route),包括目标网段或主机、网关地址、网络掩码等信息,还可添加(route add -net 10.0.0.0/24 gw 192.168.1.1)或删除(route del -net 10.0.0.0/24)静态路由,添加或删除默认网关(如route add default gw 192.168.1.1、route del default gw 192.168.1.1)。 - ping:测试网络连通性,如
ping 202.99.160.68,按ctrl+C中断。 - traceroute:跟踪数据包路径,需先安装(
apt-get install traceroute),如traceroute 202.99.160.68。 - netstat:显示与
IP、TCP和UDP协议相关统计数据,如-a列出所有socket,-p显示使用Socket的程序信息,-r显示路由表,-t显示TCP连线状况,-u显示UDP连线状况。
- ifconfig:查看网卡设置,如
三十二、安装 FTP 协议,Samba 协议的目的
- FTP 服务器:
- 安装目的:实现文件在不同计算机间的传输,FTP 客户机可对服务器发出命令进行下载、上传、创建或改变目录等操作,FTP 服务运行在 20(数据传输)和 21(控制流)端口。
- Samba 服务器:
- 安装目的:在 Linux 系统上为 Windows 客户机提供文件服务器功能,利用 Linux 的稳定性和低成本优势,适用于中小企业内网。
三十三、DHCP 工作流程
- 工作流程:
- 发现阶段:DHCP 客户机发送
DHCPDISCOVER请求IP租约。 - 提供阶段:DHCP 服务器回应
DHCP OFFER提供IP租约。 - 选择阶段:客户机发送
DHCP REQUEST选择IP租约。 - 确认阶段:服务器发送
DHCPACK确认IP租约。此外还有重新登录和更新租约过程。
- 发现阶段:DHCP 客户机发送
三十四、shell 的便捷操作
- 历史命令功能:
history [option] [arg…],无参数显示历史命令清单,可指定正整数显示最后若干行,或指定文件名进行相关操作。常用选项如-a添加、-n读取、-r替换、-w写入、-c删除。 - 执行历史命令:以
!开头,如!!重复上条,!n执行第n条,!-n执行倒数第n条,!string执行以string开头的,!?string?执行包含string的。 - 配置历史命令环境:
HISTFILE改变存放文件,HISTSIZE设定保留个数。 - 自动补全功能:输入目录或文件名开头按
Tab键补全。 - 别名功能:
alias [name[=value]]…,定义时用单引号防歧义,无参数显示别名清单。 - 取消别名:
unalias name…或unalias -a删除所有别名。
三十五、四种类型 shell 变量的定义及使用
- 本地变量(用户自定义变量):在当前
shell生命期脚本使用,variable-name=value设置,变量名大写,引用加$,用echo显示,unset删除,set显示所有,可结合显示、设置默认值、保存系统命令参数、设只读变量(readonly)。 - 环境变量:系统建立,用于所有用户进程,个人定义需
export导出。如HOME、PATH等,设置用VARIABLE-NAME=value后接export,env查看,unset清除,set可查看含本地和环境变量。 - 位置变量:向脚本传参,前 9 个直接
$1-$9访问,十以上用${10}等,$0表示脚本名或命令本身。 - 预定义变量:
shell启动时定义,用户不能重定义,如$#(参数个数)、$*(所有参数字符串)、$$(进程ID)、$!(后台进程PID)、$?(命令退出状态)。
三十六、条件测试的格式及使用
- 文件状态测试:
test condition或[ condition ](注意方括号条件两边空格),如-r(可读)、-w(可写)、-x(可执行)等判断文件属性,test和[ ]形式结果相同。 - 逻辑操作符号:
-a(与)、-o(或)、!(否)用于比较两个文件状态。 - 字符串测试:
test “string”等格式,=和!=判断相等不等,-z空串,-n非空串,有空格时字符串需加引号。 - 数值测试:
test number numeric_operator number或[ number numeric_operator number ],数字可加引号,操作符有-eq(相等)等。
三十七、数值运算(let、$(())、expr 等)
- let 命令:
let express-list,表达式内变量不用加$,可进行算术运算。 - Bash 扩展:
$((expression))计算并返回值。 - expr 命令:
expr args,计算args值,+等运算符两边需加空格,返回标准输出。
三十八、控制流结构使用(if、case、for、while、until 等)
- if 语句:
if [ 条件命令 ]; then命令序列fi,可多层嵌套,还有if …else…fi、if …elif…fi形式。 - case 语句:
case 变量值 in模式 1)命令列表 1;;…*)命令列表n;; esac。 - for 语句:
for 变量 in 字符串列表 do命令列表done。 - while 循环:
while [ 条件 ] do命令列表done。 - until 语句:
until [ 条件 ] do命令列表done
三十九、内嵌命令 break、continue、echo、read、export 等
- break:退出
for、while、until或case语句。 - continue:结束本次循环进入下一次。
- echo:在屏幕显示字符串,有
-n(不换行)、-e(特殊字符处理)选项。 - read:从键盘或文件读数据给变量,以空格分割,按回车或
CTRL+D结束。 - export:导出变量给子进程。
四十、编写简单脚本程序,涉及从键盘或文件读入,从屏幕显示或写入文件
收起
bash
#!/bin/bash
# 从键盘读入姓名、性别、年龄并显示,同时写入文件
read name sex age
echo "Name: $name"
echo "Sex: $sex"
echo "Age: $age"
echo "$name $sex $age" >> output.txt
# 从文件读入内容并显示
while read LINE
do
echo $LINE
done < input.txt
四十一、GCC 编译过程的具体步骤
- 预处理(Pre-Processing):命令
GCC首先调用cpp进行预处理,对源代码文件中的文件包含、预编译语句进行分析,使用-E参数。 - 编译(Compilation):调用
cc进行编译,根据输入文件生成以.s为后缀的汇编文件,使用-S参数。 - 汇编(Assembling):汇编过程调用
as进行工作,将.S和.s为后缀的汇编语言文件经过预编译和汇编成以.o为后缀的目标文件,使用-c参数。把汇编代码转换为机器可识别的目标代码。 - 连接(Linking):当所有的目标文件都生成之后,调用
ld来完成最后的关键性工作。在连接阶段,所有的目标文件被安排到可执行程序中恰当的位置上,同时,该程序所调用到的库函数也从各自所在的档案库中连到合适的地方,使用-o参数。
四十二、gcc 命令的用法、选项的含义
- 基本用法:
gcc [option | filename],其中option为gcc使用时的选项,filename为gcc要处理的文件。例如gcc -o hello hello.c表示用gcc编译hello.c文件,并输出名为hello的可执行文件。 - 常用选项:
- -o:指定输出的可执行文件名。
- -c:只要求编译器输出目标代码,而不输出可执行文件。
- -g:在编译的时候提供以后对程序进行调试的信息。
- -O:对程序进行优化编译、连接,提高执行效率,但会使编译、连接速度变慢。
- -O2:比
-O更好的优化编译、连接,编译、连接过程更慢。 - -I dirname:将
dirname所指出的目录加入到程序头文件目录列表中,用于预编译过程。 - -L dirname:将
dirname所指出的目录加入到程序函数档案库文件的目录列表中,用于连接过程。
四十三、make 工具的一般语法规则及执行命令,makefile 文件的编写及简化、优化
- 一般语法规则及执行命令:
make工作时首先读入所有的makefile,如果该makefile文件中通过include包含有其他makefile文件,则读入被包含的makefile文件;接着初始化文件中的变量;推导隐晦规则,并分析所有规则;为所有目标文件创建依赖关系链;根据依赖关系,决定哪些目标要重新生成;最后执行生成命令。- 执行命令为
make,在当前目录下按顺序找寻文件名为 “GNUmakefile”、“makefile”、“Makefile” 的文件作为makefile文件,通常使用 “Makefile”。若要指定特定的Makefile,可使用make -f或make --file参数。
- makefile 文件编写及简化、优化:
- 编写格式:
target: components,TAB rule。target是目标文件(可以是Object File、执行文件或标签),components是生成target所需要的文件或目标,rule是make需要执行的命令(任意的Shell命令)。例如:main: main.o mytool1.o mytool2.o,gcc -o main main.o mytool1.o mytool2.o表示main目标文件依赖于main.o、mytool1.o、mytool2.o,生成规则是用gcc进行连接。 - 变量使用:可以定义用户自定义变量(如
objects = main.o mytool1.o mytool2.o)、预定义变量、自动变量及环境变量。变量在声明时需赋予初值,使用时在变量前面加上$符号,用()或{}括起来。定义变量有递归展开式(=)和直接展开式(:=)两种方式。 - 自动变量:
$@表示目标文件,$^表示所有的依赖文件,$<表示第一个依赖文件。利用这些自动变量可简化makefile文件,如main: $(objects),gcc -o $@ $^。 - 缺省规则:如
.c.o:,gcc -c $<表示所有的.o文件都依赖于相应的.c文件。每个Makefile中应写一个清空目标文件(.o和执行文件)的规则,如clean: rm $(objects),为避免因当前目录存在clean文件而导致命令不执行,可使用.PHONY : clean指明clean是伪目标。
- 编写格式:
四十四、GDB 调试工具的相关命令
- 启动方式:
gdb <program>:调试program执行文件,一般在当前目录下。gdb <program> core:同时调试一个运行程序和core文件(程序非法执行后core dump产生的文件)。gdb <program> <PID>:调试指定进程ID的服务程序,program应在PATH环境变量中可搜索到。
- 基本命令:
- 查看文件及变量值:
(gdb) l列出产生执行文件的源代码的一部分;(gdb) p 变量名查看程序运行时变量的值。 - 设置断点:
(gdb) b 行号或函数名<条件表达式>在代码里设置断点,使程序执行到此处挂起;(gdb) tbreak[文件名:]行号或函数名<条件表达式>设置临时断点,到达后自动删除。 - 查看断点情况:
(gdb) info b查看所设断点信息。 - 运行代码:
(gdb) r执行当前被调试的程序;(gdb) c继续执行函数,直到函数结束或遇到新的断点。 - 单步运行:
(gdb) n执行一行源代码但不进入函数内部;(gdb) s执行一行源代码且进入函数内部;(gdb) step单步恢复程序运行且进入函数调用;(gdb) next单步恢复程序运行但不进入函数调用;(gdb) finish运行程序直到当前函数完成返回。 - 其他命令:
(gdb) watch 变量名监视变量的值变化;(gdb) make不退出gdb重新产生可执行文件;(gdb) shell 命令不离开gdb执行UNIX shell命令;(gdb) kill终止正在调试的程序;(gdb) quit终止gdb。
- 查看文件及变量值:
四十五、编写简单 C 语言程序,完成编写、编译、执行等过程
- 编写程序:例如以下程序计算阶乘并在主函数中调用。
// factorial.c
#include<stdio.h>
int factorial(int n)
{
if (n <= 1) return 1;
else return factorial(n - 1) * n;
}
// main.c
#include<stdio.h>
#include<stdlib.h>
int factorial(int n);
int main(int argc, char* argv[]) {
int n;
if (argc < 2) {
printf("Usage:%s n\n", argv[0]);
return -1;
}
else {
n = atoi(argv[1]);
printf("Factorial of %d is %d.\n", n, factorial(n));
return 0;
}
}
- 编译过程:
- 可以使用
gcc –o fac main.c factorial.c命令将main.c和factorial.c一起编译连接成可执行文件fac。 - 也可以分别编译各个源文件,再进行连接。如
gcc -c main.c、gcc -c factorial.c,然后 `gcc main.o factorial.o
- 可以使用
2.执行程序:
1.在终端中输入 ./fac 6(假设实参数为 6),输出结果为 Factorial of 6 is 720。
1709

被折叠的 条评论
为什么被折叠?



