【Linux游记】基础指令篇
枫の个人主页
你不能改变过去,但你可以改变未来
算法/C++/数据结构/C/Linux
Hello,这里是小枫。C语言与数据结构和算法初阶两个板块都更新完毕,我们继续来学习C++,C++更新的同时我也会更新Linux。Linux操作系统是很经典的操作系统,因此学习起来注定枯燥无味,西游记大家都看过吧~,我希望能带着大家一起跨过九九八十一难,降伏各类难题,学会Linux,我会尽我所能,以通俗易懂、幽默风趣的方式带给大家形象生动的知识,也希望大家遇到困难不退缩,遇到难题不放弃,学习师徒四人的精神!!!故此得名【Linux游记】
话不多说,让我们一起进入今天的学习吧~~~
一、初识 Linux 操作系统
学习 Linux 系统编程,需从多个基础方面入手:
- 初识 shell 命令及相关背景知识
- 初步使用 40 + 个常用 Linux 命令
- 掌握 Linux 权限概念与思想,深度理解 “权限”
- 初步了解 Linux 目录结构含义
- 了解 Linux 相关知识:目录结构、路径、重定向、管道操作等
二、Linux 背景知识
(一)发展史
- UNIX 发展历程
- 1968 年,通用电器公司、贝尔实验室和麻省理工学院的研究人员开发了 Multics 操作系统,其在多任务文件管理和用户连接中融入了许多新概念。
- 1969 - 1970 年,AT&T 贝尔实验室的 Ken Tompson 和 Dennis Ritchie 开发了 UNIX 系统,它运行在小型机上,是高效的多用户、多任务操作系统。
- 第一个 UNIX 版本免费提供给多所知名大学计算机系使用,1972 年贝尔实验室开始发放商业版本并授权给不同用户,加州大学伯克利分校对其进行改进后成为标准。
- 1975 年,伯克利下属部门 BSD 发行了自己的 UNIX 版本,与 AT&T 贝尔实验室版本形成竞争,其他独立开发的版本也逐渐出现。
- 1980 年,微软开发了 Xenix 的 UNIX PC 版本,AT&T 发行了第一个商业版本 System Ⅲ,后被 System Ⅴ 替代;同时 BSD 版本不断发展,BSD Release 4.2 包含高级文件管理器和基于 TCP/IP 协议的网络特点,被许多厂商采用。
- 80 年代中期,出现基于 AT&T 和 BSD 版本的两个竞争标准;AT&T 建立 UNIX 系统实验室以综合不同版本,开发标准系统。
- 1991 年,UNIX 综合实验室发行 System V Release 4,其他公司成立 Open Software Foundation (OSF) 产生自己的标准版本,形成两个竞争的商业版本。
- 1993 年,AT&T 将 UNIX 转卖给 Novell 公司,Novell 发行 UNIXWare,SUN 公司将 System V Release 4 融入 SUN OS 发行 Solaris;两个竞争的 UNIX 图形用户界面合并为通用平台环境 (CDE)。
- Linux 发展历程
- 1991 年 10 月 5 日,赫尔辛基大学研究生 Linus Benedict Torvalds 在 Usenet 新闻组宣布编制出类似 UNIX 的小操作系统 Linux,受 Minix 系统启发;真正的 Linux 0.01 版本未发布,仅在 FTP 站点提供源代码。
- Torvalds 于 10 月 5 日发布的 Linux 0.02 版能运行 GNU Bourne Again Shell (bash)、GNU 的 C 编译程序 (gcc) 等,后续版本不断更新,1994 年公布正式的 1.0 版本。
- Windows 发展史对比
- MS-DOS 版本有 1.0、2.0、3.0、3.1 等。
- Windows 系列包括 Win95、Win98、Win ME、3.X、4.0、Win2000、XP、Vista、Win7、Win8、Windows 10 等。
- NT 版本有 Workstation 3.1、4.0、Win2000、Win2003、Win2008、Win2012 等服务器版本,时间跨度从 1985 年到 2015 年。
(二)开源特性
Linux 是自由和开放源代码的类 UNIX 操作系统,内核由林纳斯・托瓦兹于 1991 年首次发布,加上用户空间应用程序后构成完整操作系统。严格来说,Linux 指内核,而通常所说的 Linux 是基于其内核的完整操作系统,包括 GUI 组件和实用工具。
GNU 通用公共许可协议(GNU GPL 或 GPL)是广泛使用的自由软件许可协议,基于 GPL 开发的衍生产品发布时必须采用 GPL 许可证并公开源代码。
Linux 是自由软件和开放源代码软件的典型例子,遵循 GNU 通用公共许可证,个人和机构可自由使用、修改和再发布其底层源代码,随着发展,集成的开源软件和实用工具也得到普及,成为开源软件的代名词。
(三)官网
Linux 内核的官方网站是 kernel 官网。
(四)企业应用现状
- 服务器领域:Linux 服务器操作系统市场份额不断增长,在政府、金融、农业、交通、电信等关键领域广泛应用,目前占据 75% 的市场份额,成为服务器操作系统的中坚力量。
- 桌面领域:国内如中标麒麟 Linux、红旗 Linux、深度 Linux 等厂商推出的桌面操作系统在政府、企业、OEM 等领域应用广泛,SUSE、Ubuntu 也有相关桌面系统,但在易用性、软硬件兼容性等方面与 Windows 有差距。
- 移动嵌入式领域:Linux 低成本、定制功能强、移植性好,在手机、平板电脑、路由器等领域广泛应用,Android 操作系统基于 Linux 内核,2015 年全球市场份额达 84.6%,思科、阿里云等也有基于 Linux 的定制系统。
- 云计算 / 大数据领域:Linux 在云计算、大数据平台构建中占据核心优势,86% 的企业使用 Linux 进行相关平台构建,正取代 Unix 成为主流。
(五)主要发行版本
发行版本 | 特点 | 适用人群 |
---|---|---|
Debian | 运行极其稳定 | 系统管理员和高级用户 |
Ubuntu | Debian 的衍生版,最受欢迎的免费操作系统 | 新手用户 |
红帽企业级 Linux | 首款面向商业市场的 Linux 发行版,有服务器版本,支持多种处理器架构 | 企业用户,需通过红帽认证的系统管理员 |
CentOS | 基于红帽企业级 Linux 免费源代码重构,与红帽企业级 Linux 外观和行为相似,使用 YUM 管理软件包 | 不想支付高额费用又想使用类似红帽企业级 Linux 的用户 |
Fedora | 红帽公司的测试平台,有庞大的用户论坛和较多软件包 | 想尝试最先进技术的用户 |
Kali Linux | Debian 的衍生版,用于渗透测试,前身是 Backtrack,自带许多渗透测试工具,使用 APT 管理软件包 | 渗透测试人员、文明黑客 |
三、OS 概念与定位
操作系统的根本要义是 “使计算机更好用”,它负责内存管理、进程管理、文件管理、驱动管理等,用户通过指令操作、开发操作、管理操作与操作系统交互,操作系统通过驱动程序与底层硬件(如网卡、硬盘等)交互。
四、使用 XShell 远程登录 Linux
(一)关于 Linux 桌面
工作中很少使用图形界面,因为图形界面会占用更多系统资源,且在服务器环境中,命令行操作更高效、稳定和灵活。
(二)下载安装 XShell
XShell 是远程终端软件,官网为 https://www.netsarang.com/products/xsh_overview.html,下载安装时选择 "home/school" 为免费版本。
(三)查看 Linux 主机 IP
在终端输入 ifconfig
指令可查看 IP 地址。
(四)使用 XShell 登陆主机
在 XShell 终端输入 ssh [ip]
(ip 为 ifconfig
查到的结果),网络畅通时输入用户名密码即可登录。
(五)XShell 下的复制粘贴
- 复制:
ctrl + insert
(部分电脑需配合fn
键) - 粘贴:
shift + insert
ctrl + c / ctrl + v
不可用
五、Linux 下基本指令
(一)ls 指令
- 语法:
ls [选项] [目录或文件]
- 功能:列出目录下的子目录与文件,或文件的相关信息。
- 常用选项:
-a
:列出所有文件,包括以.
开头的隐含文件。-d
:将目录像文件一样显示,而非其下文件,如ls –d 指定目录
。-i
:输出文件的 i 节点索引信息,如ls –ai 指定文件
。-k
:以 k 字节表示文件大小,如ls –alk 指定文件
。-l
:列出文件详细信息。-n
:用数字的 UID、GID 代替名称。-F
:在文件名后附字符说明文件类型,*
表示可执行普通文件;/
表示目录;@
表示符号链接;|
表示 FIFOs;=
表示套接字。-r
:对目录反向排序。-t
:以时间排序。-s
:在文件名后输出文件大小。-R
:列出所有子目录下的文件(递归)。-1
:一行只输出一个文件。
(二)pwd 命令
- 语法:
pwd
- 功能:显示用户当前所在的目录。
- 常用选项:无。
(三)cd 指令
- Linux 理论知识:路径的认识
- Linux 系统中,文件和目录组成目录树,普通文件是叶子节点,目录可能是叶子(空目录)或中间节点。
- 路径用于快速定位文件,具有唯一性,绝对路径从
/
开始,不依赖其他目录;相对路径相对于当前目录。
- 语法:
cd 目录名
- 功能:改变工作目录到指定目录。
(四)touch 指令
- 语法:
touch [选项]... 文件...
- 功能:更改文档或目录的日期时间(存取时间和更改时间),或新建不存在的文件。
- 常用选项:
-a
:仅更改访问时间。-c
:仅更改修改时间。
(五)mkdir 指令
- 语法:
mkdir [选项] dirname...
- 功能:在当前目录创建名为 “dirname” 的目录。
- 常用选项:
-p/--parents
:若路径中某些目录不存在,自动建立,可一次建立多个目录。
(六)rmdir 指令 && rm 指令
- rmdir 指令
- 语法:
rmdir [-p] [dirName]
- 功能:删除空目录。
- 常用选项:
-p
:子目录删除后父目录为空则一并删除。
- 语法:
- rm 指令
- 语法:
rm [-f-i-r-v] [dirName/dir]
- 功能:删除文件或目录。
- 常用选项:
-f
:即使文件为只读,直接删除。-i
:删除前逐一询问确认。-r
:删除目录及其下所有文件。
- 语法:
(七)man 指令
- 功能:通过查看联机手册获取命令帮助。
- 语法:
man [选项] 命令
。 - 常用选项:
-k
:根据关键字搜索联机帮助。num
:只在第 num 章节查找。-a
:显示所有章节的内容。
- man 手册章节解释:
- 1:普通命令;2:系统调用;3:库函数;4:特殊文件;5:文件格式;6:游戏相关;7:附件和变量;8:系统管理命令;9:略。
(八)cp 指令
- 语法:
cp [选项] 源文件或目录 目标文件或目录
。 - 功能:复制文件或目录;若指定多个文件或目录,且最后目的地是已存在目录,会将前面的所有文件或目录复制到该目录。
- 常用选项:
-f
或--force
:强行复制,不论目标是否存在。-i
或--interactive
:覆盖前询问用户。-r
:递归处理,将目录下的文件与子目录一并处理。
(九)mv 指令
- 语法:
mv [选项] 源文件或目录 目标文件或目录
。 - 功能:
- 视 mv 命令中第二个参数类型的不同(是目标文件还是目标目录),mv 命令将文件重命名或将其移至一个新的目录中。
- 当第二个参数类型是文件时,mv 命令完成文件重命名,此时源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。
- 当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv 命令将各参数指定的源文件均移至目标目录中。
- 常用选项:
-f
:强制,如果目标文件已经存在,不会询问而直接覆盖。-i
:若目标文件已经存在时,会询问是否覆盖。
-
(十)cat 指令
- 语法:
cat [选项] [文件]
- 功能:查看目标文件的内容。
- 常用选项:
-b
:对非空输出行编号,空行不做编号。-n
:对输出的所有行编号。-s
:不输出多行空行。
-
(十一)more 指令
- 语法:
more [选项] [文件]
- 功能:类似 cat 命令,用于查看文件内容,可分页显示。
- 常用选项:
-n
:指定输出行数。q
:退出 more。
-
(十二)less 指令
- 语法:
less [参数] 文件
- 功能:对文件或其它输出进行分页显示,功能比 more 更强大,可前后翻阅文件,支持搜索。
- 常用选项:
-i
:忽略搜索时的大小写。-N
:显示每行的行号。/字符串
:向下搜索 “字符串”。?字符串
:向上搜索 “字符串”。n
:重复前一个搜索。N
:反向重复前一个搜索。q
:退出。
-
(十三)head 指令
- 语法:
head [参数]... [文件]...
- 功能:显示文件的开头部分内容,默认显示开头 10 行。
- 常用选项:
-n<行数>
:显示指定的行数。
-
(十四)tail 指令
- 语法:
tail [必要参数] [文件]
- 功能:显示指定文件末尾内容,常用查看日志文件,可动态刷新。
- 常用选项:
-f
:循环读取,实时显示新增内容。-n<行数>
:显示指定的行数。
-
(十五)date 指令
- 语法:
date [OPTION]... [+FORMAT]
- 功能:显示或设置系统时间。
- 常用格式标记:
%H
:小时(00..23)%M
:分钟(00..59)%S
:秒(00..61)%d
:日(01..31)%m
:月份(01..12)%Y
:完整年份(0000..9999)%F
:相当于%Y-%m-%d
%X
:相当于%H:%M:%S
- 时间戳相关:
- 时间转时间戳:
date +%s
- 时间戳转时间:
date -d@时间戳
- 时间转时间戳:
-
(十六)cal 指令
- 语法:
cal [参数] [年份]
- 功能:查看公历日历。
- 常用选项:
-3
:显示系统前一个月、当前月、下一个月的月历。-j
:显示在当年中的第几天。-y
:显示当前年份的日历。
-
(十七)find 指令
- 语法:
find pathname -options
- 功能:在目录结构中搜索文件,并执行指定的操作。
- 常用选项:
-name
:按照文件名查找文件。
-
(十八)which 指令
- 功能:搜索系统指定的命令的路径。
-
(十九)whereis 指令
- 功能:用于找到程序的源文件、二进制文件或手册。
-
(二十)alias 指令
- 功能:设置命令的别名。
-
(二十一)grep 指令
- 语法:
grep [选项] 搜寻字符串 文件
- 功能:在文件中搜索字符串,将找到的行打印出来。
- 常用选项:
-i
:忽略大小写。-n
:输出行号。-v
:反向选择,显示没有搜寻字符串的行。
-
(二十二)top 指令
- 功能:实时显示系统中各个进程的资源占用情况。
- 常用选项:
-d
:刷新的时间间隔。-n
:刷新的次数。q
:退出。
-
(二十三)zip/unzip 指令
- 语法:
zip 压缩文件.zip 目录或文件
;unzip 压缩文件.zip [选项]
- 功能:将目录或文件压缩成 zip 格式,或解压 zip 格式文件。
- 常用选项:
zip
的-r
:递归处理,将指定目录下的所有文件和子目录一并处理。unzip
的-d
:指定解压目录。
-
(二十四)tar 指令
- 语法:
tar [-cxtzjvf] 文件与目录 ....
- 功能:打包、压缩或解压文件。
- 常用参数:
-c
:建立压缩文件。-x
:解开压缩文件。-t
:查看压缩文件内的文件。-z
:使用 gzip 压缩。-j
:使用 bzip2 压缩。-v
:显示压缩过程。-f
:指定压缩文件名,后接文件名。-C
:解压到指定目录。
-
(二十五)bc 指令
- 功能:进行浮点运算。
-
(二十六)uname 指令
- 语法:
uname [选项]
- 功能:获取电脑和操作系统的相关信息。
- 常用选项:
-a
:详细输出所有信息,包括内核名称、主机名、内核版本号等。
-
六、重要热键
[Tab]
:具有 “命令补全” 和 “档案补齐” 的功能。[Ctrl]-c
:让当前的程序停止。[Ctrl]-d
:通常代表 “键盘输入结束”,也可用来取代 exit。-
七、关机命令
- 语法:
shutdown [选项]
- 常见选项:
-h
:将系统的服务停掉后,立即关机。-r
:在将系统的服务停掉之后重新启动。-t sec
:过 sec 秒后关机。
-
八、shell 命令及运行原理
Linux 严格意义上是一个操作系统的 “核心 (kernel)”,用户不能直接使用 kernel,而是通过 “外壳” 程序 shell 与 kernel 沟通。shell 是命令行解释器,主要功能是将使用者的命令翻译给核心处理,同时将核心的处理结果翻译给使用者。
九、Linux 权限管理
(一)用户分类
- 超级用户(root):可在 Linux 系统下做任何事情,不受限制,命令提示符是 “#”。
- 普通用户:在 Linux 下做有限的事情,命令提示符是 “$”。
- 切换用户命令:
su [用户名]
,如从普通用户切换到 root 用户使用su root
(root 可省略),需输入 root 密码。 -
(二)文件访问者分类
- 所有者(u - User)
- 所有者所在组的用户(g - Group)
- 其它用户(o - Others)
-
(三)文件类型和访问权限
- 文件类型:
d
:文件夹-
:普通文件l
:软链接(类似 Windows 的快捷方式)b
:块设备文件(如硬盘、光驱等)p
:管道文件c
:字符设备文件(如屏幕等串口设备)s
:套接口文件
- 基本权限:
- 读(r/4):对文件可读取内容,对目录可浏览信息。
- 写(w/2):对文件可修改内容,对目录可删除移动文件。
- 执行(x/1):对文件可执行,对目录可进入。
- “—”:不具有该项权限。
-
(四)权限设置方法
- chmod:设置文件的访问权限
- 格式:
chmod [参数] 权限 文件名
- 常用选项:
-R
递归修改目录文件的权限。 - 权限设置格式:
- 用户表示符 +/-= 权限字符,如
chmod u+w /home/abc.txt
、chmod o-x /home/abc.txt
。 - 三位 8 进制数字,如
chmod 664 /home/abc.txt
、chmod 640 /home/abc.txt
。
- 用户表示符 +/-= 权限字符,如
- 格式:
- chown:修改文件的拥有者
- 格式:
chown [参数] 用户名 文件名
- 举例:
chown user1 f1
、chown -R user1 filegroup1
。
- 格式:
- chgrp:修改文件或目录的所属组
- 格式:
chgrp [参数] 用户组名 文件名
- 常用选项:
-R
递归修改。 - 举例:
chgrp users /abc/f2
。
- 格式:
- umask:查看或修改文件掩码
- 新建文件默认权限 = 0666,新建目录默认权限 = 0777,实际权限 = mask & ~umask。
- 格式:
umask 权限值
,如umask 044
设置 - 举例:
umask
查看当前掩码值,umask 044
设置掩码值。 -
(五)目录权限特殊说明
- 可执行权限:无此权限则无法
cd
到目录中。 - 可读权限:无此权限则无法用
ls
等命令查看目录中的文件内容。 - 可写权限:无此权限则无法在目录中创建或删除文件。
-
(六)粘滞位
为解决用户可删除目录中他人文件的问题,Linux 引入粘滞位概念。当目录被设置为 “粘滞位”(用
chmod +t
),该目录下的文件只能由超级管理员、该目录的所有者或该文件的所有者删除。 -
十、file 指令
- 功能:辨识文件类型。
- 语法:
file [选项] 文件或目录...
- 常用选项:
-c
:详细显示指令执行过程,便于排错。-z
:尝试解读压缩文件的内容。
-
十一、使用 sudo 分配权限
- 修改
/etc/sudoers
文件分配权限
格式:接受权限的用户登陆的主机 =(执行命令的用户) 命令 - 使用 sudo 调用授权的命令
- 格式:
$ sudo –u 用户名 命令
- 举例:
$ sudo -u root /usr/sbin/useradd u2
- 格式:
-
十二、其他常用命令分类
- 安装和登录命令:login、shutdown、halt、reboot、install、mount、umount、chsh、exit、last 等。
- 文件处理命令:file、mkdir、grep、dd、find、mv、ls、diff、cat、ln 等。
- 系统管理相关命令:df、top、free、quota、at、lp、adduser、groupadd、kill、crontab 等。
- 网络操作命令:ifconfig、ip、ping、netstat、telnet、ftp、route、rlogin、rcp、finger、mail、nslookup 等。
- 系统安全相关命令:passwd、su、umask、chgrp、chmod、chown、chattr、sudo、ps、who 等。
- 其它命令:tar、unzip、gunzip、unarj、mtools、man、unendcode、uudecode 等。
十三、结语
今日C++到这里就结束啦,如果觉得文章还不错的话,可以三连支持一下。感兴趣的宝子们欢迎持续订阅小枫,小枫在这里谢谢宝子们啦~小枫の主页还有更多生动有趣的文章,欢迎宝子们去点评鸭~C++的学习很陡,时而巨难时而巨简单,希望宝子们和小枫一起坚持下去~你们的三连就是小枫的动力,感谢支持~