Linux命令行基础

Linux命令行基础

1 Linux简介

Linux是一个操作系统的内核。一提操作系统,可能很多人脑子里第一时间想到的是Windows。实际上大家熟悉的Windows、还有苹果Mac都是操作系统。如果这么说您还不明白,那么联想一下苹果手机和安卓的区别,实际上也是操作系统有区别。
操作系统包括内核和调用,Linux本身只是操作系统的内核,也是其他程序能够运行的基础。
那么我们为什么要花费时间成本去学习使用Linux呢?

  1. Linux更加安全
  2. 方便的命令行操作,您可以使用键盘完成一切操作。
  3. 极佳的可定制性,您甚至可以制作您自己的发行版(发行版是用来进行系统调用的)。
  4. 可以占用很少的资源,让您的老旧电子设备重焕生机。
  5. 应用广泛,从服务器到渗透无所不能。

2 Shell\Terminal\Console

2.1 Shell:

一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,也是一种程序设计语言。

2.2 Terminal:

用来显示主机运算的输出,并且接受主机要求的输入。实际上显示器以及键盘就是终端。Linux里的终端并非真正的终端(鼠标键盘显示器),而是终端模拟器。

2.3 Console:

显示系统消息的终端就叫控制台。

3 Linux快捷键\通配符

3.1 快捷键

快捷键作用
Crt+d键盘输入结束、退出终端
Crt+s暂停当前程序、按任意键继续
Crt+z当前程序后台运行,恢复为命令fg
Crt+a光标移至行头(Home)
Crt+e光标移至行末(End)
Crt+k删除从光标位置到行末的文本
Alt+Backspace向前删除一个单词
方向键↑历史输入命令

3.2 通配符

通配符含义
*匹配0或多个字符
?匹配任意一字符
[list]匹配list中的任意单一字符
[^list]匹配list之外的任意单一字符
{string1,string,…}匹配其一字符串
{c1…c2}排位c1-c2中全部字符 如{1…10}

您可以使用通配符一次性创建多个文件

touch file_{1..10}.txt

4 Linux账号管理

4.1 who命令:

whoami:查看当前用户名
who am i:查看当前伪终端用户名
who命令其他参数:

参数说明
-a打印全部
-d打印死进程
-m同am i、mom likes
-q打印当前登录用户数及用户名
-u打印当前用户登录信息
-r打印运行等级

4.2 切换用户:su <user>

需要输入密码(您无法看见您输入的密码,鄙人第一次还以为无法输入了)

4.3 sudo <cmd>:

使用前提是当前用户属于sudo组,可以以特权级别运行cmd命令

sudo adduser xiaoming

4.4 查看当前用户组:

4.4.1 groups命令
4.4.2 查看/etc/group文件:

cat /etc/group | sort
cat:将文件打印到终端
etc/group 文件路径
| sort 将读取的文本进行一个字典排序后再输出。

4.5 将其它用户加入 sudo 用户组:sudo usermod -G sudo xiaoming

4.6 删除用户:sudo deluser lilei --remove-home

5 Linux文件权限:

5.1 查看文件权限

ls -lah 命令:列出文件详细信息

drwxr-xr-x 4 el-lazo el-lazo 4.0k 12月 9 20:17 .file

这些信息的意思
文件类型
文件类型含义
d目录
l软连接
b块设备
c字符设备
ssocket
p管道
-普通文件
文件权限

每个文件都有三组权限,分别是拥有者、拥有者所属用户组、其他用户。

文件权限含义
r允许读权限
w允许写权限
x允许执行权限

权限部分,权限还可用二进制转换为十进制进而更方便的表示(从三个字符变为一个数字)。
即二进制数110可表示为1×2^2+1×2^1+0×2^0=6

权限二进制对应的十进制
rwx
- - -0000
r - -1004
- w -0102
- - x0011
r w -1106
r - x1015
- w x0113
r w x1117
其他信息

