内容目录
前言
本篇文章是笔者基于MacOS系统学习Linux基础时撰写,原笔记在Notion上创作,复制到本地后进行了调整、美化,添加了大纲,并在命令速查表中添加了超链接,点击部分小标题可以跳转到相应的位置。受限于系统,关于Ubuntu、虚拟机的装配和Windows系统支持相关的内容均未涉及,如有需求还请劳烦ChatGPT。 为了保证阅读体验、起到更好的复习作用,内容相对比较详实,可以通过目录快速查看将要学习的内容,那么接下来,进入正题。
0 Linux发展历程
Unix — Ken Thompson & Dennis M.Ritchie 来自贝尔实验室,为了在实验室的电脑上玩游戏而开发(原本电脑系统并不能运行),Ken以汇编语言写出原型,基于BCPL语言,Ken设计出B语言,写出第一个UNIX操作系统。随着Dannis加入,他改造了B语言,优化其跨平台性,设计出C语言(BCPL的第二个字母,具有强大的移植性),最终Unix通过C语言开发完成 (1973)。
Minux — Andrew S. Tanenbaum 后来Unix源代码私有化,出于教学目的,Andrew开发了为学生演示操作系统运作细节的新系统Minix。
Linux — Linus Benedict Torvalds 年仅21岁的Linus对Unix颇感兴趣,基于Minux开发了一套磁盘驱动和文件系统,为了便于从学校主机下载和读写文件,后来成为Linux系统的内核 (1991)。
0* 常用命令速查表
命令 | 对应英文 | 功能 |
---|---|---|
基础操作 | ||
ls | list | 列出当前目录下内容 |
pwd | print work directory | 查看当前目录 |
创建、删除 | ||
cd [目录名] | change directory | 切换目录 |
touch [文件名] | touch | 如果文件不存在,新建一个 |
mkdir [目录名] | make directory | 创建目录 |
rm | remove | 删除指定文件 |
拷贝、移动 | ||
tree | 以树状图列出目录结构 | |
cp | copy | 复制文件或目录 |
mv | move | 移动文件或目录;目录重命名 |
查看内容 | ||
cat | concatenate | 查看内容、创建文件、文件合并、追加内容等 |
more | 分屏显示内容 | |
grep | 搜索文本文件内容 | |
其他 | ||
echo | 在终端显示参数指定的文字 | |
重定向> 和>> | 将结果输出/追加到文件 | |
管道 | | ||
clear | clear | 终端清屏 |
远程控制 | ||
shutdown | 控制电脑关闭 | |
ifconfig | configure a network interface | 查看、配置当前网卡配置信息 |
ping | 检测目标的ip地址链接是否正常 | |
ssh | secure shell | 关机、重启 |
scp | secure copy | 复制文件 |
ssh-keygen | key generate | 生成KEY文件 |
ssh-copy-id | copy the public id | 将公钥拷贝至远程设备,实现免密码 |
权限相关 | ||
chmod | change mod | 修改权限 |
chgrp | change group | 修改组信息 |
chown | change owner | 修改拥有者 |
sudo | substitute user do | 以root身份执行 |
组管理 | ||
groupadd | 添加组 | |
groupdel | 删除组 | |
cat /etc/group | 确认组信息 | |
用户管理 | ||
useradd -m -g | 新建用户 | |
passwd | password | 设置密码 |
userdel -r | 删除用户 | |
cat /etc/passwd | grep | |
id [username] | 查看用户UID,GID | |
who | 查看当前所欲登录的用户列表 | |
whoami | 查看当前登录用户的账户名 | |
usermod | 用于指定用户的主组、附加组、登录使用的Shell | |
用户切换 | ||
su | substitute | 切换用户 |
系统信息 | ||
date | 查看系统时间 | |
cal | calendar | 查看日历 |
df -h | disk free | 显示磁盘剩余空间 |
du -h | disk usage | 显示目录下文件大小 |
ps aux | process status | 查看进程状态 |
top | 动态显示当前的进程情况,自动排序 | |
kill | ||
其他常用命令 | ||
find | 查找文件 | |
ln | link | 创建软链接 |
tar | 文件压缩、解压缩 | |
apt | advanced packaging tool | 安装、卸载组件 |
1 终端命令格式
终端就是Linux系统的“命令行”,是系统给出的解释器,通过输入各种命令可以实现计算机上任何图形界面能实现的功能。 命令 具有固定的格式:
command [-options] [parameter]
中括号代表该部分可选,每一部分之间需要用空格分隔开;
command
命令名,相应功能的英文单词或单词缩写;options
选项,可以对命令控制;parameter
传给命令的参数;
-
对任何终端命令,都可以用
cmd --help
和man cmd
对命令详细使用方法进行查询。
2 终端技巧
可以打开终端设置,对窗口大小、文字大小、终端主题等进行自定义设计,网上有详细设置教程,此处便不多赘述。 终端使用也有些小技巧,如下给出:
-
自动补全
通过 Tab键 补全:对文件、目录、命令均可补全。 使用方法:输入前几个字母,单击Tab键将给出候选结果,包括当前目录下含有关键字的对象。若只有一个对象,单击Tab时就能补全。
-
常用命令
↑
,↓
可以在使用过的命令间选择(有些shell不可用)。 -
通配符(又称正则表达式,用于模糊搜索,在所有文件的表示当中均可使用)
字符 含义 * 代表任意个字符 ? 代表一个字符 [], [abc] 匹配一个字符组,给出某一个字符的可能取值,筛选出满足这些取值的结果 [a-f] 表示a-f都为可能取值
3 基础指令
本节介绍终端使用的基础指令,包括查看指令、文件与目录管理与操作指令等,这些指令大都使用频率较高,熟练使用将帮助你实现许多目标。
3.1 两个常用指令
3.1.1 ls
使用方法:ls
Linux中文件或目录名称最长为256个字符,隐藏文件以.
开头。 特殊符号:~
代表当前用户目录;.
代表当前目录;..
代表上层目录。
-a
显示所有指定目录下的子目录、文件,包括隐藏文件-l
列表显示目录下的文件详细信息-h
配合-l
,以人性化方式显示文件大小(用K,M,G表示较大数字)
-
选项的 合并写法 :命令写成
ls -l -h
和ls -lh
效果是相同的 -
pwd
命令用于打印当前目录
3.1.2 cd
使用方法:cd directory_path
所有名称和目录都 大小写敏感 ,需要注意!
命令 | 含义 |
---|---|
cd ,cd ~ | 回到当前用户主目录 |
cd . | 保持当前目录不变 |
cd .. | 回到上级目录 |
cd - | 在最近两次工作目录之间切换 |
3.1.3 两类路径的辨析
绝对路径:从/
或~
开始,文件在系统中的完整路径。 相对路径:并非从/
或~
开始,代表文件相对当前所在的路径。
3.2 目录、文件的创建与删除
3.2.1 touch
使用方式:touch file
如果文件不存在,创建一个文件;如果文件存在,修改文件的末次修改日期。
3.2.2 mkdir
使用方式:mkdir directory
-p
递归创建嵌套目录:mkdir -p a/b/c/d
-
不可创建和文件同名的目录!
3.2.3 rm
使用方式:rm file
文件将直接从磁盘上删除,无法恢复 ,使用需谨慎。
-r
递归删除目录、子目录与其中的文件-f
强制删除文件,忽略任何提示
3.3 拷贝、移动文件
3.3.1 tree
使用方式:tree [path]
可以查看指定目录下的所有目录、文件的树状图。
-d
仅显示目录,隐藏文件
3.3.2 cp
使用方法:cp origen_file/directory target_file/directory
注:为方便阅读,后续将使用f/d
代替file/directory
-i
:当文件已存在时给出覆盖提示,提升安全性-r
:递归复制目录及目录下的所有子目录和文件,要求源路径必须是一个目录
3.3.3 mv
使用方法:mv target_f/d target path
可以更改文件或目录位置,由于本质上是修改指针,无需递归修改目录下子目录的指针,因此不需要-r
命令。
-i
当文件已存在时给出覆盖提示,提升安全性
源文件与目标文件的位置相同,名称不同时即为 重命名
3.4 查看文件内容
3.4.1 cat
使用方法:cat file
用于查看内容、创建文件、文件合并、追加内容等多个功能,将 一次性显示 所有文本内容。
-b
对非空输出行进行编号-n
对每一行进行编号
在 终端内 比较有用!
3.4.2 more
使用方法:more file
用于分屏显示文件内容,每次显示一页,浏览可操控:
␣ 、↩︎:翻页;滚动一行 b、f、q:上一屏;下一屏;退出
3.4.3 cat
、more
对比
前者直接打印出文本全部内容;后者给出部分内容,可进一步分段查看。
3.4.4 grep
使用方法:grep + 关键词 + [目标文件]
实现文本搜索,允许进行 模式查找(正则表达式):
-n
显示行号-v
显示不含关键词的行(取反搜索)-i
忽略大小写进行查找
常用的模式查找:
行首模式
^a
:搜索以 a 开头的行 行尾模式ke$
:搜索以 ke 结尾的行
3.5 其他
3.5.1 echo
,>, >>
使用方法:echo cmd > file
echo
能够显示命令传入的参数;重定向将echo
命令执行的结果输出(>
)或追加(>>
)到指定文件当中。
换一种说法,输出是覆盖操作,追加是续写操作
值得一提的是,当使用echo对内容重定向到某一对象时,若该对象不存在将自动创建该对象,这意味着echo与重定向能在创建文件时写入文件内容。
3.5.2 |
— 管道
使用方法:cmd | cmd
允许将一个命令的输出作为另一个命令的输入,左端塞东西,右端读东西:
ls -lha | more
:执行结果分屏显示ls -lha | grep Do
:执行结果筛选显示
4 远程控制
Linux应用最广泛的是服务器,这意味着你将从个人(或是公司的)电脑连接到不知道在哪里的机房。前面学到的指令如果在本地设备,直接在图形界面上进行操作就可以了,用抽象的指令反而更加繁琐。但来到了服务器操控,窗口内的代码操作就显示出它的威力来。
4.1 shutdown
使用方法:shundown
控制远程设备安全关闭、重新启动。
-c
取消关机计划,输入关机命令的一分钟内有效-r
重新启动
一般情况下都要使用 -r
选项,远程关闭设备不自启动的话会带来诸多麻烦。
支持更多参数:
# now表示现在关机 $ shutdown now # 可以指定关闭时间(今天) $ shutdown 19:20 # 可以计时关机 $ shutdown +15 # 取消关机计划 $ shutdown -c
4.2 网卡、IP地址
网卡为计算机提供网络通信能力,IP地址是每台联网电脑的 身份证。
127.0.0.1
称为本地回环/环回地址,用于测试本机网卡工作状态。
4.2.1 ifconfig
使用方法:ifconfig
可以查询电脑中网卡配置信息,一般是一个实体网卡+多个虚拟网卡,返回信息一般多且乱。
ifconfig | grep inet
可以快速查看到网卡对应的IP地址
4.2.2 ping
使用方法:ping IP_address
连接到其他设备,发送数据包进行通信,用于检测本机与远程连接的设备之间网络是否通畅,显示延迟时间、丢包率等信息。
ping 127.0.0.1
检测本地网卡是否工作正常
4.3 远程登录、文件复制
4.3.1 SSH介绍
SSH(Secure SHell)是一种协议,加密、压缩传输数据,有效防止远程管理过程中的信息泄露,安全性高,速度快。 ssh客户端使用ssh协议,需要在主机、远程设备安装SSH客户端,是常用的服务器管理软件。
域名:IP地址的别名,也就是常说的 网址 ,是一串用.
分隔的名字,方便记忆。 端口号:访问服务器特定功能的标识号,IP地址决定设备,端口号决定设备上具体的应用程序。
4.3.2 SSH使用
登录方法:ssh [-p port] user@remote
user
是远程服务器上的用户名,默认是当前用户remote
是远程服务器地址port
是SSH Server的端口,默认值为22
exit
断开连接
登录到其他设备,通过指令对远程连接的设备进行管理。 第一次连接时将 获取授权信息 ,创建一个文本文件记录对本机已知的设备。
-
只能在Linux、Mac下使用,Windows需要第三方客户端代理(PuTTY,XShell)。
4.3.3 scp
使用方法:scp -P port 01.py user@remote:Desktop/01.py
基于SSH的文件远程拷贝,实现两台设备间的文件通信 使用格式与ssh差不多,但端口选项 -P
是大写;注意拷贝目录是以远程对象的user为参考的相对路径,并且要写冒号。
-r
递归复制目录-P
指定端口
4.3.4 免密码登录
配置公钥流程:
-
ssh-keygen
创建密钥文件 -
ssh-copy-id -p port user@remote
将公钥文件传输到服务器
在此解释服务器加密原理:本地使用私钥加密、解密数据;服务器使用公钥加密、解密数据,即采用非对称加密算法:公钥加密的数据需要私钥解密,私钥加密的数据需要公钥解密。当服务器存有本地公钥文件,进行命令操作时服务器将调取秘钥直接授权,就不再需要手动输入了。
4.3.5 配置别名
可以用一个别名替代user@remote,使用时更加简便
# 在~/.ssh/config文件追加(echo >>)如下内容: Host mac Hostname remote User username Port 22
5 用户与权限
5.1 用户与权限简介
每个系统中 至少拥有一个账号 ,不同的账号对于不同系统资源的使用权限不同。管理每个用户的权限较为繁琐,可以定义不同的 组 ,组和用户一样可以被赋予、剥夺对系统资源的使用权限。配置好不同级别的组的权限后,将用户放入不同的组中就可以直接授予用户不同级别的权限。
在Linux中可以指定每一个用户对文件或目录的权限:
权限 | 缩写 | 数字代号 |
---|---|---|
read | r | 4 |
write | w | 2 |
execute | x | 1 |
5.1.1 详解ls -l
使用这个命令将显示一系列信息,现在可以解释这些信息的具体含义了:
-rw-r--r--@ 1 tj. staff 873653 6 29 16:31 急诊单.docx -rw-r--r--@ 1 tj. staff 28941 6 26 11:17 自变量正确.png drwxr-xr-x@ 20 tj. staff 640 6 25 01:46 未命名文件夹 -rw-r-----@ 1 tj. staff 29184 12 6 2022 最新软件下载.xls
@前面依次是文件类型标识符+用户权限+组权限+访客权限; 后面依次是硬链接数,用户名,组,对象大小,创建时间,名称
5.1.2 chmod
使用方法:chmod +/- [rwx] 文件名/目录名
最常用的修改文件权限命令
目录的可执行权限为操作、查看目录的权限
5.2 用户、组的管理
由于不同的用户有不同权限,当需要以很高权限执行命令时,系统支持 sudo
命令(Super User DO)作为命令语句起始,代表以root用户身份执行,放在Windows系统中相当于Admin了。需要注意,用户需要在sudo附加组中才可以使用本命令,附加组的概念后续将会提到。
另外,每次使用sudo都需要输入密码,输入后有五分钟的有效期限。
5.2.1 组的管理
组的创建方法:sudo groupadd group_name
groupadd
新建组groupdel
删除组
用命令 cat /etc/group
查看组信息,配合grep
过滤显示想找的目标信息
修改组 的命令使用方法如下: chgrp -R 组名 文件名/目录名
修改目录或文件的组
5.2.2 用户的管理
使用方法:useradd -m -g 组 新建用户名
-m
将自动建立用户家目录,一般必选!-g
指定用户所在的组,否则建立一个同名的组
如下指令可以对用户进行其他管理:
passwd
创建、修改用户对应的密码userdel -r
删除用户,选项-r
自动删除对应家目录
用命令 cat /etc/passwd
查看用户是否被添加
5.2.3 查看用户信息
id [username]
查看用户UID,GID 命令 cat /etc/passwd
可以查看设备上所有用户的具体信息。
passwd文件以如下格式记录用户信息: username;password(x);UID;GID;fullname/locao account;/home/username;shell
who
查看当前所有登录的用户列表whoami
查看当前登录用户的账户名称
5.2.4 主组与附加组
主组在新建用户时指定,是/etc/passwd里GID对应的组 附加组在/etc/group的最后一列表示,指定用户的附加权限
用户的主组、附加组与登录默认shell用命令usermod
设置。 使用方法如下:
主组:
usermod -g group username
附加组:usermod -G group username
设置默认Shell:usermod -s /bin/bash username
5.2.5 文件权限修改·II
除了之前提到的chgrp,chmod,还有一个命令chown。
使用方法:chown username f/d
用于修改文件、目录的拥有者。
对chmod命令进行扩展,更加常见的用法如下: chmod -R xxx 文件名/目录名
三个x分别是拥有者、组、其他用户的权限
按r, w, x=4, 2, 1分别计算权限 数值总和 ,填入对应位置进行设置,例如:
# 这几个例子均为常用权限设置 777 → u=g=o=rwx 755 → u=rwx g=o=rx 644 → u=rw g=o=r
5.3 其他内容
5.3.1 which
which
用于查看某一执行命令的所在位置,比如学过的ls
、mkdir
等,输出可执行命令文件位置。
-
cd
这个终端命令是内置在系统内核中的,没有独立的文件,因此用which
无法找到cd
命令的位置
5.3.2 bin与sbin
在 Linux
中,绝大多数可执行文件都保存在 /bin
、 /sbin
、 /usr/bin
、 /usr/sbin
中。
/bin
(binary
)是二进制执行文件目录,主要用于具体应用/sbin
(system binary
)是系统管理员专用的二进制代码存放目录,主要用于系统管理
/usr/bin
(user commands for applications
)后期安装的一些软件/usr/sbin
(super user commands for applications
)超级用户的一些管理程序
5.3.3 切换用户
使用方法:su [-] username
从当前用户切换到另一个用户,使用exit
命令回到切换前的用户下。 如果不加username将切换到root用户下,但容易误操作,不太安全。
-
在切换用户时cd到用户家目录
6 系统信息
6.1 时间
6.1.1 date
查看当前系统时间
6.1.2 cal
查看当前月的日历
-y
查看近一年的日历
6.2 磁盘
6.2.1 df -h
查看磁盘剩余空间
6.2.2 du -h [directory]
显示目录下文件大小
6.3 进程
6.3.1 ps
不加选项时只能看到当前用户正在运行的进程,只显示没有控制终端的进程;但全部显示又会生成非常繁杂的信息,所以使用这个命令时需要按需求选用选项,也可以配合grep筛选得到的结果。
a
显示终端上所有进程,包括其他用户u
显示进程详细状态x
显示非终端控制的进程
-
这个命令的选项不需要
-
!!
6.3.2 top
动态显示当前系统进程,自动排序,可以一目了然占用较高的内存
q
直接退出进程监视
6.3.3 kill
使用方法:kill PID
需要知道进程的PID,用来结束进程
-9
强行终止无法kill的进程
-
使用时要谨慎!!
7 其他常用
列举了几个常用但不属于如上内容分类的代码,
7.1 find
使用方法:find [path] -name "keyword"
查找符合条件的文件,默认路径为当前目录
-
可使用通配符进行高级检索!
7.2 ln
使用方法:ln -s origin_path linked_file
-s
创建软链接,类似于windows系统下的快捷方式。 如果没有-s
选项将创建一个硬链接文件,二者占用相同大小的硬盘空间,实际使用极少。
创建时使用的路径是绝对路径! 如果创建时使用相对路径,创建的链接文件移动位置后将失效:文件定向出现问题。
-
硬链接数与软连接数辨析
linux的文件名与文件数据分开存储,类似指针,文件名指向数据
硬链接直接创建指向文件数据的文件名;软链接创建一个新文件,数据指向链接源文件。
linux中文件的硬链接数==0时才会被删除。
7.3 tar
常用的打包工具,能将一系列文件打包到一个大文件中,同样支持逆过程,本身没有压缩功能。如果想要实现压缩,需要调用gzip或者bzip2组件,只需使用对应的选项即可。
需要文件后缀.tar:tar -cvf 123.tar
-c
生成档案文件,创建打包文件-x
解开档案文件-v
列出归档接档详细过程与进度-f
指定文件名称,需要放在选项的最后-C
支持解压缩到指定目录,目录必须存在
gzip
在tar
命令中增加-z
选项直接调用gzip 文件后缀.gz:tar -zcvf 123.tar.gz
bzip2
用法与gzip相同,扩展名为.bz2,调用选项-j
7.4 apt
Linux下常用的一款安装包管理工具,支持在终端中方便地安装、卸载、更新软件包,从软件源获取资源进行下载,软件源可以进行配置。
命令有install remove upgrade
,需要使用sudo
想说的话
这是学习CS以及Markdown写下的第一篇完整的学习笔记,算是记录了一个开始,文章尽可能做到了写下的内容都是正确的,如有谬误敬请指正。后面如果学习接触到可以补充的地方我也会订正、增加内容。接下来再接再厉!
--2023.7.7