Linux系统编程—Linux基础指令

发布于:2025-08-16 ⋅ 阅读:(13) ⋅ 点赞:(0)

第一章:Linux背景

1. 发展史

本⻔课程学习Linux系统编程,你可能要问Linux从哪⾥来?它是怎么发展的?在这⾥简要介绍Linux的发展史。要说Linux,还得从UNIX说起。

UNIX发展的历史

  • 1968年,⼀些来⾃通⽤电器公司、⻉尔实验室和⿇省理⼯学院的研究⼈员开发了⼀个名叫Multics的特殊操作系统。Multics在多任务⽂件管理和⽤⼾连接中综合了许多新概念。
  • 1969−1970年,AT&T的⻉尔实验室研究⼈员Ken Tompson和Dennis Ritchie,在采⽤很多Multics特点的基础上开发了UINX系统。它运⾏在⼩型机上,满⾜了系统对科研环境的要求。从产⽣开始,UNIX就是⼀个有价值的、⾼效的、多⽤⼾和多任务的操作系统。
  • UNIX从满⾜个⼈的设计需求开始,逐步成⻓为由许多不同开发商所⽀持的标准软件产品。
  • 第⼀个UNIX版本是免费给许多知名⼤学的计算机系使⽤的。
  • 1972年,⻉尔实验室开始发放商业版本,并且给不同的⽤⼾授权使⽤这个系统,使⽤者之⼀是加州⼤学伯克莱分校的计算机系。伯克莱给系统增加了许多新的特点,后来成为了标准。
  • 1975年伯克莱由下属部⻔BSD发⾏了⾃⼰的UNIX版本。UNIX的BSD版本成为AT&T⻉尔实验室版本的主要竞争者,⽽其它的独⽴开发出的UNIX版本也开始萌⽣。
  • 1980年微软公司开发了叫做Xenix的UNIX PC版本。AT&T发⾏了第⼀个商业版本。名叫SystemⅢ,后来被成为对商⽤软件产品良好⽀持的System Ⅴ所替代。
  • 同时UNIX的BSD版本不断发展,在70年代末期,BSD UNIX成为了国防部的⾼科技研究机构科研项⽬的基础。其结果,伯克莱发⾏了⼀个叫做BSD Release 4.2的有效版本。
  • 它包括了⾼级的⽂件管理器和基于TCP/IP⽹络协议的⽹络特点。现在TCP/IP被Internet所使⽤。BSD Release 4.2被许多⼚商所采⽤,例如SUN Microsystem。
  • UNIX不同版本的出现导致了UNIX标准的需要,软件开发商不知道他们的程序运⾏在哪些版本上⽐较合适。
  • 到80年代中期,两个竞争的标准出现了,⼀个是基于AT&T的UNIX版本,另⼀个是BSD版本。在今天的书店⾥你能发现分别适⽤于这两个版本的不同的UNIX的书,⼀些是System V,另⼀些集中在BSD UNIX。
  • AT&T建⽴了⼀个叫UNIX系统实验室的新组织,它的作⽤就是综合UNIX的不同版本,集中开发⼀个标准系统。
  • 1991年,UNIX综合实验室综合了System V Release3,SUN OS和Xenix的所有特点,发⾏了System V Release 4。为了与System V Release 4 竞争,⼀些其它公司,如IBM和惠普OpenSoftware Foundation(OSF)去产⽣⾃⼰的UNIX标准版本,继⽽出现了两个标准商业版本OSF版本和System Release 4。
  • 1993年,AT&T把它的UNIX转卖给Novell公司。UNIX系统实验室成为了Novell的UNIX系统⼩组的⼀部分。Novell发⾏了基于System V Release 4的⾃⼰的UNIX版本UNIXWare,它可以和Novell公司的Netware系统相联。SUN公司已经把System V Release 4 融进了它的SUN OS,发⾏了Solaris。两个相互竞争的UNIX使⽤的图形⽤⼾界⾯(⼀个叫Motif,另⼀个叫Openlook),已经合并为⼀个新的⼯作平台标准,叫做通⽤平台环境(CDE)。