连接数:连接到该文件所在的indoe节点的文件名数目
所有者\所属用户组:很好理解,就是这个文件是属于谁的。
文件大小:文件的大小(若不加 -h参数 则为以indoe节点为单位来表示的文件的大小)

5.2 变更文件拥有者

sudo chown xiaoming file1

5.3 变更文件权限

命令chmod:

方法一: chmod 600 file
方法二: chmod go-rw file

g:group(用户组)
o:other(其他用户)
u:user(用户)

6 Linux目录结构

Linux使用FHS(Filesystem Hierarchy Standard文件系统层次结构标准)
FHS定义了系统中每个区域的用途、所需要的最小构成的文件和目录,还给出了例外处理与矛盾处理。

FHS的两层规范
  1. / 下各目录所存放文件种类。
    如 /etc放置设置文件,/bin 与 /sbin 则放置可执行文件。
  2. /usr 及 /var 两个目录的子目录定义
    如 /var/log 放置系统日志文件,/usr/share 放置共享数据。
    您可以通过tree /命令来进一步了解。

7 Linux文件操作

7.1 touch命令

7.1.1 使用touch命令创建一个空文件

您只需在touch命令后加文件名即可

touch newhtmlfile.html
7.1.2 使用touch命令创建多个空文件

您可以通过空格或通配符一次创建多个空文件。

touch newhtmlfile1.html newhtmlfile2.html
          touch newhtmlfile1_{1..10}.html
7.1.3 使用touch查看版本信息
touch --version

7.2 新建目录

mkdir命令(make directories) 使用-p参数允许您创建多级目录。

7.3 复制文件/目录

cp命令(copy)

7.3.1 复制文件
cp newhtmlfile.html file/html
7.3.2 目录
cp -r folder1 folder2
# 复制目录需要加-r参数,表示递归复制

7.4 删除文件/目录

rm命令(remove files or directories)

7.4.1 删除文件
rm newhtmlfile.html
7.4.2 删除目录
rm -r folder1
# 同样需要添加加-r参数

7.5 移动文件

mv命令(move or rename files)

mv newhtmlfile.html folder1

7.6 重命名文件

mv htmlfile.html newhtmlfile.html

7.8 查看文件

7.8.1 cat、tac命令

打印文件内容输出至终端, cat 为正序显示,tac 为倒序显示。

7.8.2 nl命令:添加行号并打印
7.8.3 more/less命令:分页查看文件
7.8.3 head/tail命令:查看文件头/尾10行

7.9 查看文件类型

file命令:Linux不同于Windows,并不按后缀名来分类文件,而是根据文件内容来分类,也就是说即使您的文件后缀为.html,在Linux中也会显示为空文件。

8 文件搜索

8.1 whereis命令

迅速,直接从数据库中查询。

参数说明
-b二进制文件
-m帮助文件
-s源代码文件

8.2 locate命令

需手动下载,快速,可自动递归子目录

sudo apt-get update
sudo apt-get install locate
sudo updatedb
# 执行updatedb以更新其用于查询的/var/lib/mlocate/mlocate.db这个数据库

8.3 which命令

返回PATH环境变量指定的路径第一个搜索到的结果。

8.4find命令

sudo find /etc/ -name interfaces

9 Linux上常用的压缩/解压工具

9.1 常见的压缩格式

文件后缀名说明
.zipzip 程序打包压缩的文件
.rarrar 程序压缩的文件
.7z7zip 程序压缩的文件
.tartar 程序打包,未压缩的文件
.gzgzip 程序(GNU zip)压缩的文件
.xzxz 程序压缩的文件
.bz2bzip2 程序压缩的文件
.tar.gztar 打包,gzip 程序压缩的文件
.tar.xztar 打包,xz 程序压缩的文件
tar.bz2tar 打包,bzip2 程序压缩的文件
.tar.7ztar 打包,7z 程序压缩的文件

