当前位置: 首页 > news >正文

【Linux 系统探幽:从入门到内核・系统编程开篇】基础指令与权限精讲,筑牢系统开发根基

在这里插入图片描述
在这里插入图片描述

文章目录

  • 前言:
    • 《算法磨剑: 用C++思考的艺术》 专栏
    • 《C++:从代码到机器》 专栏
    • 《Linux系统探幽:从入门到内核》 专栏
  • 正文:
    • 一: Linux基础指令
      • 1.Linux背景
        • 1.1 . 发展史
        • 1.2 . 开源:
        • 1.3 官网
        • 1.4 企业应⽤现状
        • 1.5 . 发⾏版本 :
        • 1.6 os概念,定位
      • 2. Linux下基本指令:
        • ls 指令
        • pwd 命令
        • cd 指令
        • touch 指令:
        • mkdir 指令
        • rmdir 指令 && rm 指令
        • man 指令
        • cp 指令
        • mv 指令
        • cat 指令
        • more 指令
        • less 指令(相较More 更推荐这个)
        • head 指令
        • tail指令
        • data指令
        • cal 指令
        • find 指令
        • which 指令
        • whereis 指令
        • alias 指令
        • grep 指令
        • top
        • zip/unzip 指令
        • tar 指令(重要)
        • bc指令
        • uname ‒r 指令
        • 关机
        • 以下命令作为扩展
        • shell命令以及运⾏原理
    • 二:Linux权限的概念
      • Linux权限管理
      • 关于权限的总结:
  • 结语:

前言:

《算法磨剑: 用C++思考的艺术》 专栏

专注用C++破解算法面试真题,详解LeetCode热题,构建算法思维,从容应对技术挑战。

👉 点击关注专栏


《C++:从代码到机器》 专栏

深入探索C++从语法特性至底层原理的奥秘,构建坚实而深入的系统编程知识体系。

👉 点击关注专栏


《Linux系统探幽:从入门到内核》 专栏

深入Linux操作系统腹地,从命令、脚本到系统编程,探索Linux的运作奥秘。

👉 点击关注专栏


作者:孤廖
学习方向:C++/Linux/算法
人生格言:折而不挠,中不为下

正文:

学完本文你可初步掌握:
> - 初始Linux操作系统
>  - 初识shell命令 ,了解若⼲背景知识。
>  - 初步使⽤40+个常⽤Linux命令
>  - 掌握Linux权限概念与思想,能深度理解“权限”
>  - 初步了解Linux ⽬录结构含义
>  - 了解Linux相关知识:⽬录结构/路径/重定向/管道操作等

一: Linux基础指令

1.Linux背景

1.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和惠普Open
    Software 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 Again
    Shell(bash)和GNU的C编译程序(gcc)以及为数不多的其它语⾔。Torvalds绝对没有想到他设
    想的⼀种能够针对⾼级业余爱好者和⿊客们的操作系统已经产⽣,这就是⼈们所称的Linux。
  • Linux发布时的版本是0.02,后来⼜有0.03版,然后⼜跳到0.10版。因为世界各地越来越多的程序员都开始开发Linux,它已经达到0.95版。这就意味着正式公布1.0版本的时间已经为期不远了。正式的1.0版本是在1994年公布的

在这里插入图片描述

对比以下Windows的发展史

在这里插入图片描述

1.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也成为了开源软件的代名词。
1.3 官网
  • kernel官⽹
1.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成为最受⻘睐的云计算、⼤数据平台操作系统。
1.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来管理软件包。

CentOS目前已经停止更新 但是博主在这里仍推荐新手可以尝试下

  • 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是⼀款渗透测试⼯具,或者是⽂明⿊客(我不想谈论恶意⿊客)⻘睐的操作系统。
  • 其他… …

Xshell学生版

1.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 + insertctrl + c / ctrl + v 是不⾏的.

2. 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 ⼀⾏只输出⼀个⽂件。
[whb@bite-alicloud test]$ ls
dir file.txt
[whb@bite-alicloud test]$ ls -a
. .. dir file.txt
[whb@bite-alicloud test]$ ls -a -l
total 12
drwxrwxr-x 3 whb whb 4096 Jan 11 15:01 .
drwx------ 22 whb whb 4096 Jan 11 14:21 ..
drwxrwxr-x 2 whb whb 4096 Jan 11 14:22 dir
-rw-rw-r-- 1 whb whb 0 Jan 11 14:22 file.txt
[whb@bite-alicloud test]$ ls -a -l -F
total 12
drwxrwxr-x 3 whb whb 4096 Jan 11 15:01 ./
drwx------ 22 whb whb 4096 Jan 11 14:21 ../
drwxrwxr-x 2 whb whb 4096 Jan 11 14:22 dir/
-rw-rw-r-- 1 whb whb 0 Jan 11 14:22 file.txt
[whb@bite-alicloud test]$ ls -alFn
total 12
drwxrwxr-x 3 1003 1003 4096 Jan 11 15:01 ./
drwx------ 22 1003 1003 4096 Jan 11 14:21 ../
drwxrwxr-x 2 1003 1003 4096 Jan 11 14:22 dir/
-rw-rw-r-- 1 1003 1003 0 Jan 11 14:22 file.txt
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 指令:

语法: touch [选项]… ⽂件…
功能:touch命令参数可更改⽂档或⽬录的⽇期时间,包括存取时间和更改时间,或者新建⼀个不存在的⽂件。

三个时间 access,change,modify

常⽤选项:
-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
# 查看⽂件时间
[whb@bite-alicloud test]$ stat newFile.txt
File: ‘newFile.txt’
Size: 0 Blocks: 0 IO Block: 4096 regular empty
file
Device: fd01h/64769d Inode: 1844719 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1003/ whb) Gid: ( 1003/ whb)
Access: 2023-01-11 15:06:45.832787572 +0800
Modify: 2023-01-11 15:06:45.832787572 +0800
Change: 2023-01-11 15:06:45.832787572 +0800
Birth: -
# 修改⽂件***access***时间
[whb@bite-alicloud test]$ touch -a newFile.txt
[whb@bite-alicloud test]$ stat newFile.txt
File: ‘newFile.txt’
Size: 0 Blocks: 0 IO Block: 4096 regular empty
file
Device: fd01h/64769d Inode: 1844719 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1003/ whb) Gid: ( 1003/ whb)
Access: 2023-01-11 15:07:00.062846804 +0800
Modify: 2023-01-11 15:06:45.832787572 +0800
Change: 2023-01-11 15:07:00.062846804 +0800 # 该时间为何会变化?
Birth: -
# 修改⽂件***Modify***时间
[whb@bite-alicloud test]$ touch -m newFile.txt
[whb@bite-alicloud test]$ stat newFile.txt
File: ‘newFile.txt’
Size: 0 Blocks: 0 IO Block: 4096 regular empty
file
Device: fd01h/64769d Inode: 1844719 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1003/ whb) Gid: ( 1003/ whb)
Access: 2023-01-11 15:07:00.062846804 +0800
Modify: 2023-01-11 15:09:19.428426903 +0800
Change: 2023-01-11 15:09:19.428426903 +0800
Birth: -
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 "你好CSDN">myfile.txt
[whb@bite-alicloud test]$ cat myfile.txt
你好CSDN
[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
你好CSDN
# 将多个⽂件拷⻉到指定路径下
[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
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
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
...
more 指令

语法: more [选项]
功能:more命令,功能类似 cat
常⽤选项:
• -n 指定输出⾏数
• q 退出more

举例:

# 命令⾏输出多⾏⽂本
[whb@bite-alicloud test]$ cnt=0; while [ $cnt -le 2000 ]; do echo "hello
bite"; 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 指令(相较More 更推荐这个)

• 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

模拟动态⽇志查看功能
在这里插入图片描述

# 综合问题
# 如何显⽰⽂件的[180,200]⾏的内容
[whb@bite-alicloud test]$ head -200 temp.txt | tail -20
hello 180
hello 181
hello 182
hello 183
hello 184
hello 185
hello 186
hello 187
hello 188
hello 189
hello 190
hello 191
hello 192
hello 193
hello 194
hello 195
hello 196
hello 197
hello 198
hello 199
data指令

指定格式显⽰时间: 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

在设定时间⽅⾯
• 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″ //这样可以设置全部时间

  1. 时间戳
    • 时间->时间戳:date +%s
    • 时间戳->时间:date -d@1508749502
    • Unix时间戳(英⽂为Unix epoch, Unix time, POSIX time 或 Unix timestamp)是从1970年1⽉1⽇(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒

举例:

# 显⽰常规时间
[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 显⽰当前年份的⽇历

该指令不做代码举例

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 指令

功能:搜索系统指定的命令

举例

[whb@bite-alicloud test]$ which ls
alias ls='ls --color=auto'
/usr/bin/ls
[whb@bite-alicloud test]$ which pwd
/usr/bin/pwd
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
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
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

关于 rzsz
这个⼯具⽤于 windows 机器和远端的 Linux 机器通过 XShell 传输⽂件. 安装完毕之后可以通过拖拽的⽅式将⽂件上传过去
sudo yum/apt install -y lrzlz

简单了解即可

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 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 与管线命令啦!

上述范例仅作参考

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
关机

语法: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解析给⽤⼾。

帮助理解:如果说你是⼀个闷骚且害羞的程序员,那shell就像媒婆,操作系统内核就是你们村头漂亮的且有让你⼼动的MM⼩花。你看上了⼩花,但是有不好意思直接表⽩,那就让你你家⼈找媒婆帮你提亲,所有的事情你都直接跟媒婆沟通,由媒婆转达你的意思给⼩花,⽽我们找到媒婆姓王,所以我们叫它王婆,它对应我们常使⽤的bash

二:Linux权限的概念

Linux下有两种⽤⼾:超级⽤⼾(root)、普通⽤⼾。
• 超级⽤⼾:可以再linux系统下做任何事情,不受限制
• 普通⽤⼾:在linux下做有限的事情。
• 超级⽤⼾的命令提⽰符是“#”,普通⽤⼾的命令提⽰符是“$”。
命令:su [⽤⼾名]
功能:切换⽤⼾。
例如,要从root⽤⼾切换到普通⽤⼾user,则使⽤ su user。
要从普通⽤⼾user切换到root⽤⼾则使⽤ su root(root可以省略),此时系统会提⽰输⼊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对⽂件⽽⾔,具有执⾏⽂件的权限;对⽬录来说,具有进⼊⽬录的权

◦ “—”表⽰不具有该项权限

⽂件权限值的表⽰⽅法

  • 字符表⽰⽅法(r,w,x,-)
  • 8进制数值表⽰⽅法(666,777)

⽂件访问权限的相关设置⽅法

  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进制数字
◦ 实例:
▪ chmod 664 /home/abc.txt
▪ chmod 640 /home/abc.txt

  1. chown
    功能:修改⽂件的拥有者
    格式:chown [参数] ⽤⼾名 ⽂件名
    实例:
    • chown user1 f1
    • chown -R user1 filegroup1
  2. chgrp
    功能:修改⽂件或⽬录的所属组
    格式:chgrp [参数] ⽤⼾组名 ⽂件名
    常⽤选项:-R 递归修改⽂件或⽬录的所属组
    实例: chgrp users /abc/f2
  3. umask
    功能:
    • 查看或修改⽂件掩码
    • 新建⽂件夹默认权限=0666
    • 新建⽬录默认权限=0777
    • 但实际上你所创建的⽂件和⽬录,看到的权限往往不是上⾯这个值。原因就是创建⽂件或⽬录的时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的⽂件权限是: (起始权限 &~umask)
    格式:umask 权限值
    说明:将现有的存取权限减去权限掩码后,即可产⽣建⽴⽂件时预设权限。超级⽤⼾默认掩码值为0022,普通⽤⼾默认为0002。
    实例:
    • umask 755
    • umask //查看
    • umask 044//设置

⽬录的权限
• 可执⾏权限: 如果⽬录没有可执⾏权限, 则⽆法cd到⽬录中.
• 可读权限: 如果⽬录没有可读权限, 则⽆法⽤ls等命令查看⽬录中的⽂件内容.
• 可写权限: 如果⽬录没有可写权限, 则⽆法在⽬录中创建⽂件, 也⽆法在⽬录中删除⽂件.

于是, 问题来了~~ 换句话来讲, 就是只要⽤⼾具有⽬录的写权限, ⽤⼾就可以删除⽬录中的⽂件, ⽽不论这个⽤⼾是否有这个⽂件的写权限.
这好像不太科学啊, 我张三创建的⼀个⽂件, 凭什么被你李四可以删掉? 我们⽤下⾯的过程印证⼀下.

[root@localhost ~]$ chmod 0777 /home/
[root@localhost ~]$ ls /home/ -ld
drwxrwxrwx. 3 root root 4096 9⽉ 19 15:58 /home/
[root@localhost ~]$ touch /home/root.c
[root@localhost ~]$ ls -l /home/
总⽤量 4
-rw-r--r--. 1 root root 0 9⽉ 19 15:58 abc.c
drwxr-xr-x. 27 litao litao 4096 9⽉ 19 15:53 litao
-rw-r--r--. 1 root root 0 9⽉ 19 15:59 root.c
[root@localhost ~]$ su - litao
[litao@localhost ~]$ rm /home/root.c #litao可以删除root创建的⽂件
rm:是否删除有写保护的普通空⽂件 "/home/root.c"?y
[litao@localhost ~]$ exit
logou

为了便于理解 这里引用一下我所喜欢的一本科幻小说《三体》里的一句话:毁灭你与你何干----《三体》

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

粘滞位[选学]

[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. 该⽂件的所有者删除

关于权限的总结:

• ⽬录的可执⾏权限是表⽰你可否在⽬录下执⾏命令。
• 如果⽬录没有 -x 权限,则⽆法对⽬录执⾏任何命令,甚⾄⽆法 cd 进⼊⽬, 即使⽬录仍然有 -r 读
权限(这个地⽅很容易犯错,认为有读权限就可以进⼊⽬录读取⽬录下的⽂件)
• ⽽如果⽬录具有 -x 权限,但没有 -r 权限,则⽤⼾可以执⾏命令,可以 cd 进⼊⽬录。但由于没有
⽬录的读权限
• 所以在⽬录下,即使可以执⾏ ls 命令,但仍然没有权限读出⽬录下的⽂档




结语:

这篇博客前后打磨了挺长时间,从 Linux 背景、发展,到二十多个基础指令,再到权限概念与管理,尽量把知识点讲全讲细。希望能帮大家,尤其是刚接触 Linux 的朋友,搭建起对 Linux 基础操作和权限的认知框架。若你在学习这些指令、理解权限时遇到问题,欢迎评论区交流~后续专栏还会深入 Linux 系统编程、网络编程,感兴趣的话可以关注下~


文章转载自:

http://NTcs9YXW.jngdh.cn
http://Zvz7Q1R7.jngdh.cn
http://yUuomsBY.jngdh.cn
http://Uy5ROLzl.jngdh.cn
http://LznCIg7M.jngdh.cn
http://a3bhmAuc.jngdh.cn
http://HebPR3Kt.jngdh.cn
http://0UDCD6a2.jngdh.cn
http://TRX7rOQg.jngdh.cn
http://tLHGds4L.jngdh.cn
http://1ru8DwVm.jngdh.cn
http://FeNDEEZk.jngdh.cn
http://LXtr5No7.jngdh.cn
http://GK3N9cZw.jngdh.cn
http://rwKrFvv2.jngdh.cn
http://FqBMXlgt.jngdh.cn
http://PQPmYZHU.jngdh.cn
http://8vvLLDYG.jngdh.cn
http://LkTvNibp.jngdh.cn
http://Mkx0A3bM.jngdh.cn
http://uUiog9lZ.jngdh.cn
http://6l5uMaCS.jngdh.cn
http://sZm4OylN.jngdh.cn
http://R3AFDOMT.jngdh.cn
http://GDvzY7OH.jngdh.cn
http://JDxSd3ge.jngdh.cn
http://JqxNLIbT.jngdh.cn
http://NTOBt5WM.jngdh.cn
http://kSoNTyAB.jngdh.cn
http://3cv98GtO.jngdh.cn
http://www.dtcms.com/a/388647.html

相关文章:

  • 【STL库】哈希封装 unordered_map/unordered_set
  • 【AI编程】Qoder AI 编程工具从部署到深度使用实战详解
  • 网络原理——数据链路层
  • 大语言模型的 “幻觉” 难题:技术成因、解决方案与应用风险规避
  • 状态保留功耗门控 SRPG (State Retention Power Gating)
  • Elman神经网络多输入多输出回归预测+SHAP可解释分析+新数据预测(MATLAB源码)
  • 408 王道数据结构的学习记录
  • 使用内存映射读取文件和写入文件,并进行性能测试
  • SQL的UNION用法大全介绍
  • 从Web原生到高性能:如何优化企业数据库管理工具
  • 基于python新能源汽车数据分析可视化系统 懂车帝 Scrapy爬虫 Django框架 Vue框架 大数据项目(源码+文档)✅
  • 线性回归和 softmax 回归
  • mysql远程访问连接设置
  • 《WINDOWS 环境下32位汇编语言程序设计》学习17章 PE文件(2)
  • Linux网络编程:从协议到实战
  • Vector 底层实现详解
  • OpenShift Virtualization - 虚机存储的相关概念 DataVolume、CDI 和 StorageProfile
  • 2025年Web自动化测试与Selenium面试题收集:从基础到进阶的全方位解析
  • pytorch中的FSDP
  • 贪心算法与材料切割问题详解
  • 2. 结构体
  • MySQL 核心操作:多表联合查询与数据库备份恢复
  • vue3学习日记(十四):两大API选型指南
  • 微信支付回调成功通知到本地
  • 量化交易 - Simple Regression 简单线性回归(机器学习)
  • Kubernetes控制器详解:从Deployment到CronJob
  • python 架构技术50
  • 第九周文件上传
  • MCP大白话理解
  • 【Qt】QJsonValue存储 int64 类型的大整数时,数值出现莫名其妙的变化