Linux发展历史

  • 1991年10⽉5⽇,赫尔⾟基⼤学的⼀名研究⽣Linus Benedict Torvalds在⼀个Usenet新闻组(comp.os.minix)中宣布他编制出了⼀种类似UNIX的⼩操作系统,叫Linux。新的操作系统是受到另⼀个UNIX的⼩操作系统— Minix的启发,该系统是由⼀名叫Andrew S Tanenbaum的教师开发的。读者也许猜想所发布的这个系统应该是Linux的0.01版本,实际上不是这样。真正的Linux 0.01版本并没有被发布,原因是0.01版本不实⽤。Linus仅仅在第⼀个Linux的FTP站点(ftp://nic.funet.fi)上提供过这个版本的的源代码。
  • Torvalds于10⽉5⽇发布的这个Linux版本被称为0.02版,它能够运⾏GNU Bourne AgainShell(bash)和GNU的C编译程序(gcc)以及为数不多的其它语⾔。Torvalds绝对没有想到他设想的⼀种能够针对⾼级业余爱好者和⿊客们的操作系统已经产⽣,这就是⼈们所称的Linux。
  • Linux发布时的版本是0.02,后来⼜有0.03版,然后⼜跳到0.10版。因为世界各地越来越多的程序员都开始开发Linux,它已经达到0.95版。这就意味着正式公布1.0版本的时间已经为期不远了。正式的1.0版本是在1994年公布的


2 . 开源

  • Linux是⼀种⾃由和开放源代码的类UNIX操作系统,该操作系统的内核由林纳斯托⽡兹在1991年⾸次发布,之后,在加上⽤⼾空间的应⽤程序之后,就成为了Linux操作系统。严格来讲,Linux只是操作系统内核本⾝,但通常采⽤“Linux内核”来表达该意思。⽽Linux则常⽤来指基于Linux内核的完整操作系统,它包括GUI组件和许多其他实⽤⼯具。
  • GNU通⽤公共许可协议(GNU General Public License,简称GNU GPL或GPL),是⼀个⼴泛被使⽤的⾃由软件许可协议条款,最初由理查德斯托曼为GNU计划⽽撰写,GPL给予了计算机程序⾃由软件的定义, 任何基于GPL软件开发衍⽣的产品在发布时必须采⽤GPL许可证⽅式,且必须公开源代码
  • Linux是⾃由软件和开放源代码软件发展中最著名的例⼦。只要遵循GNU通⽤公共许可证,任何个⼈和机构都可以⾃由地使⽤Linux的所有底层源代码,也可以⾃由地修改和再发布。随着Linux操作系统⻜速发展,各种集成在Linux上的开源软件和实⽤⼯具也得到了应⽤和普及,因此,Linux也成为了开源软件的代名词。

3 . 官网

kernel官⽹

4 . 企业应用现状

• Linux在服务器领域的发展
随着开源软件在世界范围内影响⼒⽇益增强,Linux服务器操作系统在整个服务器操作系统市场格局中占据了越来越多的市场份额,已经形成了⼤规模市场应⽤的局⾯。并且保持着快速的增⻓率。尤其在政府、⾦融、农业、交通、电信等国家关键领域。此外,考虑到Linux的快速成⻓性以及国家相关政策的扶持⼒度,Linux服务器产品⼀定能够冲击更⼤的服务器市场。据权威部⻔统计,⽬前Linux在服务器领域已经占据75%的市场份额,同时,Linux在服务器市场的迅速崛起,已经引起全球IT产业的⾼度关注,并以强劲的势头成为服务器操作系统领域中的中坚⼒量。

• Linux在桌⾯领域的发展
近年来,特别在国内市场,Linux桌⾯操作系统的发展趋势⾮常迅猛。国内如中标麒麟Linux、红旗Linux、深度Linux等系统软件⼚商都推出的Linux桌⾯操作系统,⽬前已经在政府、企业、OEM等领域得到了⼴泛应⽤。另外SUSE、Ubuntu也相继推出了基于Linux的桌⾯系统,特别是Ubuntu Linux,已经积累了⼤量社区⽤⼾。但是,从系统的整体功能、性能来看,Linux桌⾯系统与Windows系列相⽐还有⼀定的差距,主要表现在系统易⽤性、系统管理、软硬件兼容性、软件的丰富程度等⽅⾯。

• Linux在移动嵌⼊式领域的发展
Linux的低成本、强⼤的定制功能以及良好的移植性能,使得Linux在嵌⼊式系统⽅⾯也得到⼴泛应⽤,⽬前Linux以⼴泛应⽤于⼿机、平板电脑、路由器、电视和电⼦游戏机等领域。在移动设备上⼴泛使⽤的Android操作系统就是创建在Linux内核之上的。⽬前,Android已经成为全球最流⾏的智能⼿机操作系统,据2015年权威部⻔最新统计,Android操作系统的全球市场份额已达84.6%。
此外,思科在⽹络防⽕墙和路由器也使⽤了定制的Linux,阿⾥云也开发了⼀套基于Linux的操作系统“YunOS”,可⽤于智能⼿机、平板电脑和⽹络电视;常⻅的数字视频录像机、舞台灯光控制系统等都在逐渐采⽤定制版本的Linux来实现,⽽这⼀切均归功与Linux与开源的⼒量。

• Linux在云计算/⼤数据领域的发展
互联⽹产业的迅猛发展,促使云计算、⼤数据产业的形成并快速发展,云计算、⼤数据作为⼀个基于开源软件的平台,Linux占据了核⼼优势;据Linux基⾦会的研究,86%的企业已经使⽤Linux操作系统进⾏云计算、⼤数据平台的构建,⽬前,Linux已开始取代Unix成为最受⻘睐的云计算、⼤数据平台操作系统。

5 . 发行版本

• Debian
Debian运⾏起来极其稳定,这使得它⾮常适合⽤于服务器。 debian这款操作系统⽆疑并不适合新手用户,⽽是适合系统管理员和⾼级用户。

• Ubuntu
Ubuntu是Debian的⼀款衍生版,也是当今最受欢迎的免费操作系统。Ubuntu侧重于它在这个市场的应⽤,在服务器、云计算、甚⾄⼀些运⾏Ubuntu Linux的移动设备上很常见。Ubuntu是新手用户肯定爱不释手的⼀款操作系统。

• 红帽企业级Linux
这是第⼀款⾯向商业市场的Linux发⾏版。它有服务器版本,⽀持众多处理器架构,包括x86和x86_64。红帽公司通过课程红帽认证系统管理员/红帽认证⼯程师(RHCSA/RHCE),对系统管理员进行培训和认证。

• CentOS
CentOS是⼀款企业级Linux发⾏版,它使⽤红帽企业级Linux中的免费源代码重新构建⽽成。这款重构版完全去掉了注册商标以及Binary程序包⽅⾯⼀个⾮常细微的变化。有些⼈不想⽀付⼀⼤笔钱,⼜能领略红帽企业级Linux;对他们来说,CentOS值得⼀试。此外,CentOS的外观和行为似乎与母发行版红帽企业级Linux如出一辙。 CentOS使用YUM来管理软件包。

• Fedora
⼩巧的Fedora适合那些⼈:想尝试最先进的技术,等不及程序的稳定版出来。其实,Fedora就是红帽公司的⼀个测试平台;产品在成为企业级发⾏版之前,在该平台上进⾏开发和测试。Fedora是⼀款⾮常好的发行版,有庞⼤的用户论坛,软件库中还有为数不少的软件包。

• Kali Linux
Kali Linux是Debian的⼀款衍生版。Kali旨在⽤于渗透测试。Kali的前⾝是Backtrack。⽤于Debian的所有Binary软件包都可以安装到Kali Linux上,⽽Kali的魅力或威力就来自于此。此外,⽀持Debian的用户论坛为Kali加分不少。Kali随带许多的渗透测试⼯具,⽆论是Wifi、数据库还是其他任何⼯具,都设计成⽴⻢可以使⽤。Kali使⽤APT来管理软件包。毫⽆疑问,Kali Linux是⼀款渗透测试⼯具,或者是⽂明⿊客(我不想谈论恶意⿊客)⻘睐的操作系统。

6 . os概念 , 定位

使计算机更好用! 这是操作系统的根本要义!!

操作系统是什么?
操作系统是一款做软硬件管理的软件。一个好的操作系统的衡量指标:稳定、快速、安全。

为什么要有操作系统?
操作系统的核心工作:通过对下管理好软硬件资源的手段,达到对上提供良好的(稳定、快速、安全)操作/使用环境。

所有的软件行为,全部都要自上而下贯穿计算机的软硬件结构。几乎所有的软件行为都和操作系统直接或间接相关。

第二章:使⽤ XShell 远程登录 Linux

关于 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 (有些同学的 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 代替名称。 (介绍 UID, GID)
  • -F 在每个文件名后附上一个字符以说明该文件的类型,“*”表示可执行的普通文件;“/”表示目录;“@”表示符号链接;“|”表示FIFOs;“=”表示套接字(sockets)。(目录类型识别)
  • -r 对目录反向排序。
  • -t 以时间排序。
  • -s 在l文件名后输出该文件的大小。(大小排序,如何找到目录下最大的文件)
  • -R 列出所有子目录下的文件。(递归) 
  • -1 一行只输出一个文件。

举例:

[root@VM-12-13-centos 108_class]# ll //等价下方
[root@VM-12-13-centos 108_class]# ls -l
total 12
drwxr-xr-x 2 root root 4096 Aug 12 16:55 lesson3
drwxr-xr-x 4 root root 4096 Aug 12 16:55 newdir
-rw-r--r-- 1 root root   12 Aug 12 15:26 test.txt

[root@VM-12-13-centos 108_class]# ll -a
total 20
drwxr-xr-x  4 root root 4096 Aug 12 16:55 .
dr-xr-x---. 7 root root 4096 Aug 12 14:20 ..
drwxr-xr-x  2 root root 4096 Aug 12 16:55 lesson3
drwxr-xr-x  4 root root 4096 Aug 12 16:55 newdir
-rw-r--r--  1 root root   12 Aug 12 15:26 test.txt

[root@VM-12-13-centos 108_class]# ll -aF
total 20
drwxr-xr-x  4 root root 4096 Aug 12 16:55 ./
dr-xr-x---. 7 root root 4096 Aug 12 14:20 ../
drwxr-xr-x  2 root root 4096 Aug 12 16:55 lesson3/
drwxr-xr-x  4 root root 4096 Aug 12 16:55 newdir/
-rw-r--r--  1 root root   12 Aug 12 15:26 test.txt

[root@VM-12-13-centos 108_class]# ls ../
108_class

pwd 命令

语法: pwd 
功能:显示用户当前所在的目录
常用选项:无

举例:
[whb@bite-alicloud test]$ pwd
/home/whb/test

cd 指令

Linux理论知识:路径的认识

  • Linux系统中,磁盘上的文件和目录被组成⼀棵目录树,每个节点都是目录或文件
  • 其中普通文件一定是目录树的叶子节点
  • ⽬录可能是叶子(空目录), 也可能是路上节点
  • 理解路径存在的意义: 树状组织方式,都是为了保证快速定位查找到指定的文件,而定位文件就需要具有唯一性的方案来进⾏定位文件。其中任何一个节点,都只有一个父节点,所以,从根目录开始,定位指定文件,路径具有唯一性
  • 绝对路径:一般从/开始,不依赖其他目录的定位文件的方式
  • 相对路径:相对于当前用户所处目录,定位文件的路径方式
  • 绝对路径一般不会随着用户的路径变化⽽丧失唯一性,一般在特定服务的配置文件中经常被使用
  • 相对路径因为它的便捷性,一般在命令行中使用较多

语法:cd 目录名
功能:改变工作目录。将当前工作目录改变到指定的目录下。

举例:
# 返回上级目录
[whb@bite-alicloud ~]$ pwd
/home/whb
[whb@bite-alicloud ~]$ cd ..
[whb@bite-alicloud home]$ pwd
/home

# 绝对路径定位目录或者文件
[whb@bite-alicloud home]$ pwd
/home
[whb@bite-alicloud home]$ cd /home/whb/test
[whb@bite-alicloud test]$ pwd
/home/whb/test

# 相对路径定位目录或者文件
[whb@bite-alicloud test]$ pwd
/home/whb/test
[whb@bite-alicloud test]$ cd ../temp/
[whb@bite-alicloud temp]$ pwd
/home/whb/temp

# 每⼀次新建⼀个用户都会在/home目录下为新用户创建新的⼯作目录,目录以新用户名称命名
# root用户在安装操作系统的时候,就已经内置了⼯作目录: /root
[whb@bite-alicloud temp]$ ls /home
bss gaobo luojie whb wudu

# 快速进⼊自己的家目录
[whb@bite-alicloud test]$ whoami
whb
[whb@bite-alicloud test]$ pwd
/home/whb/test
[whb@bite-alicloud test]$ cd ~
[whb@bite-alicloud ~]$ pwd
/home/whb

# 返回到最近访问目录
[whb@bite-alicloud ~]$ pwd # 当前在/home/whb目录下
/home/whb
[whb@bite-alicloud ~]$ cd / # 进⼊/目录
[whb@bite-alicloud /]$ pwd
/
[whb@bite-alicloud /]$ cd - # 直接可以回退到最近⼀次所处的目录:/home/whb
/home/whb
[whb@bite-alicloud ~]$ pwd
/home/whb
[whb@bite-alicloud ~]$ cd - # 直接可以回退到最近⼀次所处的目录:/
/
[whb@bite-alicloud /]$ pwd
/
[whb@bite-alicloud /]$ cd - # 同上
/home/whb
[whb@bite-alicloud ~]$ pwd
/home/whb

touch 指令

Linux理论知识:文件类型的认识
语法:touch [选项]... 文件... 
功能:touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件。

常⽤选项:
  • -a : change only the access time
  • -c : change only the modification time
举例:
# 创建普通文件
[whb@bite-alicloud test]$ ls
dir file.txt
[whb@bite-alicloud test]$ touch newFile.txt
[whb@bite-alicloud test]$ ls
dir file.txt newFile.txt

mkdir 指令

语法:mkdir [选项] dirname... 
功能:在当前目录下创建一个名为 “dirname”的目录
常用选项

  • -p, --parents  可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录
举例:
# 创建普通空目录
[whb@bite-alicloud test]$ ls -l
total 4
drwxrwxr-x 2 whb whb 4096 Jan 11 14:22 dir
-rw-rw-r-- 1 whb whb 0 Jan 11 14:22 file.txt
-rw-rw-r-- 1 whb whb 0 Jan 11 15:09 newFile.txt
[whb@bite-alicloud test]$ mkdir mydir
[whb@bite-alicloud test]$ ls -l
total 8
drwxrwxr-x 2 whb whb 4096 Jan 11 14:22 dir
-rw-rw-r-- 1 whb whb 0 Jan 11 14:22 file.txt
drwxrwxr-x 2 whb whb 4096 Jan 11 15:15 mydir
-rw-rw-r-- 1 whb whb 0 Jan 11 15:09 newFile.txt

# 递归建立多个目录,创建指定路径
[whb@bite-alicloud test]$ mkdir -p path1/path2/path3/path4
[whb@bite-alicloud test]$ ls -l
total 12
drwxrwxr-x 2 whb whb 4096 Jan 11 14:22 dir
-rw-rw-r-- 1 whb whb 0 Jan 11 14:22 file.txt
drwxrwxr-x 2 whb whb 4096 Jan 11 15:15 mydir
-rw-rw-r-- 1 whb whb 0 Jan 11 15:09 newFile.txt
drwxrwxr-x 3 whb whb 4096 Jan 11 15:16 path1
[whb@bite-alicloud test]$ tree path1
path1
└── path2
    └── path3
        └── path4

# tree命令是一个递归以树状结构显示指定目录的命令,如果没有安装
# 如果当前用户是root: yum install -y tree (因为现在开始用的都是root,所以推荐这个用
法)
# 如果当前用户是普通用户: sudo yum install -y tree (后⾯讲完vim,⼤家才能将⾃⼰添
加到系统信任列表中,暂时普通用户无法使用sudo)