9.2 zip命令:以zip压缩文件

cd /home/uesr 
zip -r -1 -q -o packeg.zip /home/user/Desktop -x ~/*.zip 

-r 参数表示递归打包包含子目录的全部内容
-q 参数表示为安静模式,即不向屏幕输出信息
-o 输出文件
-9 压缩级别(0-9 数字越高压缩的越小)
-x排除上一次创建的zip文件,防止重复打包
-e(encryption)加密
请使用绝对路径

9.3 du命令:查看压缩包

du -h -d 0 *.zip ~ | sort

-h, --human-readable
-d, --max-depth(所查看文件的深度)

9.4 unzip命令:解压压缩包

unzip -q file.zip -d ziptest

-d 指定目录,不指定就会解压到当前目录
-l 不解压文件,仅查看。
-O 指定编码类型 如 -O GBK

9.5 tar命令

tar -P -cf file.tar /home/user/Desktop

-P 保留绝对路径符
-c 表示创建一个 tar 包文件
-v 参数以可视的的方式输出打包的文件。
-f 用于指定创建的文件名,文件名必须紧跟在 -f 参数之后

tar -fc file.tar --> tar -f file.tar -c

mkdir tardir
tar -xf file.tar -C tardir

-x 解包一个文件
-C 指定解包的路径

tar -tf file.tar

-t 只查看,不解压缩

10 Linux文件操作与磁盘管理

10.1 df命令:查看磁盘的容量

10.2 du命令:查看目录容量

10.3 dd命令:读入读出、创建虚拟镜像文件(之后再细学)

10.4 mkfs命令:格式化磁盘

du -h -d 1 ~ # 查看 2 级目录的信息

11 Linux获取命令帮助

11.1 help参数:外部命令后加 --help

11.2 man命令:得到非常详细的帮助文档

章节数(LS)说明
1Standard commands (标准命令)
2System calls (系统调用)
3Library functions (库函数)
4Special devices (设备说明)
5File formats (文件格式)
6Games and toys (游戏和娱乐)
7Miscellaneous (杂项)
8Administrative Commands (管理员命令)
9其他(Linux 特定的), 用来存放内核例行程序的文档。

按q退出当前页面

11.3 info命令:需要安装

# 安装 info
sudo apt-get update
sudo apt-get install info
# 查看 ls 命令的 info
info ls

12 Linux 任务计划 crontab

详细用法说明:Cron Job: A Comprehensive Guide for Beginners 2021

12.1 crontab简介

crontab是帮助您定时完成重复性工作的程序,存放于crontab文件内,可以使得系统在固定的时间执行系统指令或Shell脚本,比如每天早上六点自动完成健康打卡。
crontab依靠daemon(守护程序)运行,daemon就好比摇篮里的婴儿,摇篮一停(特定时间)婴儿就会醒(计划的操作发生)。

crontab有这些缺陷

最短检查间隔:一分钟,也就是说每一分钟检查一次,您无法使得这段程序没59秒或更短运行一次。
不能部署在多台电脑上
没有自动重试机制

12.2 准备工作

12.2.1 检查rsyslog是否开启(有的发行版是会默认自行启动,如Ubuntu)

如未启动,或未安装,则需要您手动安装开启。

sudo apt-get install -y rsyslog
sudo service rsyslog start
12.2.2 检查crontab是否启动

如未启动则需要您手动启动

sudo cron -f &

12.3 corntab使用

12.3.1 添加计划任务
crontab -e

如果您是第一次使用corntab的话,那么系统会询问你使用那种编辑器。

12.3.2 crontab语法
* * * * * commend to execute

第一个*:分钟:1-59
第二个*:小时:0-23
第三个*:日:1-31
第四个*:月:1-12
第五个*:周:0-6:周日到周六(老外那边周日是一周的第一天)

37 17 * * 5 root/backup.sh 
# 这条命令代表了将在每周五的5:37pm执行备份程序
# 37 17 即17:37
# 5 即周五

*:所有可能的值(每天\每小时\每分钟等)
,:和(比如1,5可以表示周一和周五)
-:可以表示一段时间(比如1-5可以表示周一到周五)
/:每隔一段时间(比如 */12可以表示每12小时运行一次)
L:last,最后的(比如* * * * 3L代表每月最后一个周三)
W:weekday最近的工作日(比如如果12月01日是周六的话* * 1W * * 代表接下来第一个星期一,即12月03日)
#:指定某周的周几(我不知道怎么翻译合适,看看这个例子您应该就明白了,比如1#2代表这个月的第二个周一,这个功能应该是适配西方节假日的)
?:无特定值,在“日”和“周”使用

