一. Linux背景
1.发展史
本门课程学习Linux系统编程,你可能要问Linux从哪里来?它是怎么发展的?在这里简要介绍Linux的发展史。要说Linux,还得从UNIX说起。
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. 企业应用现状
5. 发行版本
https://www.xshell.com/zh/free-for-home-school/
Linux比windows相对更高效,稳定,安全。Linux系统作用:Linux未来是我们程序的服务端的平台
6. os概念,定位
二. 使用XShell 远程登录 Linux虚拟机或云服务器
1. 关于Linux桌面
很多同学的 Linux 启动进入图形化的桌面. 这个东西大家以后就可以忘记了. 以后的工作中没有机会 使用图形界面。
思考: 为什么不使用图形界面?
2. 下载安装 XShell
XShell 是⼀个远程终端软件。下载官网:https://www.xshell.com/zh/xshell/
下载安装的时候选择 “home/school” 则为免费版本。
3. 查看 Linux 主机 ip
在终端下敲 ifconfig 指令, 查看到 ip 地址。
4. 使用 XShell 登录主机
在 XShell 终端下敲 ssh [ip] ,ip 为刚才看到的 ifconfig 结果。
如果网络畅通, 将会提示输入用户名密码。输入即可正确登陆。
5. XShell 下的复制粘贴
复制: ctrl + insert (有些同学的 insert 需要配合 fn 来按)
粘贴: shift + insert
ctrl + c / ctrl + v 是不行的.
三. Linux下基本指令(指令多用就行,不需要死记硬背)
首先先认识7个基本指令,再详细学习其他指令。
pwd: 查看当前所在的路径名
whoami: 查询当前使用Linux的用户名
clear: 清屏操作
ls: 罗列当前目录下的文件名
mkdir: 在当前目录下,新建一个目录或文件夹
cd: 切换到另一个路径上
touch: 新建一个目录文件
基础知识补充:
(1)centos用户切换
普通用户切换到root用户,方法:使用su或su -命令切换到root用户
- # 方法1:仅切换身份,不改变环境变量
- su
- # 输入root密码后切换
- # 方法2:切换身份并加载root的环境变量
- su -
- # 输入root密码后切换
复制代码
区别: su只切换用户身份,保留当前shell环境;而su -会加载目标用户的完整环境变量(如PATH),推荐使用su -以避免环境变量问题。
root用户切换到普通用户,方法:使用su 用户名或su - 用户名命令
- # 方法1:仅切换身份,不改变环境变量
- su 用户名
- # 方法2:切换身份并加载目标用户的环境变量
- su - 用户名
复制代码
注意:
-
如果从root切换到普通用户,使用su - 用户名时需要输入目标用户的密码。
-
su - 用户名更适合需要完整加载目标用户环境的场景。
重要提示:切换到root用户时,请谨慎操作,避免误删或修改系统关键文件。
(2)cd命令用法
- #切换到指定目录
- cd 路径
- #切换到用户主目录(即家目录,例如:/home/zs)
- cd 或 cd ~
- #切换到根目录(即:/,所有路径之根)
- cd /
- #切换到上一次访问的目录
- cd -
- #移动到上一级目录
- cd ..
复制代码
注意事项:
-
cd - 仅在之前访问过其他目录时有效。
-
使用相对路径(如 …/folder)或绝对路径(如 /home/user/folder)都可以导航。
-
在 Windows 中,若需跨盘符切换,可使用 cd /d D:\path(在cmd命令行中使用)。
(3)认识家目录和根目录
根目录,普通用户和root用户的路径都是 /
家目录,普通用户的路径是 /home/zs (zs是用户名),root用户的路径是 /root
在Linux操作系统中,根目录和家目录是两个基本但不同的概念。根目录是整个文件系统的最顶层目录,通常用斜杠(/)表示,它包含了系统的所有文件和目录。而家目录是指用户个人的工作目录,它是用户登录时默认的目录位置。
根目录:
-
根目录是Linux文件系统的起点,所有其他目录都从根目录开始。
-
根目录用单个斜杠(/)表示,是文件系统层次结构的最顶层。
-
所有用户和系统进程都可以访问根目录,但对其中的文件和子目录的访问权限可能会受到限制。
家目录:
-
家目录是用户私人空间,用于存储个人文件和设置。
-
对于普通用户,家目录的路径通常是/home/用户名,而对于root用户,家目录则是/root。
-
家目录可以通过波浪号(~)快速访问,例如cd ~会将用户带到其家目录。
-
每个用户都有自己的家目录,其他用户通常无法访问。
注意:在Linux系统中,根目录和家目录的区别主要体现在目录层次、目录产生的时间以及文件权限上。根目录是系统启动时就必须存在的,而家目录则是在创建新用户时才会生成。此外,家目录是用户的私有空间,通常只有该用户和管理员(root)有权访问和操作。
(4)linux中 . / 的作用
在 Linux 中,./ 表示当前目录,常用于执行当前目录下的可执行文件或脚本,因为默认情况下当前目录不在系统的 PATH 环境变量中,所以必须显式指定路径。
例如,假设当前目录下有一个名为 run.sh 的脚本:
- # 赋予执行权限
- chmod +x run.sh
- # 使用 ./ 执行当前目录下的脚本
- ./run.sh
复制代码
核心含义:
-
./表示当前工作目录。
-
./filename 表示当前目录下的 filename 文件。
-
如果直接输入 filename,系统会在 PATH 中查找,而不会自动在当前目录查找
(5)在windows新建一个空的文件,该文件占据磁盘空间
1. ls指令(查看文件属性)
语法: ls [选项] [目录或文件]
功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。
常用选项(了解几个常用的就行):
• -a 列出目录下的所有文件,包括以 . 开头的隐含文件。
• -d 将目录像文件⼀样显示,而不是显示其下的文件。 如:ls ‒d 指定目录
• -i 输出文件的 i 节点的索引信息。 如 ls ‒ai 指定文件
• -k 以 k 字节的形式表示文件的大小。ls ‒alk 指定文件
• -l 列出文件的详细信息
• -F 用来目录类型识别,在每个文件名后附上⼀个字符以说明该文件的类型,“*”表示可执行的普通⽂件;“/”表示目录;“@”表示符号链接;“|”表示FIFOs;“=”表示套接字(sockets)。
• -r 对目录反向排序
• -t 以时间排序
• -s 在l文件名后输出该文件的大小。(大小排序,如何找到目录下最大的文件)
• -R 列出所有子目录下的文件。(递归)
• -1 一行只输出⼀个文件。
举例:
- [whb@bite-alicloud test]$ ls
- dir file.txt
- #-a 列出目录下的所有文件,包括以 . 开头的隐含文件
- [whb@bite-alicloud test]$ ls -a
- . .. dir file.txt
- # -l 列出文件的详细信息
- [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
- # -F 用来目录类型识别,在每个文件名后附上⼀个字符以说明该文件的类型,
- # “*” 表示可执行的普通⽂件;“/”表示目录;“@”表示符号链接;
- # “|” 表示FIFOs;“=”表示套接字(sockets)
- [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
复制代码
注意:ll会列出该文件下的所有文件信息,包括隐藏的文件,而ls -l只列出显式文件,说明这两个命令还是不等同的!
2. pwd 命令(显示用户当前所在的目录)
语法: pwd
功能:显示用户当前所在的目录
常用选项:无
举例:
- [whb@bite-alicloud test]$ pwd
- /home/whb/test
复制代码
3. 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
复制代码
4. touch 指令(创建文件)
语法: 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
- # 查看⽂件时间
- [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: -
- # 更多讲解,会在基础IO部分统⼀在说
复制代码
5. 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)
复制代码
注意:
mkdir 主要用于创建目录(文件夹),不能用来创建文件。
touch 主要用于创建空文件或更新文件的时间戳,不能用来创建目录。
6. rmdir 指令 && rm 指令
6.1 rmdir 指令(仅能删除空目录)
rmdir是⼀个与mkdir相对应的命令,mkdir是建立目录,而rmdir是删除空目录,具有一定的安全性。如果目录非空,命令会报错。
常用选项:
• -p 当子目录被删除后如果父目录也变成空目录的话,就连带父目录⼀起删除。
常见用法:
- # 删除单个空目录
- rmdir 目录名
- # 递归删除空目录及其空的父目录
- rmdir -p 目录路径
复制代码
特点:rmdir 只删除空目录,因此在操作时更安全,但功能有限。
举例:
- # 删除空⽬录
- [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
复制代码
6.2 rm 指令(删除文件和非空目录)
rm 是一个功能强大的命令,用于删除文件或目录。它支持删除非空目录以及文件夹中的所有内容
常用选项:
• -f 即使文件属性为只读(即写保护),亦直接删除
• -i 删除前逐⼀询问确认
• -r 删除目录及其下所有文件(r是单词recursion的缩写,意思是递归)
常见用法:
- # 删除单个文件
- rm 文件名
- # 删除空目录
- rm -d 目录名
- # 删除非空目录及其所有内容
- rm -r 目录名
- # 强制删除(跳过确认提示)
- rm -rf 目录名
复制代码
注意:rm 删除操作不可恢复,尤其是使用 -rf 参数时,需格外小心。
举例:
- # 删除普通⽂件
- [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]$ 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
复制代码
6.3 rmdir与rm的区别总结和使用建议
区别总结:
-
功能范围:rm 可删除文件和非空目录,而 rmdir 仅能删除空目录。
-
安全性:rmdir 更安全,因为它不会误删非空目录;rm 功能强大但需谨慎使用。
-
参数支持:rm 提供丰富的参数(如 -r、-f 等),适合复杂场景;rmdir 参数较少,适合简单操作。
使用建议:
-
删除文件或非空目录时,使用 rm,但需确认操作无误。
-
删除空目录时,优先使用 rmdir,以避免误删重要内容。
7. man 指令(相当于说明书,查看指令怎么用)
Linux的命令有很多参数,我们不可能全记住,可以通过查看联机手册获取帮助
语法: man [选项] 命令(按Q键取消查看,回到原界面)
常用选项:
• -k 根据关键字搜索联机帮助
• num 只在第num章节查找
• -a 将所有章节的都显示出来,比如 man printf 它缺省从第⼀章开始搜索,知道就停止,用a选项,当按下q退出,他会继续往后面搜索,直到所有章节都搜索完毕
解释⼀下:man手册分为9章(不同系统可能会有差别)
• 第1章是普通的命令
• 第2章是系统调用,如open,write之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么头文件)
• 第3章是库函数,如printf,fread4是特殊文件,也就是/dev下的各种设备文件
举例:
- [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⼿册⾃⼰
复制代码
8. 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
复制代码
9. mv 指令(作用相当于剪切拷贝)
mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files,经常用来备份文件或者目录。
语法: mv [选项] 源文件或目录 目标文件或目录
功能:
- 视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至⼀个新的目录中。
- 当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有⼀个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。
- 当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,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
复制代码
10. 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
- ...
复制代码
11. more 指令(查看大文件内容)
语法: more [选项]
功能:more命令,功能类似 cat,按ENTER键往下翻
常用选项:
• -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%)
复制代码
12. 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
- ...
- # 其他选项也可以直接测试
复制代码
13. head 指令(查看文件开头前n行的内容)
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
复制代码
14. tail 指令(查看文件结尾后n行的内容)
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
复制代码
15. date 指令(按指定格式显示时间)
指定格式显示时间: date +%Y:%m:%d
用法: date [OPTION]… [+FORMAT]
举例:
- # 显⽰常规时间
- [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
复制代码
16. cal 指令(查看日历等时间信息)
cal命令可以用来显示公历(阳历)日历。公历是现在国际通用的历法,又称格列历,通称阳历。“阳历”又名“太阳历”,系以地球绕行太阳⼀周为⼀年,为西方各国所通用,故又名“西历”。
命令格式: cal 参数 [年份]
功能:用于查看日历等时间信息,如只有⼀个参数,则表示年份(1-9999),如有两个参数,则表示月份和年份
常用选项:
• -3 显示系统前⼀个月,当前月,下⼀个月的月历
• -j 显示在当年中的第几天(⼀年日期按天算,从1月1号算起,默认显示当前月在⼀年中的天数)
• -y 显示当前年份的日历
举例:
- # 常规样例
- [whb@bite-alicloud test]$ cal
- January 2023
- 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
复制代码
17. 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
- ...
复制代码
18. which 指令(搜索系统指定命令的位置)
功能:搜索系统指定命令的位置
举例:
- [whb@bite-alicloud test]$ which ls
- alias ls='ls --color=auto'
- /usr/bin/ls
- [whb@bite-alicloud test]$ which pwd
- /usr/bin/pwd
复制代码
19. 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
复制代码
20.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
复制代码
21.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
复制代码
22. top 指令(实时系统资源监控工具)
top 是 Linux 实时系统资源监控工具,动态刷新,主要查看:
- 整机负载:CPU、内存、交换分区、运行进程数
- 每个进程:CPU 占用、内存占用、PID、用户、运行时长、命令
- 支持交互式排序、筛选、杀死进程、切换显示维度
CentOS7 默认预装,直接输入 top 即可运行。
举例:
- top -d 1 -n 5
- -d: 刷新的时间间隔
- -n: 刷新的次数
- q:退出
复制代码
23. zip / unzip 指令(将目录或文件压缩成zip格式)
语法: zip 压缩文件.zip 目录或文件
功能:将目录或文件压缩成zip格式
常用选项
• -r:递归处理,将指定目录下的所有文件和子目录⼀并处理
(1)在线 yum 安装(最常用)
CentOS7 默认 yum 源自带,直接执行:
(2)验证是否安装成功
(3)常用使用示例
压缩(zip):
- # 压缩单个文件
- zip test.zip test.txt
- # 压缩目录 -r 递归
- zip -r dir.zip /data/testdir
- # 压缩并排除指定文件
- zip -r pack.zip dir -x "*.log"
复制代码
解压(unzip):
- # 解压到当前目录
- unzip test.zip
- # 解压到指定文件夹
- unzip test.zip -d /tmp/extract
- # 只查看压缩包内文件,不解压
- unzip -l test.zip
复制代码
24. 关于rzsz(rz: 本地文件上传到linux服务器, sz: linux服务器文件下载到本地电脑)
这个工具用于 windows 机器和远端的 Linux 机器通过 XShell 传输文件. 安装完毕之后可以通过拖拽的方式将文件上传过去.
(1)在线安装
(2)本地文件上传到linux服务器
(3)linux服务器文件下载到本地电脑
25. tar 指令(打包多个文件 / 文件夹为单个包,搭配参数可压缩)
(1)核心作用
打包多个文件 / 文件夹为单个包,搭配参数可压缩;能完整保存 Linux 文件权限、目录结构。
(2)必记 5 个主参数
c:创建压缩包
x:解压包
t:查看包内文件
z:gzip 压缩(后缀.tar.gz,最常用)
f:指定包名,永远放最后
(3)高频命令模板
- 打包压缩
- tar -zcvf 包名.tar.gz 待压缩文件 / 文件夹
- 解压
- tar -zxvf 包名.tar.gz
- 解压到指定目录
- tar -zxvf 包名.tar.gz -C / 目标路径
- 只看内容不解压
- tar -ztvf 包名.tar.gz
复制代码
(4)新手要点
f 后面紧跟压缩包名称,参数顺序不能乱;
tar 自动递归文件夹,不用加 - r;
不加 - z 只打包不压缩,文件体积不变。
(5)tar与zip,unzip的核心区别
一.本质区别
tar:单纯打包工具,配合 -z 才压缩,生成 tar.gz,保留 Linux 权限、软链接,Linux 服务器专用。
zip/unzip:打包压缩一体,生成 zip,Windows/Linux 通用,丢失 Linux 权限。
二.命令简写
tar 压缩目录(不用 - r)
zip 压缩目录(必须加 - r)
三.怎么选
服务器备份、linux 之间传文件 → tar.gz
发给 Windows 电脑、网页下载 → zip
26. bc 指令(计算器)
bc命令可以很方便的进行浮点运算
27. uname 指令(用来获取电脑和操作系统的相关信息)
语法:uname [选项]
功能: uname用来获取电脑和操作系统的相关信息。
补充说明:uname可显示linux主机所用的操作系统的版本、硬件的名称等基本信息。
常用选项:
• -a或‒all 详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称
• lsb_release -a:查看操作系统版本
28. 重要的几个热键[Tab], [ctrl] -c
• [Tab]按键 — 具有命令补全和档案补齐的功能
• [Ctrl]-c按键 — 让当前的程序停掉()
29. 关机(新手: 云服务器禁止关机!!! 指令了解即可)
语法:shutdown [选项]
常见选项:
• -h:将系统的服务停掉后,立即关机。
• -r:在将系统的服务停掉之后就重新启动
• -t sec:-t 后面加秒数,亦即过几秒后关机的意思
30. echo指令(向文件存入数据内容)
(1)功能
输出文本、打印变量、写入文件。
(2)常用用法
打印文字
打印变量
覆盖写入文件
追加内容到文件
输出换行/特殊字符(-e)
(3)小要点
四. 以下命令作为拓展
• 安装和登录命令: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命令以及运行原理
(1)什么是Shell
Shell是系统外壳程序,介于用户和Linux内核之间,负责翻译你输入的命令,交给内核执行。
CentOS7默认shell:bash。
(2)命令分类
- 内置命令:shell自带(echo、cd、pwd),直接运行,速度快
- 外部命令:独立程序(ls、tar、top),磁盘有对应可执行文件
(3)运行原理极简流程
- 你输入命令回车 → shell读取字符串
- 拆分命令、查找程序:
- 先判断是不是内置命令,是则直接执行
- 外部命令去PATH环境变量路径找对应程序
- 创建子进程执行外部命令
- 内核调用硬件资源完成操作
- 执行结果返回shell,打印到屏幕
(4)两种运行方式
- 交互式:终端手动输命令,输一条跑一条
- 脚本式:把多条命令写进.sh文件,批量执行
(5)帮助理解
如果说你是⼀个闷骚且害羞的程序员(类比是用户),那shell就像媒婆,操作系统内核就是你们村头漂亮的且有让你心动的姑娘小花。你看上了小花,但是有不好意思直接表白,那就让你家人找媒婆帮你提亲,所有的事情你都直接跟媒婆沟通,由媒婆转达你的意思给小花,而我们找到媒婆姓王,所以我们叫它王婆,它对应我们常使的bash(bash是shell的一种)。
六. Linux权限的概念
Linux下有两种用户:超级用户(root)、普通用户。
• 超级用户:可以再linux系统下做任何事情,不受限制
• 普通用户:在linux下做有限的事情。
• 超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。
命令:su - 用户名
功能:切换用户。
例如,要从root用户切换到普通用户user,则使⽤ su - user。
要从普通用户user切换到root用户则使⽤用su root(root可以省略),此时系统会提示输入root用户的口令。
1.Linux权限管理
文件访问者的分类(人)
•文件和文件目录的所有者:u—User
• 文件和文件目录的所有者所在的组的用户:g—Group
• 其它用户:o—Others
文件类型和访问权限(事物属性)
• 文件类型:
◦ d:文件夹
◦ -:普通文件
◦ l:软链接(类似Windows的快捷⽅式)
◦ b:块设备文件(例如硬盘、光驱等)
◦ p:管道文件
◦ c:字符设备文件(例如屏幕等串口设备)
◦ s:套接口文件
2. 文件权限值的表示方法
(1)字符表示方法
• 基本权限:
◦ 读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该⽬录信息的权限
◦ 写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
◦ 执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
◦ “—”表示不具有该项权限
(2)8进制数值表示方法
三类用户:
文件权限分三段:所有者、所属组、其他人,每段3位权限。
权限对应数字:
- r 读 = 4( rwx=100, 二进制100转八进制为2^2*1 + 2 * 0 + 1 * 0=4,下面计算方法同理 )
- w 写 = 2( rwx=010 )
- x 执行 = 1( rwx=001 )
有权限就相加,无则0
计算规则:
每类用户权限数字求和,拼成三位数
例:rwx = 4+2+1=7;rw-=4+2=6;r–=4
常用示例:
- 755
所有者:rwx(7),所属组:r-x(5),其他人:r-x(5) - 644
所有者:rw-(6),所属组:r–(4),其他人:r–(4) - 777
全部用户可读可写可执行
5. 修改命令
- #所有者:rwx(7),有读写执行权限
- #所属组:r-x(5),有读执行权限
- #其他人:r-x(5),有读执行权限
- chmod 755 test.sh
复制代码
3. 文件访问权限的相关设置方法
3.1 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进制数字
实例:
- #u: rw-, g: rw-, o: r--
- chmod 664 /home/abc.txt
- #u: rw-, g: r--, o: ---
- chmod 640 /home/abc.txt
复制代码
3.2 chown(需要root用户的权限)
功能:修改文件的拥有者
格式:chown [参数] 用户名 文件名
实例:
- chown user1 f1
- chown -R user1 filegroup1
复制代码
3.3 chgrp(需要root用户的权限)
功能:修改文件或目录的所属组
格式:chgrp [参数] 用户组名 文件名
常用选项:-R 递归修改文件或目录的所属组
实例:
3.4 umask
功能:
• 查看或修改文件掩码(掩码是八进制)
• 新建文件夹默认权限=0666
• 新建目录默认权限=0777
• 但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask &~umask
格式:umask 权限值
说明:将现有的存取权限减去权限掩码后,即可产⽣建立文件时预设权限。超级用户root默认掩码值为0022,普通用户默认为0002。
实例:
- umask 755
- umask //查看
- umask 044//设置
复制代码
4. 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
复制代码
5. 目录的权限
分为三类:
• 可执行权限: 如果目录没有可执行权限, 则无法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
- logout
复制代码
为了解决这个不科学的问题, Linux引入了粘滞位的概念。
6. 关于权限的总结
• 目录的可执行权限(x)是表示你可否在目录下执行命令(cd)。
• 如果目录没有 -x 权限,则无法对目录执行任何命令,甚至无法 cd 进入目录, 即使目录仍然有 -r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件, 实际上 r:只看目录内文件名,不能 cd 进入)。
• 而如果目录具有 -x 权限,但没有 -r 权限,则用户可以执行命令,可以 cd 进入目录。但由于没有目录的读权限。所以在目录下,即使可以执行ls 命令,但仍然没有权限读出目录下的文档。
(1)面试常问
1.进入目录需要什么权限?
必须有执行(x)权限
x:进入、切换到该目录(cd)
r:只看目录内文件名,不能cd进入 (ls)
w:新建/删除目录内文件,和进入无关 (touch, rm)
2.新建文件默认权限由什么决定?
由 umask(权限掩码控制)
- 文件原始最大权限:666
- 目录原始最大权限:777
- 最终权限 = 原始权限 - umask屏蔽的权限
例:CentOS7默认umask=002,
文件:666-002=664;目录:777-002=775,
注意:这是一种便捷上的记法,底层实际上是最终权限=原始权限 & (~umask)
(按位与&将在下文 - 七.知识点补充详细介绍,~是按位取反)
3.文件本身无rwx,能删除它吗?
能
删除文件不看文件自身权限,看文件所在父目录的w+x权限;
只要父目录有写+执行权限,就能删除里面的文件。
7.粘滞位 选学
- [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的文件类型
Linux的文件类型,不由文件后缀名决定,但建议使用文件后缀名,这样开发人员读代码更清晰易懂。注意:Linux中的一些工具,如gcc等要执行指令时,需要加上文件后缀名,而且执行结果受文件后缀名影响。
2. Linux系统下一切皆“文件”
3. Ctrl+R查找历史指令
在执行命令时,对于已经输入的历史命令,可以通过上下键(PGUP, PGDN)进行翻找,如果是最近几条,很容易找到 。如果是很久之前的命令,依旧使用上下键查找就会力不从心, 解决方法是使用" Ctrl+R " 快捷键,在命令行使用Ctrl+R,Ctrl+R是反向搜索 。
4.按位与 &
(1)规则
二进制每一位单独运算:只有两位全1,结果才是1,其余都是0
- 1 & 1 = 1
- 1 & 0 = 0
- 0 & 1 = 0
- 0 & 0 = 0
(2)计算示例:5 & 3
-
转二进制
5 → 101
3 → 011(补齐相同位数)
-
逐位相与
- 1 0 1
- & 0 1 1
- --------
- 0 0 1
复制代码
- 结果二进制001 = 1,即 5 & 3 = 1
(3)常用作用
- 清零特定位:和0相与直接变0
- 判断奇偶:数字 & 1,结果是1:该数字是奇数,结果是0:该数字是偶数
例:6(110) & 1(001) = 0(000) → 偶数 - 取末尾几位:和对应全1二进制数按位与
八. 给读者的话
写博客于我而言,不仅是记录那些细碎的技术心得,更是把杂乱的思绪梳理成清晰脉络、把转瞬即逝的灵感沉淀为扎实成长的过程。在此立一个小小的flag,我将持续更新Linux学习笔记,乃至C++ 和 java的全栈笔记、项目、学习心得,期望与大家共同成长进步!
未来这里会有热腾腾的学习感悟、刻骨铭心的踩坑故事,还有那些天马行空的技术探索。初来乍到,我文笔或许稚嫩粗糙,内容难免疏漏浅薄,但每一个字都是真诚滚烫的。我诚挚地欢迎各位大神批评指正,您的每一条评论、每一个建议,我都会认真研读、逐条回复并及时修正。我相信,好的博客是"写"出来的,更是"改"出来的。我也期待能给同样奋斗在路上的你,带去一点点温暖的启发。若您觉得有丁点收获,恳请留下一个珍贵的赞或一句暖心的话——那将是我持续更新最澎湃的动力!路虽远,行则将至,感谢您的阅读,咱们一起进步!