rmdir 指令 && rm 指令

rmdir是一个与mkdir相对应的命令。mkdir是建立目录,而rmdir是删除命令。
语法:rmdir [-p][dirName] 
适用对象:具有当前目录操作权限的所有使用者
功能:删除空目录
常用选项

  • -p 当子目录被删除后如果父目录也变成空目录的话,就连带父目录一起删除。
举例
# 删除空目录
[whb@bite-alicloud test]$ ll
total 12
drwxrwxr-x 2 whb whb 4096 Jan 11 14:22 dir
-rw-rw-r-- 1 whb whb 0 Jan 11 14:22 file.txt
drwxrwxr-x 2 whb whb 4096 Jan 11 15:15 mydir
-rw-rw-r-- 1 whb whb 0 Jan 11 15:09 newFile.txt
drwxrwxr-x 3 whb whb 4096 Jan 11 15:16 path1
[whb@bite-alicloud test]$ tree mydir/
mydir/
0 directories, 0 files
[whb@bite-alicloud test]$ rmdir mydir
[whb@bite-alicloud test]$ ll
total 8
drwxrwxr-x 2 whb whb 4096 Jan 11 14:22 dir
-rw-rw-r-- 1 whb whb 0 Jan 11 14:22 file.txt
-rw-rw-r-- 1 whb whb 0 Jan 11 15:09 newFile.txt
drwxrwxr-x 3 whb whb 4096 Jan 11 15:16 path1

# 删除路径
[whb@bite-alicloud test]$ tree path1
path1
└── path2
    └── path3
        └── path4
3 directories, 0 files
[whb@bite-alicloud test]$ rmdir -p path1/path2/path3/path4
[whb@bite-alicloud test]$ ll
total 4
drwxrwxr-x 2 whb whb 4096 Jan 11 14:22 dir
-rw-rw-r-- 1 whb whb 0 Jan 11 14:22 file.txt
-rw-rw-r-- 1 whb whb 0 Jan 11 15:09 newFile.txt

# 指定路径中有不为空的路径,便无法删除
[whb@bite-alicloud test]$ rmdir -p path1/path2/path3
rmdir: failed to remove ‘path1/path2/path3’: Directory not empty
[whb@bite-alicloud test]$ touch path1/myfile.txt
[whb@bite-alicloud test]$ touch path1/path2/myfile.txt
[whb@bite-alicloud test]$ tree path1/
path1/
├── myfile.txt
└── path2
    ├── myfile.txt
    └── path3
        └── path4

3 directories, 2 files
[whb@bite-alicloud test]$ rmdir -p path1/path2/path3/path4
rmdir: failed to remove directory ‘path1/path2’: Directory not empty

rm 命令可以同时删除文件或目录
语法: rm [-f-i-r-v] [dirName/dir]
适用对象:所有使用者
功能:删除文件或目录
常用选项

  • -f 即使文件属性为只读(即写保护),亦直接删除
  • -i 删除前逐一询问确认
  • -r 删除目录及其下所有文件
举例:
# 删除普通文件
[whb@bite-alicloud test]$ ll
total 8
drwxrwxr-x 2 whb whb 4096 Jan 11 14:22 dir
-rw-rw-r-- 1 whb whb 0 Jan 11 14:22 file.txt
-rw-rw-r-- 1 whb whb 0 Jan 11 15:09 newFile.txt
drwxrwxr-x 3 whb whb 4096 Jan 11 15:26 path1
[whb@bite-alicloud test]$ rm file.txt
[whb@bite-alicloud test]$ ll
total 8
drwxrwxr-x 2 whb whb 4096 Jan 11 14:22 dir
-rw-rw-r-- 1 whb whb 0 Jan 11 15:09 newFile.txt
drwxrwxr-x 3 whb whb 4096 Jan 11 15:26 path1

# 删除目录文件
[whb@bite-alicloud test]$ ll
total 8
drwxrwxr-x 2 whb whb 4096 Jan 11 14:22 dir
-rw-rw-r-- 1 whb whb 0 Jan 11 15:09 newFile.txt
drwxrwxr-x 3 whb whb 4096 Jan 11 15:26 path1
[whb@bite-alicloud test]$ rm dir
rm: cannot remove ‘dir’: Is a directory
[whb@bite-alicloud test]$ rm -r dir
[whb@bite-alicloud test]$ ll
total 4
-rw-rw-r-- 1 whb whb 0 Jan 11 15:09 newFile.txt
drwxrwxr-x 3 whb whb 4096 Jan 11 15:26 path1

# 删除普通文件前询问
[whb@bite-alicloud test]$ ll
total 4
-rw-rw-r-- 1 whb whb 0 Jan 11 15:09 newFile.txt
drwxrwxr-x 3 whb whb 4096 Jan 11 15:26 path1
[whb@bite-alicloud test]$ rm -i newFile.txt
rm: remove regular empty file ‘newFile.txt’? y
[whb@bite-alicloud test]$ ll
total 4
drwxrwxr-x 3 whb whb 4096 Jan 11 15:26 path1
[whb@bite-alicloud test]$ ll
total 4
drwxrwxr-x 3 whb whb 4096 Jan 11 15:26 path1

# 删除目录前询问
[whb@bite-alicloud test]$ mkdir -p d/d/d/d
[whb@bite-alicloud test]$ tree d
d
└── d
    └── d
        └── d

3 directories, 0 files
[whb@bite-alicloud test]$ rm -ri d
rm: descend into directory ‘d’? y
rm: descend into directory ‘d/d’? y
rm: descend into directory ‘d/d/d’? y
rm: remove directory ‘d/d/d/d’? y
rm: remove directory ‘d/d/d’? y
rm: remove directory ‘d/d’? y
rm: remove directory ‘d’? y
[whb@bite-alicloud test]$ ll
total 0

# 递归强制删除⾮空目录
[whb@bite-alicloud test]$ tree path1/
path1/
├── myfile.txt
└── path2
    └── myfile.txt

1 directory, 2 files
[whb@bite-alicloud test]$ rm -f path1
rm: cannot remove ‘path1’: Is a directory
[whb@bite-alicloud test]$ rm -rf path1
[whb@bite-alicloud test]$ ll
total 0

man 指令