另外还请记得时区转换的问题

12.3.3邮件
12.3.3.1 关闭邮件

crontab会自动给您的本地邮箱发送邮件,如果您不想的话请添加>/dev/null 2>&1 在语句的最后

12.3.3.2 给指定邮箱发送邮件

您需要添加MAITO,例子如下

MAILTO="myname@hostinger.com"
0 3 * * * /root/backup.sh >/dev/null 2>&1
12.3.4 退出:按esc 输入":wq"

13 命令执行顺序控制和管道

13.1 顺序执行

13.1.1 简单的顺序执行:

在命令中加入";"以作分隔

13.1.2 选择性执行:

"&&"如果前面的命令执行结果为0则执行后面的,否则不执行。(前面的命令执行失败才执行后面的)
"||"如果前面的命令执行结果不为零则执行后面的,否则不执行(签名档命令执行成功才执行后面的)

13.2 管道

管道简介

管道是一种通信机制,用于进程间的通信或通过 socket 进行网络通信。
管道将每一个进程的输出(stdout)作为下一个进程的输入(stdin)。

管道的分类

匿名管道
在过滤程序时常会用到的管道,在命令行中由 | 分隔符表示
具名管道
具名管道是有名字的管道,通常在源程序中用到具名管道。

13.3 cut命令:打印每一行的某一字段

13.4 grep命令:在文本或stdin中查找匹配

grep [命令选项]… 用于匹配的表达式 [文件]…

13.5 wc命令:统计并输出一个文件中行、单词和字节的数目

参数含义
-l行数
-w单词数
-c字节数
-m字符数
-L最长行字节数

13.6 sort命令:排序

13.7 unip命令:去除重复,但只能去除上下两行都一样的情况

14 文本处理

14.1 tr命令:删除文本中的某些信息

tr [option]…SET1 [SET2]

参数含义
-d删除和 set1 匹配的字符,注意不是全词匹配也不是按字符顺序匹配
-s去除 set1 指定的在输入文本中连续并重复的字符
# 删除 "hello" 中所有的'o','l','h'
$ echo 'hello' | tr -d 'olh'
# 将"hello" 中的ll,去重为一个l
$ echo 'hello' | tr -s 'l'
# 将输入文本,全部转换为大写或小写输出
$ echo 'input some text here' | tr '[:lower:]' '[:upper:]'

14.2 col命令:将Tab换成等量空格或将空格换成等量Tab

参数含义
-x将Tab转换为空格
-h将空格转换为Tab(默认选项)

14.3 join命令:将两个文件中包含相同内容的那一行合并在一起

参数含义
-t指定分隔符,默认为空格
-i忽略大小写的差异
-1指明第一个文件要用哪个字段来对比,默认对比第一个字段
-2指明第二个文件要用哪个字段来对比,默认对比第一个字段

14.4 paste命令:将多个文件合为一个

paste [option] file…

参数含义
-d指定合并的分隔符,默认为 Tab
-s不合并到一行,每个文件为一行

15 正则表达式(Regular Expression)

15.1 简介

正则表达式使用字符串来描述、匹配符合句法规则的字符串,它能被被用来检索、替换符合这个模式的文本。

