Linux 基础

什么是 Linux

Linux,全称 GNU/Linux,是一种免费使用和自由传播的类 UNIX 操作系统,其内核由林纳斯·本纳第克特·托瓦兹于 1991 年 10 月 5 日首次发布,它主要受到 Minix 和 Unix 思想的启发,是一个基于 POSIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。Linux 有上百种不同的发行版,如基于社区开发的 debian、archlinux,和基于商业开发的 Red Hat Enterprise Linux、SUSE、Oracle Linux 等。

安装 Linux

这里使用的环境是 Windows 自带的 Linux 子系统 (WSL2), Ubuntu 版本 1804. 可以参考微软官方的安装教程 安装 WSL | Microsoft Learn 注意的是,如果直接从微软商店(Microsoft Store)安装会默认安装的 C 盘,导致使用不便. 建议下载发行版的离线安装包,然后将后缀改为 zip,解压到你想要的位置上面,接着运行可执行文件(exe),安装 Linux.

Linux 目录结构

Linux 的目录结构是一个树型结构. Windows 系统可以拥有多个盘符,如 C 盘、D 盘、E 盘. Linux 没有盘符这个概念,只有一个顶级目录: 根目录( / ), 所有文件都在它下面.

所以 Linux 的目录描述起来就是 /home/user , 而 Windows 就是 D:\Ubuntu_1804.2019.522.0_x64

在 Linux 中 / 在开头表示根目录,在后面的表示一个层级关系, 比如前面的 : /home/user 中, / 表示根目录,home/user 表示 根目录 下 home 文件夹下的 user 文件夹.

注意

在 Linux 中描述路径用的是斜杠 / 来表述路径的,而 Windows 系统中使用的是反斜杠来表示 \ .

反斜杠为啥存在,可以参考下知乎 Lunamos 的回答:

直接看维基就好了.

当次搬运工吧,Bob Bemer(ASCII 之父,当时的一位 IBM 工程师)在 1961 年将反斜杠(也就是「\」,正斜杠是「/」)引入 ASCII,原因是在频率分析中认为反斜杠还是被用了很多的一个符号。再仔细追究会发现,反斜杠最主要的用途是在一个叫做 ALGOL 的早期高级语言)中参与表示布尔运算 AND 和 OR,其中 AND 的写法是「/\」,OR 的写法是「\/」,都是分别由一个反斜杠和一个正斜杠组成的。而之后流传了下来,并被用作更多其他的用途。

考证贴的存档:https://web.archive.org/web/20130119163809/http://www.bobbemer.com/BACSLASH.HTM

原回答地址: 反斜杠为什么存在? - Lunamos 的回答 - 知乎

命令, 命令行

命令:即 Linux 程序。一个命令就是一个 Linux 的程序。命令没有图形化页面,可以在命令行(终端中)提供字符化的反馈

命令行:即 Linux 终端(Terminal),是一种命令提示符页面。以纯“字符”的形式操作系统,可以使用各种字符化命令对系统发出操作指令.

Linux 命令基础格式

无论是什么命令,用于什么用途,在 Linux 中,命令有其通用的格式: command [-options] [parameter] 其中 ,

command:命令本身 -options:(可选,非必填)命令的一些选项,可以通过选项控制命令的行为细节 parameter:(可选,非必填)命令的参数,多数用于命令的指向目标等

语法中的[],表示可选的意思.

例如:

cat -E /home/user/t1/t1.txt : 查看 /home/user/t1/t1.txt 的内容,并且没每行结束以$ 结尾. 其中 cat 是命令本身 , -E 是选项, `/home/user/t1/t1.txt 是参数

Linux 基础命令

路径与特殊路径符

绝对路径:以根目录为起点,描述路径的一种写法,路径描述以 / 开头

相对路径:以当前目录为起点,描述路径的一种写法,路径描述无需以 /开头

例如:

我现在在 /home/user 路径下,想要创建一个名为 t1 的目录,绝对路径的写法就是

1
mkdir /home/user/t1

而相对路径的写法就是

1
mkdir t1

特殊路径符 • . 表示当前目录,比如说 cd . 或 cd ./Desktop
• .. 表示上一级目录,比如说 cd ..如果想要上上一级目录可用 cd ../..
•~表示用户的 HOME 目录。比如 cd ~ 或 cd ~/Desktop

ls 命令

ls [-a -l -h] [Linux路径]

作用 : 以平铺的形式列出指定路径下的文件

例如 :

1
$ ls

输出

1
2
bin   dev  home  lib    lost+found  mnt   root  sbin  srv  t1   usr
boot  etc  init  lib64  media       proc  run   snap  sys  tmp  var

这是我当前工作目录下的文件

需要注意的是 Linux 在启动的时候,每个 Linux 操作用户在 Linux 系统的个人账户目录, 路径为 /home/用户名. 在用户登录的时候,会默认在账户目录下进行操作,即 user 用户登录的时候,默认会在 /home/user这个用户下操作.

选项使用

  • -a 选项 , 表示 all 的意思,会列出所有文件(包括隐藏文件和文件夹) 例如:
1
$ ls

输出:

1
logs  t.txt  t1

这里输入 ls -a

1
$ ls -a

输出:

1
2
.   .bash_history  .bashrc  .config     .local       .pki      .sudo_as_admin_successful  .viminfo  t.txt
..  .bash_logout   .cache   .landscape  .motd_shown  .profile  .test.swp                  logs      t1
  • -l 选项 ,表示以列表的形式竖向排列展示内容,并且展示更多信息
1
$ ls -l
1
2
3
drwx------ 2 user user 4096 Dec 30 16:31 logs
-rw-r--r-- 1 user user   42 Dec 30 10:57 t.txt
drwxr-xr-x 3 root root 4096 Dec 30 11:14 t1

给出了 drwxr-xr-x : 权限 , user user 用户和用户组 , 4096 文件或者文件夹大小和 Dec 30 16:31 创建时间等数据

  • -h 表示易于阅读的形式,列出文件的大小,此选项需要和其他选项连用.

例如 :

1
$ ls -lh
1
2
3
4
total 12K
drwx------ 2 user user 4.0K Dec 30 16:31 logs
-rw-r--r-- 1 user user   42 Dec 30 10:57 t.txt
drwxr-xr-x 3 root root 4.0K Dec 30 11:14 t1

或者是

显示当前目录下所有的文件.并且以列表形式展示,同时变为易于阅读的形式

1
$ ls -alh
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
total 76K
drwxr-xr-x 9 user user 4.0K Dec 30 17:33 .
drwxr-xr-x 3 root root 4.0K Dec 30 10:00 ..
-rw------- 1 user user 1.5K Dec 31 11:53 .bash_history
-rw-r--r-- 1 user user  220 Dec 30 10:00 .bash_logout
-rw-r--r-- 1 user user 3.7K Dec 30 10:00 .bashrc
drwx------ 3 user user 4.0K Dec 30 16:31 .cache
drwx------ 3 user user 4.0K Dec 30 16:31 .config
drwxr-xr-x 2 user user 4.0K Dec 30 17:33 .landscape
drwxr-xr-x 3 user user 4.0K Dec 30 16:31 .local
-rw-r--r-- 1 user user    0 Dec 31 10:03 .motd_shown
drwx------ 3 user user 4.0K Dec 30 16:31 .pki
-rw-r--r-- 1 user user  807 Dec 30 10:00 .profile
-rw-r--r-- 1 user user    0 Dec 30 10:01 .sudo_as_admin_successful
-rw------- 1 user user  12K Dec 30 10:27 .test.swp
-rw------- 1 user user 7.8K Dec 30 11:07 .viminfo
drwx------ 2 user user 4.0K Dec 30 16:31 logs
-rw-r--r-- 1 user user   42 Dec 30 10:57 t.txt
drwxr-xr-x 3 root root 4.0K Dec 30 11:14 t1

cd/pwd 命令

cd 命令

cd [linux路径]

切换当前所在工作目录

长度命令无需选项只有参数,如果不写参数,则会切换到用户的 Home 目录.

例如: 切换到用户目录下的 t1 目录

1
$ cd t1

切换回 Home 目录

1
$ cd

pwd 命令

pwd

查看当前工作目录

无选择无参数,直接输入 pwd 即可

1
$ pwd
1
/home/user

mkdir 命令

mkdir [-p] Linux路径

创建新的目录

参数选项必填,选项可选,表示自动创建不存在的父目录.

1
$ mkdir t2

直接使用 mkdir t3/t32 会报错

1
mkdir: cannot create directory ‘t3/t32’: No such file or directory

所以需要加入选项来创建不存在的父目录

1
$ mkdir -p t3/t32

文件操作命令

touch 命令

touch Linux路径

创建文件

touch 命令无选项,参数必填,表示创建文件的路径(相对,绝对,特殊路径符皆可).

cat 命令

cat Linux路径

查看文件内容(完全显示)

cat 同样没了选项,只有必填参数

1
$ cat t1.txt
1
2
3
4
123123123
123123123123
1231231231
Print("hello,World")

more 命令

more Linux路径

作用: 查看文件内容,但是 cat 是将内容全部显示出来,而 more 在文件内容过多的情况下支持分页显示(查看过程中使用空格分页,使用 q 退出查看)

cp 命令

cp [-r] 参数1 参数2

复制文件或者文件夹

  • -r 选项可选,用于复制文件夹,表示递归
  • 参数 1 : Linux 路径,表示来源的文件或者文件夹
  • 参数 2 : Linux 路径,表示要目标文件夹

mv 命令

mv 参数1 参数2

mv 命令可以移动文件或者文件夹

  • 参数 1 : Linux 路径,表示来源的文件或者文件夹
  • 参数 2 : Linux 路径,表示要目标文件夹, 如果目标不存在,则进行改名,确保目标存在.

rm 命令

rm [-r -f] 参数1 参数2 ....参数N

删除文件,文件夹

  • 和 cp 命令一样, -r 选项用于删除文件夹
  • -f ,表示强制删除(无确认提示,需要注意的是,普通用户不会弹出提示,只有 root 管理员用户会有提示)
  • 参数 1 参数 2 ….参数 N 表示要删除的文件或文件夹路径,需要使用空格隔开

rm 命令支持通配符 *,用来做模糊匹配. 符号 * 表示通配符,即匹配任意内容(包括空) . 用法为:

  • test* 表示匹配任何开头是 test 的内容
  • *test 表示匹配任何以 test 结尾的内容
  • *test* 表示匹配任何包含 test 的内容

管道符

管道符: |
管道符左边命令的结果,作为右边命令的输入

文件查找命令

wc 命令

wc [-c -m -l -w] 文件路径

  • -c , 统计 bytes 数量
  • -m , 统计字符数量
  • -l , 统计行数
  • -w , 统计单词数量
  • 文件路径 , 被统计的文件,可作为内容输入端口

which 命令

which 要查找的命令

可以查看使用的一系列命令的程序文件在哪里 而前面学期的 Linux 命令实际上就是二进制可执行程序

which 可以查看到命令的文件在哪里

1
which pwd

输出

1
/bin/pwd

find 命令

find 起始路径 [-name] "被查找的文件名"

查找指定文件

1
# find /home/user -name "11*"

这里结合通配符来实现复杂一些的搜索

1
2
3
/home/user/11.conf
/home/user/11.txt
/home/user/11.yaml

常用参数

-mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件

-amin n : 在过去 n 分钟内被读取过

-anewer file : 比文件 file 更晚被读取过的文件

-atime n : 在过去 n 天内被读取过的文件

-cmin n : 在过去 n 分钟内被修改过

-cnewer file :比文件 file 更新的文件

-ctime n : 在过去 n 天内创建的文件

-mtime n : 在过去 n 天内修改过的文件

-empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名称是 name

-ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写

-name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写

-size n : 文件大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。

-type c : 文件类型是 c 的文件。

grep 命令

grep [-n] 关键字 文件路径

使用 grep 命令可以从文件中通过关键字过滤文件行

  • -n,可选,表示要在结果中显示匹配行的行号
  • 参数 (关键字),必填,表示过滤的关键字,带有空格或者其他特殊符号,建议使用 " " 将关键字包围起来
  • 参数(文件路径) ,必填,表示要过滤内容的文件路径,可作为内容输入端口
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
$ cat 11.conf

123123123123123
12312312313212312
123123123131312312
asdfafafasdf
fvasvdfvbasffgaer
123423425345236364

$ grep "asdf" 11.conf

asdfafafasdf
0%