Linux的命令有很多参数,我们不可能全记住,我们可以通过查看联机手册获取帮助。
语法: man [选项] 命令
常用选项

  • -k 根据关键字搜索联机帮助
  • num 只在第num章节查找
  • -a 将所有章节的都显示出来,比如 man printf 它缺省从第一章开始搜索,知道就停止,用a选项,当按下q退出,他会继续往后面搜索,直到所有章节都搜索完毕
解释一下:man手册分为9章(不同系统可能会有差别)
  • 1 是普通的命令
  • 2 是系统调用,如open,write之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么头文件) 
  • 3 是库函数,如printf,fread4是特殊文件,也就是/dev下的各种设备文件
  • 4 略
  • 5 是指文件的格式,比如passwd, 就会说明这个文件中各个字段的含义
  • 6 是给游戏留的,由各个游戏自己定义
  • 7 是附件还有一些变量,比如向environ这种全局变量在这里就有说明
  • 8 是系统管理用的命令,这些命令只能由root使用,如ifconfig
  • 9 略
举例:
[whb@bite-alicloud test]$ man printf # 查看printf指令(没错,printf也是一个指令)
[whb@bite-alicloud test]$ man fork # 查看系统调⽤,默认没有这个指令,man就自动去2号手册查找
[whb@bite-alicloud test]$ man 2 frok # 查看系统调⽤
[whb@bite-alicloud test]$ man 3 printf # 查看C库函数
[whb@bite-alicloud test]$ man 7 signal # 查看变量
[whb@bite-alicloud test]$ man 7 environ
[whb@bite-alicloud test]$ man man # 查看man手册自己

cp 指令

语法:cp [选项] 源文件或目录 目标文件或目录
功能:复制文件或目录
说明

  • cp指令用于复制文件或目录
  • 如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。

常用选项

  • -f 或 --force 强行复制文件或目录, 不论目的文件或目录是否已经存在
  • -i 或 --interactive 覆盖文件之前先询问用户
  • -r 递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理
# cp普通文件
[whb@bite-alicloud test]$ echo "你好比特就业课">myfile.txt
[whb@bite-alicloud test]$ cat myfile.txt
你好比特就业课
[whb@bite-alicloud test]$ ll
total 4
-rw-rw-r-- 1 whb whb 22 Jan 11 15:47 myfile.txt
[whb@bite-alicloud test]$ cp myfile.txt myfile-backup.txt
[whb@bite-alicloud test]$ ll
total 8
-rw-rw-r-- 1 whb whb 22 Jan 11 15:47 myfile-backup.txt
-rw-rw-r-- 1 whb whb 22 Jan 11 15:47 myfile.txt
[whb@bite-alicloud test]$ cat myfile-backup.txt
你好比特就业课

# 将多个文件拷贝到指定路径下
[whb@bite-alicloud test]$ ll
total 8
-rw-rw-r-- 1 whb whb 22 Jan 11 15:47 myfile-backup.txt
-rw-rw-r-- 1 whb whb 22 Jan 11 15:47 myfile.txt
[whb@bite-alicloud test]$ mkdir dir
[whb@bite-alicloud test]$ ll
total 12
drwxrwxr-x 2 whb whb 4096 Jan 11 15:48 dir
-rw-rw-r-- 1 whb whb 22 Jan 11 15:47 myfile-backup.txt
-rw-rw-r-- 1 whb whb 22 Jan 11 15:47 myfile.txt
[whb@bite-alicloud test]$ cp *.txt dir # *表示通配符,匹配所有.txt结尾的文件名
[whb@bite-alicloud test]$ ll
total 12
drwxrwxr-x 2 whb whb 4096 Jan 11 15:48 dir
-rw-rw-r-- 1 whb whb 22 Jan 11 15:47 myfile-backup.txt
-rw-rw-r-- 1 whb whb 22 Jan 11 15:47 myfile.txt
[whb@bite-alicloud test]$ tree dir
dir
├── myfile-backup.txt
└── myfile.txt

# cp如果目标文件存在,就覆盖
[whb@bite-alicloud test]$ echo "hello bite tech" > myfile.txt
[whb@bite-alicloud test]$ cat myfile.txt
hello bite tech
[whb@bite-alicloud test]$ cp myfile.txt myfile-backup.txt
[whb@bite-alicloud test]$ cat myfile-backup.txt
hello bite tech

# 拷贝前询问
[whb@bite-alicloud test]$ cp -i myfile.txt myfile-backup.txt
cp: overwrite ‘myfile-backup.txt’? y

# 递归强制拷贝整个目录
[whb@bite-alicloud ~]$ tree test
test
├── dir
│   ├── myfile-backup.txt
│   └── myfile.txt
├── myfile-backup.txt
└── myfile.txt
1 directory, 4 files
[whb@bite-alicloud ~]$ cp -rf test test-backup
[whb@bite-alicloud ~]$ tree test-backup
test-backup
├── dir
│ ├── myfile-backup.txt
│ └── myfile.txt
├── myfile-backup.txt
└── myfile.txt

1 directory, 4 files

echo 指令

> >>输出重定向

//echo默认输出到屏幕,使用 > 输出重定向,可将内容输出到文件中
//向目标文件写入时,覆盖写入。
//1. 清空文件
//2. 写入新内容
[root@VM-12-13-centos]~/108_class# ls
a.out  lesson3  newdir  out.txt  test.c  test.txt
[root@VM-12-13-centos]~/108_class# echo abcdef
abcdef
[root@VM-12-13-centos]~/108_class# cat out.txt
hello Linux
[root@VM-12-13-centos]~/108_class# echo "108 good" > out.txt
[root@VM-12-13-centos]~/108_class# cat out.txt
108 good
[root@VM-12-13-centos]~/108_class# >out.txt  //什么都没有输出,相当于清空了out.txt
[root@VM-12-13-centos]~/108_class# cat out.txt


// >> 追加重定向
[root@VM-12-13-centos]~/108_class# echo "108 good" >> out.txt
[root@VM-12-13-centos]~/108_class# echo "108 good" >> out.txt
[root@VM-12-13-centos]~/108_class# cat out.txt               
108 good
108 good
//echo自带换行,不想换行可以使用printf

cat 指令

语法:cat [选项][文件] 
功能:查看目标文件的内容
常用选项

  • -b 对非空输出行编号
  • -n 对输出的所有行编号
  • -s 不输出多行空行
举例:
# 命令行构建多行文本
[whb@bite-alicloud test]$ cnt=0; while [ $cnt -le 20 ]; do echo "hello bite"; let cnt++; done > temp.txt

# 测试cat基本命令
[whb@bite-alicloud test]$ cat temp.txt
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite

# cat 输出携带行号
[whb@bite-alicloud test]$ cat -b temp.txt
1 hello bite
2 hello bite
3 hello bite
4 hello bite
5 hello bite
6 hello bite
7 hello bite
...

# 修改temp.txt,使其携带多行空行
[whb@bite-alicloud test]$ vim temp.txt

# 测试 -b 对⾮空输出行编号
[whb@bite-alicloud test]$ cat -b temp.txt
1 hello bite
2 hello bite
3 hello bite



4 hello bite
5 hello bite
6 hello bite
7 hello bite
...
# 测试-n 对输出的所有⾏编号
[whb@bite-alicloud test]$ cat -n temp.txt
1 hello bite
2 hello bite
3 hello bite
4
5
6
7 hello bite
8 hello bite
9
10 hello bite
11 hello bite
...

# 测试 -s 不输出多行空行,多⾏空行压缩成为一行
[whb@bite-alicloud test]$ cat -s temp.txt
hello bite
hello bite
hello bite

hello bite
hello bite

hello bite
hello bite
hello bite
...

Linux下一切皆文件 -- 比如显示器(向显示器打印->fwrite,fread为空),键盘(从键盘读取->fread,fwrite为空),普通文件同时有fwrite和fread

< 输入重定向

//cat默认从键盘读,在显示器打印
[root@VM-12-13-centos]~/108_class# cat     
1
1
2
2
3
3

//不从键盘读取,从指定文件读取叫输入重定向
[root@VM-12-13-centos]~/108_class# cat < out.txt
108 good
108 good
108 good
注意:cat不适合看大文本,适合看小文本

mv 指令

mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),经常用来备份文件或者目录。
语法: mv [选项] 源文件或目录 目标文件或目录
功能: 

  1. 视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。
  2. 当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。
  3. 当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中。

常用选项:

  • -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
  • -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
举例:
# 更改名称
[whb@bite-alicloud test]$ touch myfile.txt
[whb@bite-alicloud test]$ ll
total 0
-rw-rw-r-- 1 whb whb 0 Jan 11 15:56 myfile.txt
[whb@bite-alicloud test]$ mv myfile.txt yourfile.txt
[whb@bite-alicloud test]$ ll
total 0
-rw-rw-r-- 1 whb whb 0 Jan 11 15:56 yourfile.txt