15.2 基本句法

符号作用示例
|表示选择boy|girl 可以匹配 boy 或者 girl。
+前面的字符必须出现至少一次(>=1)goo+gle 可以匹配 gooogle,goooogle 等
?前面的字符最多出现一次(0或1)colou?r,可以匹配 color 或者 colour
*都可以(0到多次)0*42 可以匹配 42、042、0042、00042
()定义模式字符串的范围和优先级gr(a|e)y 等价于 gray|grey、(grand)?father 匹配 father 和 grandfather
\将下一个字符标记为一个特殊字符、或一个原义字符n 匹配字符 n。\n 匹配一个换行符。序列 \ 匹配 \ 而 ( 则匹配 (
^匹配输入字符串的开始位置
$匹配输入字符串的结束位置
{n}n 是一个非负整数。只匹配确定的 n 次o{2} 不能匹配 Bob 中的 o,但是能匹配 food 中的两个 o
{n,}n 是一个非负整数。至少匹配 n 次o{2,} 不能匹配 Bob 中的 o,但能匹配 foooood 中的所有 o。o{1,} 等价于 o+。o{0,} 则等价于 o*
{n,m}m 和 n 均为非负整数,其中 n<=m。逗号和两个数之间不能有空格。最少匹配 n 次且最多匹配 m 次o{1,3} 将匹配 fooooood 中的前三个 o,o{0,1} 等价于 o?。
*匹配前面的子表达式零次或多次zo* 能匹配 z、zo 以及 zoo。* 等价于 {0,}
+匹配前面的子表达式一次或多次zo+ 能匹配 zo 以及 zoo,但不能匹配 z。+ 等价于 {1,}
?匹配前面的子表达式零次或一次do(es)? 可以匹配 do 或 does 中的 do。? 等价于 {0,1}
.匹配除 \n 之外的任何单个字符要匹配包括 \n 在内的任何字符,请使用类似 (.|\n) 的模式
(pattern)匹配 pattern 并获取这一匹配的子字符串。该子字符串用于向后引用。要匹配圆括号字符,请使用 ( 和 )。
x | y匹配 x 或 y。“z|food”能匹配 z 或 food。“(z|f)ood”则匹配 zood 或 food。
[xyz]字符集合(character class)。匹配所包含的任意一个字符。[abc] 可以匹配 plain 中的 a。其中特殊字符仅有反斜线 \ 保持特殊含义,用于转义字符。其它特殊字符如星号、加号、各种括号等均作为普通字符。脱字符^如果出现在首位则表示负值字符集合;如果出现在字符串中间就仅作为普通字符。连字符 - 如果出现在字符串中间表示字符范围描述;如果出现在首位则仅作为普通字符。
[^xyz]排除型(negate)字符集合。匹配未列出的任意字符。[^abc] 可以匹配 plain 中的 plin。
特殊符号
特殊符号说明
[:alnum:]代表英文大小写字母及数字,亦即 0-9,A-Z,a-z
[:alpha:]代表任何英文大小写字母,亦即 A-Z,a-z
[:blank:]代表空白键与 [Tab] 按键两者
[:cntrl:]代表键盘上面的控制按键,亦即包括 CR,LF,Tab,Del…
[:digit:]代表数字而已,亦即 0-9
[:graph:]除了空白字节(空白键与 [Tab] 按键)外的其他所有按键
[:lower:]代表小写字母,亦即 a-z
[:print:]代表任何可以被列印出来的字符
[:punct:]代表标点符号(punctuation symbol),即:",’,?,!,;,:,#,$…
[:upper:]代表大写字母,亦即 A-Z
[:space:]任何会产生空白的字符,包括空格键,[Tab],CR 等等
[:xdigit:]代表 16 进位的数字类型,因此包括: 0-9,A-F,a-f 的数字与字节
优先级

优先级为从上到下从左到右,依次降低

运算符说明
\转义符
(),(?😃,(?=),[]括号和中括号
*,+,?,{n},{n,},{n,m}限定符
^,$,\ 任何元字符定位点和序列
|选择

15.3 grep命令

参数说明
-EPOSIX 扩展正则表达式,ERE
-GPOSIX 基本正则表达式,BRE
-PPerl 正则表达式,PCRE
-b将二进制文件作为文本来进行匹配
-c统计以模式匹配的数目
-i忽略大小写
-n显示匹配文本所在行的行号
-v反选,输出不匹配行的内容
-r递归匹配查找
-A nn 为正整数,表示 after 的意思,除了列出匹配行之外,还列出后面的 n 行
-B nn 为正整数,表示 before 的意思,除了列出匹配行之外,还列出前面的 n 行
–color=auto将输出中的匹配项设置为自动颜色显示

15.4 sed命令

seq基本命令格式:
sed [参数]… [执行命令] [输入文件]…

参数说明
-n安静模式,只打印受影响的行,默认打印输入数据的全部内容
-e用于在脚本中添加多个执行命令一次执行,在命令行中执行多个命令通常不需要加该参数
-f filename指定执行 filename 文件中的命令
-r使用扩展正则表达式,默认为标准正则表达式
-i将直接修改输入文件内容,而不是打印到标准输出设备
sed -i 's/sad/happy/' test 
# 表示将test文件中的"sad"替换为"happy"

sed 执行命令格式:
[n1][,n2]command
[n1][~step]command

内容说明
n1,n2输入内容的行号
, (逗号)从 n1 到 n2 行
~ (波浪号)从 n1 开始以 step 为步进的所有行
command执行动作
#其中一些命令可以加入作用范围
sed -i 's/sad/happy/g' test
# g 表示全局范围
sed -i 's/sad/happy/4' test
# 4 表示指定行中的第四个匹配字符串
常用命令:
命令说明
s行内替换
c整行替换
a插入到指定行的后面
i插入到指定行的前面
p打印指定行,通常与 -n 参数配合使用
d删除指定行

16 Linux软件安装

16.1 apt(Advance Packaging Tool) 包管理工具

16.1.1 apt-get:网络下载软件包
工具说明
install其后加上软件包名,用于安装一个软件包
update从软件源镜像服务器上下载/更新用于更新本地软件源的软件包列表
upgrade升级本地可更新的全部软件包,但存在依赖问题时将不会升级,通常会在更新之前执行一次 update
dist-upgrade解决依赖关系并升级(存在一定危险性)
remove移除已安装的软件包,包括与被移除软件包有依赖关系的软件包,但不包含软件包的配置文件
autoremove移除之前被其他软件包依赖,但现在不再被使用的软件包
purge与 remove 相同,但会完全移除软件包,包含其配置文件
clean移除下载到本地的已经安装的软件包,默认保存在 /var/cache/apt/archives/
autoclean移除已安装的软件的旧版本软件包
参数说明
-y自动回应是否安装软件包的选项,在一些自动化安装脚本中使用这个参数将十分有用
-s模拟安装
-q静默安装方式,指定多个 q 或者 -q=#,# 表示数字,用于设定静默级别,这在你不想要在安装软件包时屏幕输出过多时很有用
-f修复损坏的依赖关系
-d只下载不安装
–reinstall重新安装已经安装但可能存在问题的软件包
–install-suggests同时安装 APT 给出的建议安装的软件包
16.1.2 -chace:针对本地数据进行相关操作
sudo apt-cache search softname1
# 本地搜索某软件包

16.2 dpkg:从本地磁盘安装

参数说明
-i安装指定 deb 包
-R后面加上目录名,用于安装该目录下的所有 deb 安装包
-rremove,移除某个已安装的软件包
-I显示 deb 包文件的信息
-s显示已安装软件的信息
-S搜索已安装的软件包
-L显示已安装软件包的目录信息
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值