# 如果当前路径存在同名文件,改名即覆盖
[whb@bite-alicloud test]$ touch myfile.txt
[whb@bite-alicloud test]$ ll
total 0
-rw-rw-r-- 1 whb whb 0 Jan 11 15:58 myfile.txt
-rw-rw-r-- 1 whb whb 0 Jan 11 15:57 yourfile.txt
[whb@bite-alicloud test]$ mv yourfile.txt myfile.txt
[whb@bite-alicloud test]$ ll
total 0
-rw-rw-r-- 1 whb whb 0 Jan 11 15:57 myfile.txt

# 如果当前路径存在同名文件,改名前可以添加i选项,让系统提出警告供用户做选择
[whb@bite-alicloud test]$ touch yourfile.txt
[whb@bite-alicloud test]$ ll
total 0
-rw-rw-r-- 1 whb whb 0 Jan 11 15:57 myfile.txt
-rw-rw-r-- 1 whb whb 0 Jan 11 15:59 yourfile.txt
[whb@bite-alicloud test]$ mv -i yourfile.txt myfile.txt
mv: overwrite ‘myfile.txt’? y
[whb@bite-alicloud test]$ ll
total 0
-rw-rw-r-- 1 whb whb 0 Jan 11 15:59 myfile.txt

# mv整个目录
[whb@bite-alicloud test]$ touch myfile.txt
[whb@bite-alicloud test]$ mkdir temp
[whb@bite-alicloud test]$ ll
total 4
-rw-rw-r-- 1 whb whb 0 Jan 11 17:56 myfile.txt
drwxrwxr-x 2 whb whb 4096 Jan 11 17:56 temp
[whb@bite-alicloud test]$ mv myfile.txt temp
[whb@bite-alicloud test]$ ls
temp
[whb@bite-alicloud test]$ mv temp ../
[whb@bite-alicloud test]$ ls
[whb@bite-alicloud test]$ ls -d ../temp
../temp

more 指令

语法:more [选项][文件] 
功能:more命令,功能类似 cat 
常用选项

  • -n 指定输出行数
  • q 退出more
举例:
# 命令行输出多行文本
[whb@bite-alicloud test]$ cnt=0; while [ $cnt -le 2000 ]; do echo "hellobite"; let cnt++; done > temp.txt

# -n 指定输出行数
[whb@bite-alicloud test]$ more -10 temp.txt
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
--More--(0%)

less 指令

  • less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大。
  • less 的用法比起 more 更加的有弹性。在 more 的时候,我们并没有办法向前面翻, 只能往后面看
  • 但若使用了 less 时,就可以使用 [pageup][pagedown] 等按键的功能来往前往后翻看文件,更容易用来查看一个文件的内容
  • 除此之外,在 less 里头可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜。

语法:less [参数] 文件
功能:less与more类似,但使用less可以随意浏览文件,而more仅能向前移动,却不能向后移动,而且less在查看之前不会加载整个文件。
选项

  • -i  忽略搜索时的大小写
  • -N  显示每行的行号
  • /字符串:向下搜索“字符串”的功能
  • ?字符串:向上搜索“字符串”的功能
  • n:重复前一个搜索(与 / 或 ? 有关)
  • N:反向重复前一个搜索(与 / 或 ? 有关)
  • q:quit
举例:
# 命令行输出多行文本
[whb@bite-alicloud test]$ cnt=0; while [ $cnt -le 2000 ]; do echo "hello $cnt"; let cnt++; done > temp.txt

# 测试搜索和-N等功能
[whb@bite-alicloud test]$ less -N temp.txt
1 hello 0
2 hello 1
3 hello 2
4 hello 3
5 hello 4
6 hello 5
7 hello 6
8 hello 7
9 hello 8
10 hello 9
11 hello 10
12 hello 11
13 hello 12
14 hello 13
...
# 其他选项也可以直接测试

head 指令

head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾。
语法: head [参数]... [文件]...  
功能:head 用来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10行。  
选项

  • -n<行数> 显示的行数
举例:
[whb@bite-alicloud test]$ head temp.txt
hello 0
hello 1
hello 2
hello 3
hello 4
hello 5
hello 6
hello 7
hello 8
hello 9
[whb@bite-alicloud test]$ head -5 temp.txt
hello 0
hello 1
hello 2
hello 3
hello 4

tail 指令

tail 命令从指定点开始将文件写到标准输出.使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不但刷新,使你看到最新的文件内容.。
语法: tail [必要参数] [文件]  
功能: 用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。
选项

  • -f 循环读取
  • -n<行数> 显示行数
举例:
# 基本功能演⽰
[whb@bite-alicloud test]$ tail temp.txt
hello 1991
hello 1992
hello 1993
hello 1994
hello 1995
hello 1996
hello 1997
hello 1998
hello 1999
hello 2000
[whb@bite-alicloud test]$ tail -3 temp.txt
hello 1998
hello 1999
hello 2000

重定向和管道

//将log.txt文件的前1020行重定向到temp.txt文件(如果没有该文件会自动创建)
//方法一
[root@VM-12-13-centos]~/108_class/lesson3# head -1020 log.txt > temp.txt
[root@VM-12-13-centos]~/108_class/lesson3# ll
total 184
-rw-r--r-- 1 root root 168894 Aug 13 14:25 log.txt
-rw-r--r-- 1 root root  16233 Aug 13 14:53 temp.txt
-rw-r--r-- 1 root root      0 Aug 12 23:43 test.c

[root@VM-12-13-centos]~/108_class/lesson3# tail -20 temp.txt
hello Linux 1001
hello Linux 1002
hello Linux 1003
.....
hello Linux 1018
hello Linux 1019
hello Linux 1020
//这样就拿到log.txt文件的1001-1020行


//方法二
//不用再单独创建文件(占空间)
// |是一种符号,被“系统”解释为管道文件(内存级)
// | (管道符)会:创建一个匿名管道(pipe),这是内核提供的一种进程间通信机制
//将左边命令的标准输出连接到管道的写入端
//将右边命令的标准输入连接到管道的读取端
//head的输出被写入管道,然后tail从同一个管道读取数据。
[root@VM-12-13-centos]~/108_class/lesson3# head -1020 log.txt | tail -20        
hello Linux 1001
hello Linux 1002
hello Linux 1003
......
hello Linux 1018
hello Linux 1019
hello Linux 1020

//结合cat的使用
[root@VM-12-13-centos]~/108_class/lesson3# cat log.txt | head -50 | tail -20
hello Linux 31
hello Linux 32
hello Linux 33
......
hello Linux 48
hello Linux 49
hello Linux 50

//统计行数
[root@VM-12-13-centos]~/108_class/lesson3# cat log.txt | head -50 | tail -20 | wc -l
20

程序运行到每一个关键时刻,都要打印日志。
日志:时间,日志等级(warning,error...),日志具体信息(打开文件失败,插入数据失败...),其他信息
将日志以行为单位写入文件中(日志文件)

date 指令

指定格式显示时间: date +%Y:%m:%d
用法: date [OPTION]... [+FORMAT]
1. 在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,其中常用的标记列表如下 

  • %H : ⼩时(00..23)
  • %M : 分钟(00..59)
  • %S : 秒(00..61)
  • %X : 相当于 %H:%M:%S
  • %d : ⽇ (01..31)
  • %m : ⽉份 (01..12)
  • %Y : 完整年份 (0000..9999)
  • %F : 相当于 %Y-%m-%d

2. 在设定时间方⾯

  • date -s //设置当前时间,只有root权限才能设置,其他只能查看。
  • date -s 20080523 //设置成20080523,这样会把具体时间设置成空00:00:00
  • date -s 01:01:01 //设置具体时间,不会对⽇期做更改
  • date -s “01:01:01 2008-05-23″ //这样可以设置全部时间
  • date -s “01:01:01 20080523″ //这样可以设置全部时间
  • date -s “2008-05-23 01:01:01″ //这样可以设置全部时间
  • date -s “20080523 01:01:01″ //这样可以设置全部时间

3. 时间戳

  • 时间->时间戳:date +%s
  • 时间戳->时间:date -d@1508749502
  • Unix时间戳(英⽂为Unix epoch, Unix time, POSIX time 或 Unix timestamp)是从1970年1⽉1⽇(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒
4. 举例
# 显示常规时间
[whb@bite-alicloud test]$ date
Wed Jan 11 18:22:50 CST 2023
[whb@bite-alicloud test]$ date +%Y/%m/%d
2023/01/11
[whb@bite-alicloud test]$ date +%Y/%m/%d-%H:%M:%S
2023/01/11-18:23:20

# 显示时间戳
[whb@bite-alicloud test]$ date +%s
1673432636

# 时间戳转成可视时间
[whb@bite-alicloud test]$ date +%Y/%m/%d-%H:%M:%S -d @0
1970/01/01-08:00:00
[whb@bite-alicloud test]$ date +%Y/%m/%d-%H:%M:%S -d @100000
1970/01/02-11:46:40
[whb@bite-alicloud test]$ date +%Y/%m/%d-%H:%M:%S -d @1000000000
2001/09/09-09:46:40

cal 指令

cal命令可以用来显示公历(阳历)日历。公历是现在国际通用的历法,又称格列历,通称阳历。“阳历”又名“太阳历”,系以地球绕行太阳一周为一年,为西方各国所通用,故又名“西历”。
命令格式: cal [参数] [月份] [年份]
功能: 用于查看日历等时间信息,如只有一个参数,则表示年份(1-9999),如有两个参数,则表示月份和年份
常用选项

  • -3 显示系统前一个月,当前月,下一个月的月历
  • -j  显示在当年中的第几天(一年日期按天算,从1月1号算起,默认显示当前月在一年中的天数)
  • -y  显示当前年份的日历
举例:
[sxy@VM-12-13-centos linux-system-programming]$ cal
     August 2025    
Su Mo Tu We Th Fr Sa
                1  2
 3  4  5  6  7  8  9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

[sxy@VM-12-13-centos linux-system-programming]$ cal 1949
                               1949                               

       January               February                 March       
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
                   1          1  2  3  4  5          1  2  3  4  5
 2  3  4  5  6  7  8    6  7  8  9 10 11 12    6  7  8  9 10 11 12
 9 10 11 12 13 14 15   13 14 15 16 17 18 19   13 14 15 16 17 18 19
16 17 18 19 20 21 22   20 21 22 23 24 25 26   20 21 22 23 24 25 26
23 24 25 26 27 28 29   27 28                  27 28 29 30 31
30 31
        April                   May                   June        
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
                1  2    1  2  3  4  5  6  7             1  2  3  4
 3  4  5  6  7  8  9    8  9 10 11 12 13 14    5  6  7  8  9 10 11
10 11 12 13 14 15 16   15 16 17 18 19 20 21   12 13 14 15 16 17 18
17 18 19 20 21 22 23   22 23 24 25 26 27 28   19 20 21 22 23 24 25
24 25 26 27 28 29 30   29 30 31               26 27 28 29 30

        July                  August                September     
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
                1  2       1  2  3  4  5  6                1  2  3
 3  4  5  6  7  8  9    7  8  9 10 11 12 13    4  5  6  7  8  9 10
10 11 12 13 14 15 16   14 15 16 17 18 19 20   11 12 13 14 15 16 17
17 18 19 20 21 22 23   21 22 23 24 25 26 27   18 19 20 21 22 23 24
24 25 26 27 28 29 30   28 29 30 31            25 26 27 28 29 30
31
       October               November               December      
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
                   1          1  2  3  4  5                1  2  3
 2  3  4  5  6  7  8    6  7  8  9 10 11 12    4  5  6  7  8  9 10
 9 10 11 12 13 14 15   13 14 15 16 17 18 19   11 12 13 14 15 16 17
16 17 18 19 20 21 22   20 21 22 23 24 25 26   18 19 20 21 22 23 24
23 24 25 26 27 28 29   27 28 29 30            25 26 27 28 29 30 31
30 31

[sxy@VM-12-13-centos linux-system-programming]$ cal -3
      July 2025            August 2025         September 2025   
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa
       1  2  3  4  5                  1  2      1  2  3  4  5  6
 6  7  8  9 10 11 12   3  4  5  6  7  8  9   7  8  9 10 11 12 13
13 14 15 16 17 18 19  10 11 12 13 14 15 16  14 15 16 17 18 19 20
20 21 22 23 24 25 26  17 18 19 20 21 22 23  21 22 23 24 25 26 27
27 28 29 30 31        24 25 26 27 28 29 30  28 29 30            
                      31

find 指令

  • Linux下find命令在目录结构中搜索文件,并执行指定的操作。
  • Linux下find命令提供了相当多的查找条件,功能很强大。由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解一下。
  • 即使系统中含有网络文件系统( NFS),find命令在该文件系统中同样有效,只你具有相应的权限。
  • 在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间(这里是指30G字节以上的文件系统)。

语法: find pathname -options 
功能: 用于在文件树种查找文件,并作出相应的处理(可能访问磁盘)
常用选项

  • -name   按照文件名查找文件
  • 其他选项需要在查,这个命令其实比较复杂
# 在指定路径下搜索执行名称的文件
[whb@bite-alicloud test]$ find ~ -name test.c
/home/whb/test_code/old_code/test.c
/home/whb/test_code/test.c
...

which 指令

功能:在指令路径下(usr/bin)搜索系统指定的命令

举例
[whb@bite-alicloud test]$ which ls
alias ls='ls --color=auto'
/usr/bin/ls
[whb@bite-alicloud test]$ which pwd
/usr/bin/pwd

[sxy@VM-12-13-centos linux-system-programming]$ which ll
alias ll='ls -l --color=auto'
	/usr/bin/ls

alias 指令

功能:设置命令的别名
举例
[whb@bite-alicloud test]$ alias hello='ls -a -l -n'
[whb@bite-alicloud test]$ which hello
alias hello='ls -a -l -n'
/usr/bin/ls
[whb@bite-alicloud test]$ hello
total 36
drwxrwxr-x 2 1003 1003 4096 Jan 11 17:59 .
drwx------ 22 1003 1003 4096 Jan 11 17:57 ..
-rw-rw-r-- 1 1003 1003 28667 Jan 11 18:29 temp.txt

补充:
通过which指令可以看到 ll 等效于 ls -l,原因是alias将 ls -l 重命名为 ll
1. 如何看待指令?
指令和可执行程序(在Linux环境中test.c文件被gcc编译后生成的a.out文件)都是可以被执行的,所以指令就是可执行程序。

[root@VM-12-13-centos]~# ls /usr/bin/ls
/usr/bin/ls
[root@VM-12-13-centos]~# ls /usr/bin/pwd
/usr/bin/pwd
[root@VM-12-13-centos]~# ls /usr/bin/touch
/usr/bin/touch

通过上面可以看到指令作为可执行程序一定是在系统的某个位置(特定的路径)存在。

2. 执行指令之前,先做什么?
现在系统中查找对应的指令。

总结:
指令是在系统中特定的路径下存在,且一定是某种可执行程序(C/C++/Python/Shell)。
指令的本质就是可执行程序,和自己写好编译好的程序没有本质区别。
在Linux中,指令的本质就是文件(可执行文件),直接安装到系统的某个路径。

whereis 指令

功能:用于找到程序的源、⼆进制文件或手册
举例:
[whb@bite-alicloud test]$ whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
[whb@bite-alicloud test]$ whereis libc.so
libc: /usr/lib64/libc.so /usr/lib64/libc.a /usr/share/man/man7/libc.7.gz

在系统特定的路径查找,既可以找到可执行程序,又可以找到手册、安装包、压缩包等之类

grep 指令

行文本过滤工具

语法: grep [选项] 搜寻字符串 文件
功能: 在文件中搜索字符串,将找到的行打印出来
常用选项

  • -i :忽略大小写的不同,所以大小写视为相同
  • -n :顺便输出行号
  • -v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行
举例:
# 文件内容
[whb@bite-alicloud test]$ cat temp.txt
abcd
ABCD
hello
bite
1234

#基本查找
[whb@bite-alicloud test]$ grep "abcd" temp.txt
abcd

# 忽略大小写的不同,所以大小写视为相同
[whb@bite-alicloud test]$ grep -i "abcd" temp.txt
abcd
ABCD

# 顺便输出行号
[whb@bite-alicloud test]$ grep -n "abcd" temp.txt
1:abcd
[whb@bite-alicloud test]$ grep -ni "abcd" temp.txt
1:abcd
2:ABCD

# 反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行
[whb@bite-alicloud test]$ grep -v "abcd" temp.txt
ABCD
hello
bite
1234
[whb@bite-alicloud test]$ grep -vn "abcd" temp.txt
2:ABCD
3:hello
4:bite
5:1234
[whb@bite-alicloud test]$ grep -vni "abcd" temp.txt
3:hello
4:bite
5:1234

top

top -d 1 -n 5
-d: 刷新的时间间隔
-n: 刷新的次数
q:退出

为什么需要打包和压缩?
能被打包和压缩的,一定是一个整体。由多个文件 -> 一个文件,不容易造成文件缺失。
打包压缩,体积变小,下载时间变短,存储占据空间变小。

zip/unzip 指令

语法: zip 压缩文件.zip 目录或文件
功能: 将目录或文件压缩成zip格式
常用选项

  • -r 递 归处理,将指定目录下的所有文件和子目录一并处理

举例
将test2目录压缩: zip test2.zip test2/*
解压到tmp目录: unzip test2.zip -d /tmp

tar 指令(重要)

打包/解包,不打开它,直接看内容
语法: tar [-cxtzjvf] 文件与目录 ....
参数

  • -c :建立一个压缩文件的参数指令(create 的意思);
  • -x :解开一个压缩文件的参数指令!
  • -t :查看 tarfile 里面的文件!
  • -z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
  • -j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
  • -v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
  • -f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
  • -C : 解压到指定目录

范例一:将整个 /etc 目录下的文件全部打包成为 `/tmp/etc.tar`

[root@linux ~]$ tar -cvf /tmp/etc.tar /etc<==仅打包,不压缩!
[root@linux ~]$ tar -zcvf /tmp/etc.tar.gz /etc <==打包后,以 gzip 压缩
[root@linux ~]$ tar -jcvf /tmp/etc.tar.bz2 /etc <==打包后,以 bzip2 压缩

特别注意,在参数 f 之后的文件档名是自己取的,我们习惯上都用 .tar 来作为辨识。
如果加 z 参数,则以 .tar.gz 或 .tgz 来代表 gzip 压缩过的 tar file ~
如果加 j 参数,则以 .tar.bz2 来作为附档名啊~
上述指令在执行的时候,会显示一个警告讯息:
『`tar: Removing leading `/" from member names`』那是关於绝对路径的特殊设定。

范例二:查阅上述 /tmp/etc.tar.gz 文件内有哪些文件?

[root@linux ~]$ tar -ztvf /tmp/etc.tar.gz

由于我们使用 gzip 压缩,所以要查阅该 tar file 内的文件时,就得要加上 z 这个参数了!这很重要的!

范例三:将 /tmp/etc.tar.gz 文件解压缩在 /usr/local/src 底下

[root@linux ~]$ cd /usr/local/src
[root@linux src]$ tar -zxvf /tmp/etc.tar.gz

在预设的情况下,我们可以将压缩档在任何地方解开的!以这个范例来说,我先将工作目录变换到 /usr/local/src 底下,并且解开 /tmp/etc.tar.gz ,则解开的目录会在 /usr/local/src/etc 呢!另外,如果您进入 /usr/local/src/etc
则会发现,该目录下的文件属性与 /etc/ 可能会有所不同!

范例四:在 /tmp 底下,我只想要将 /tmp/etc.tar.gz 内的 etc/passwd 解开而已[root@linux ~]# cd /tmp

[root@linux ~]$ cd /tmp
[root@linux tmp]$ tar -zxvf /tmp/etc.tar.gz etc/passwd

我可以透过 tar -ztvf 来查阅 tarfile 内的文件名称,如果单只要一个文件,就可以透过这个方式来下达!注意到! etc.tar.gz 内的根目录 / 是被拿掉了!

范例五:将 /etc/ 内的所有文件备份下来,并且保存其权限!

[root@linux ~]# tar -zxvpf /tmp/etc.tar.gz /etc
# 这个 -p 的属性是很重要的,尤其是当您要保留原本文件的属性时!

范例六:在 /home 当中,比 2005/06/01 新的文件才备份
[root@linux ~]$ tar -N "2005/06/01" -zcvf home.tar.gz /home

范例七:我要备份 /home, /etc ,但不要 /home/dmtsai

[root@linux ~]$ tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc

范例八:将 /etc/ 打包后直接解开在 /tmp 底下,而不产生文件!

[root@linux ~]$ cd /tmp
[root@linux tmp]$ tar -cvf - /etc | tar -xvf -

这个动作有点像是 cp -r /etc /tmp 啦~依旧是有其有用途的!
要注意的地方在於输出档变成 - 而输入档也变成 - ,又有一个 | 存在~
这分别代表 standard output, standard input 与管线命令啦!

tar czf XXX        打包压缩
tar tzf XXX.tgz   预览
tar xzf XXX.tgz   解压缩

tar -> 打包后缀
.gz -> 压缩后缀
XXX.tar.gz -> XXX.tgz

bc 指令

bc命令可以很方便的进行浮点运算

uname ‒r 指令

语法:uname [选项]
功能: uname用来获取电脑和操作系统的相关信息。
补充说明:uname可显示linux主机所用的操作系统的版本、硬件的名称等基本信息。
常用选项:

  • -a或‒all 详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称
  • lsb_release -a:查看操作系统版本

重要的⼏个热键 [Tab], [ctrl]-c, [ctrl]-d

[Tab]按键---具有『命令补全』和『档案补齐』的功能
[Ctrl]-c按键---让当前的程序『停掉』
[Ctrl]-d按键---通常代表着:『键盘输入结束(End Of File, EOF 戒 End OfInput)』的意思;另外,他也可以用来取代exit

ctrl + r可以搜索历史命令,所以Linux系统一定记录了历史命令。Linux默认记录最新的1000条。

关机

语法:shutdown [选项]
常见选项:
• -h:将系统的服务停掉后,⽴即关机。
• -r:在将系统的服务停掉之后就重新启动
• -t sec:-t 后⾯加秒数,亦即『过⼏秒后关机』的意思

以下命令作为扩展:

安装和登录命令: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。

第四章:shell命令以及运行原理

Linux严格意义上说的是一个操作系统,我们称之为“核⼼(kernel)“ ,但我们⼀般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?

从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含:

  • 将使用者的命令翻译给核⼼(kernel)处理。
  • 同时,将核心的处理结果翻译给使用者。

对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。

shell 对于Linux,有相同的作⽤,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。

存在的意义
1. 进行命令行的解释
2. 保护OS,对于用户的非法请求,直接拦截

命令行解释器:
在Linux下也叫命令行、bash、sh、shell(所有命令行统称)
在Windows下就是图形化界面

第五章:Linux权限的概念

Linux下有两种⽤户:超级用户(root)、普通用户。

  • 超级用户:可以再linux系统下做任何事情,不受限制
  • 普通用户:在linux下做有限的事情。
  • 超级用户的命令提示符是“#”,普通⽤户的命令提示符是“$”。

命令:su [用户名]
功能:切换用户。
例如,要从root用户切换到普通用户user,则使用 su user。
要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的口令。

root用户和普通用户切换

1. su(不带横线)

  • 作用:切换到目标用户,但 不改变当前的工作环境(保持原用户的 shell 环境变量)。

  • 特点

    • 仅切换用户身份,不加载目标用户的 shell 配置文件(如 ~/.bashrc~/.bash_profile)。

    • 当前目录不变(仍在执行命令时的目录)。

    • 环境变量(如 PATHHOME)仍保持原用户的设置。

[sxy@VM-12-13-centos 01_06_Linux_Permissions_Concept_lesson5]$ su
Password: 
[root@VM-12-13-centos 01_06_Linux_Permissions_Concept_lesson5]# pwd
/home/sxy/linux-system-programming/01_06_Linux_Permissions_Concept_lesson5

2. su -(带横线)

  • 作用完全模拟目标用户的登录环境(包括 shell 和环境变量)。

  • 特点

    • 加载目标用户的 shell 配置文件(如 ~/.bashrc~/.bash_profile)。

    • 切换到目标用户的家目录(如 /home/username 或 /root)。

    • 环境变量(如 PATHHOME)会更新为目标用户的设置。

[sxy@VM-12-13-centos 01_06_Linux_Permissions_Concept_lesson5]$ su -
Password: 
Last login: Thu Aug 14 14:27:41 CST 2025 on pts/0
[root@VM-12-13-centos ~]# pwd
/root

Linux权限管理

1. 文件访问者的分类(⼈)
文件和文件目录的所有者:u---User(中国平⺠ 法律问题)
文件和文件目录的所有者所在的组的用户:g---Group(不多说)
其它用户:o---Others (外国⼈)

2. 文件类型和访问权限(事物属性)

文件类型:

  • d:文件夹
  • -:普通文件
  • l:软链接(类似Windows的快捷方式)
  • b:块设备文件(例如硬盘、光驱等)
  • p:管道文件
  • c:字符设备文件(例如屏幕等串口设备)
  • s:套接口文件

基本权限

  • 读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
  • 写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
  • 执⾏(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进⼊目录的权限
  • “一”表示不具有该项权限

文件权限值的表示方法

字符表示方法


8进制数值表示方法

文件访问权限的相关设置方法

1. chmod

功能:设置文件的访问权限
格式:chmod [参数] 权限 文件名
常用选项
R -> 递归修改目录文件的权限
说明:只有文件的拥有者和root才可以改变文件的权限

• chmod命令权限值的格式:
   用户表示符+/-=权限字符
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
用户符号:   
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户

实例:
chmod u+w /home/abc.txt

chmod o-x /home/abc.txt

chmod a=x /home/abc.txt

三位8进制数字

1. 位置是什么含义是确定的
2. 每一个位置只有是或否,具有指定的权限

111 110 110
  7     6     6
二进制的110对应八进制的7

权限的二进制表示
每类用户(Owner/Group/Others)的权限由 3 个二进制位表示,顺序固定为 rwx(读、写、执行)。
例如:rwx = 111(二进制),r-- = 100,-w- = 010,--x = 001。

二进制与八进制的对应关系
3 位二进制数的范围是 000(0)到 111(7),正好对应 一位八进制数字(0-7)。
000 = 0(无权限)
111 = 7(全部权限)

每类用户的权限由 3 个二进制位表示(如 rwx=111),3 位二进制数的范围是 000(0)到 111(7),正好对应 一位八进制数字(0-7)。
chmod 的三位数字分别对应:第一位:Owner 的权限(如 7=rwx)。
第二位:Group 的权限(如 5=r-x)。
第三位:Others 的权限(如 4=r--)。

实例:
chmod 664 /home/abc.txt

chmod 640 /home/abc.txt

2. chown

功能:修改文件的拥有者
格式:chown [参数] 用户名 文件名
实例:

chown user1 f1
chown -R user1 filegroup1

3. chgrp

功能:修改文件或目录的所属组
格式:chgrp [参数] 用户组名 文件名
常用选项:-R 递归修改文件或目录的所属组
实例:

chgrp users /abc/f2

4. umask

功能:
• 查看或修改文件掩码
• 新建文件夹默认权限=0666
• 新建目录默认权限=0777
• 但实际上你所创建的文件和目录,看到的权限往往不是上⾯这个值。原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask &~umask
格式:umask 权限值
说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为0022,普通用户默认为0002。

实例:
umask 755
umask //查看
umask 044//设置

file 指令

功能说明:辨识文件类型。
语法:file [选项] 文件或目录...  
常用选项

  • -c 详细显示指令执行过程,便于排错或分析程序执行的情形。
  • -z 尝试去解读压缩文件的内容

使用 sudo分配权限
(1)修改/etc/sudoers 文件分配文件

# chmod 740 /etc/sudoers
# vi /etc/sudoer

格式:接受权限的用户登陆的主机 =(执行命令的用户) 命令

(2)使用 sudo 调用授权的命令

$ sudo –u 用户名 命令

实例:

$sudo -u root /usr/sbin/useradd u2

目录的权限

  • 可执行权限: 如果目录没有可执行权限, 则无法cd到目录中。
  • 可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容。
  • 可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件。

于是, 问题来了~~
换句话来讲, 就是只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写权限。
这好像不太科学啊, 我张三创建的一个文件, 凭什么被你李四可以删掉? 我们用下面的过程印证一下。

为了解决这个不科学的问题, Linux引入了粘滞位的概念。

关于权限的总结

  • 目录的可执行权限是表示你可否在目录下执行命令。
  • 如果目录没有 -x 权限,则无法对目录执行任何命令,甚至无法 cd 进入目录, 即使目录仍然有 -r 读权限(这个地方很容易犯错,认为有读权限就可以进⼊目录读取目录下的文件)
  • 而如果目录具有 -x 权限,但没有 -r 权限,则用户可以执行命令,可以 cd 进入目录。但由于没有目录的读权限
  • 所以在目录下,即使可以执行ls 命令,但仍然没有权限读出目录下的文档。

粘滞位

[root@localhost ~]$ chmod +t /home/ # 加上粘滞位
[root@localhost ~]$ ls -ld /home/
drwxrwxrwt. 3 root root 4096 9⽉ 19 16:00 /home/
[root@localhost ~]$ su - litao
[litao@localhost ~]$ rm /home/abc.c #litao不能删除别⼈的文件
rm:是否删除有写保护的普通空文件 "/home/abc.c"?y
rm: 无法删除"/home/abc.c": 不允许的操作

当⼀个目录被设置为"粘滞位"(⽤chmod +t),则该目录下的文件只能由

  1. 超级管理员删除
  2. 该目录的所有者删除
  3. 该文件的所有者删除

作业

1.  以下哪个命令输出Linux内核的版本信息:

A.uname -r
B.vmstat
C.sar
D.stat

答案:A
uname -r     查看linux内核版本信息
vmstat报告关于内核线程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息
sar主要帮助我们掌握系统资源的使用情况,特别是内存和CPU的使用情况
stat用于显示文件的状态信息

2. linux 2.6.* 内核默认支持的文件系统有哪些?[多选]

A.ext3
B.ext2
C.ext4
D.xfs
E.ufs

答案:ABCD
A.全称Linux extended file system, extfs,即Linux扩展文件系统,ext2为第二代
D.XFS一种高性能的日志文件系统,2000年5月,Silicon Graphics以GNU通用公共许可证发布这套系统的源代码,之后被移植到Linux 内核上。XFS 特别擅长处理大文件,同时提供平滑的数据传输
E.UFS是UNIX文件系统的简称,它来源于4.3Tahoe发行版中提供的BSD Fat Fast File System(FFS)系统,属于FFS的演化版本

3. 批量删除当前目录下后缀名为.c的文件。如a.c、b.c。

A.rm *.c
B.find . -name "*.c" -maxdepth 1 | xargs rm
C.find . -name "*.c" | xargs rm
D.以上都不正确

答案:AB
A. rm *.c *通配符,表示匹配任意字符任意次
B. find . -name "*.c" -maxdepth 1 | xargs rm  
find . -name "*.c" -maxdepth 1 找到当前目录下.*结尾的文件,目录深度为1
xargs是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令,用于很多不支持|管道来传递参数的命令,相当于将前边命令的执行结果,也就是查找到的文件名,传递给后边的rm指令进行删除
C. find . -name "*.c" | xargs rm 没有进行深度控制,删除的不仅是当前目录下的文件,会将子目录下的文件也删除
 

4.  linux查看cpu占用的命令是什么?

A.top
B.netstat
C.free
D.df

答案:A
A. top 查看cpu资源使用状态
B. netstat 查看网络连接状态
C. free 查看内存资源状态
D. df 查看磁盘分区资源状态

5. 在Linux系统中, 为找到文件try_grep含有以a字母为行开头的内容, 可以使用命令?

A.grep -E #$ try_grep
B.grep -E #a try_grep
C.grep -E ^$ try_grep
D.grep -E ^a try_grep

答案:D
grep选项中,-E选项可以用来扩展选项为正则表达式;
$表示匹配文件末尾,字符需要在$之前表示以字符结尾,a$表示以a结尾
^表示匹配文件起始,字符需要在^之后表示以字符起始,^a表示以a起始

6. 在使用mkdir命令创建新的目录时,在其父目录不存在时先创建父目录的选项是

A.-m
B.-d
C.-f
D.-p

答案:D
A. -m 在创建目录的同时设置权限
B. -d 没有这个选项
C. -f 没有这个选项
D. -p 在创建多层级目录的时候若上级目录不存在则创建

7. Linux 有三个查看文件的命令,若希望在查看文件内容过程中可以用光标上下移动来查看文件内容,应使用命令。

A.cat
B.more
C.less
D.menu

答案:C
A.cat打印文件内容到终端显示
B.more分页显示文件内容,但是通常向上翻页不好使
C.less分页显示文件内容,可以灵活上下移动光标和翻页
D.menu没有这个指令(至少centos7上默认没有这个命令)

8. linux下给文件start.sh设置权限为自己可读可修改可执行,组内用户为可读可执行不可修改,其余用户没有任何权限,那么设置该文件权限的命令为 

A.chmod start.sh 706
B.chmod start.sh 750
C.chmod start.sh 705
D.chmod start.sh 777

答案:B
自己可读可修改可执行:111 ->7
组内用户为可读可执行不可修改:101->5
其余用户没有任何权限:000->0
因此整体转换后的权限为:750

9. 如果系统的umask设置为244,创建一个新文件后,它的权限:

A.--w-r--r--
B.-r-xr--r--
C.-r---w--w-
D.-r-x-wx-wx

答案:C
umask是linux下设置文件默认创建权限掩码, 文件给定权限与掩码取反相与得到实际权限
默认创建普通文件给定权限666(不给予可执行权限), 
666 & (~244) = 422 -> 100010010 -> -r---w--w-

10.  在Linux中,file.sh文件的权限为-rw-r--r-x,其对应权限用数值形式表示为

A.775
B.745
C.645
D.643

答案:C
linux下文件的权限外在表示为-rw-r--r-x
但是在系统中使用二进制位存储,也就是使用0和1表示是否具备操作的权限,因此该权限被表示为:-110100101,
以每3个比特位表示一个八进制数字,则转换为三个8进制数字为645

11. 关于沾滞位,一下描述正确的是:

A.其它用户在设置了沾滞位的目录下不可以删除别人的文件
B.其它用户在设置了沾滞位的目录下不可以创建文件
C.使用chmod +t 设置目录沾滞位
D.使用chmod +x 设置目录沾滞位

答案:AC
沾滞位的作用:在设置的沾滞位的目录下,其它用户可以创建文件,但是只能删除自己的文件,不
可以删除别人的文件;
可以通过chmod +t设置其它用户权限位中的沾滞位


网站公告

今日签到

点亮在社区的每一天
去签到