Linux学习🚀

操作系统文件时一定要记得先备份!!!

image-20230620231850984

Linux入门:

linux的应用领域:

  • 个人桌面领域
    • 此领域是传统Linux应用薄弱的环节,近些年来随着ubuntu、fedora等优秀桌面环境的兴起,Linux在个人桌面领域的占有率正在逐渐的提高
  • 服务器领域
    • linux在服务器领域的应用是最强的
    • linux 免费、稳定、高效 等特点在这里得到了很好的体现,尤其在一些高端领域尤为广泛( c/c+ + /php/java/python) .
  • 嵌入式领域
    • linux运行稳定、对网络的良好支持性,低成本,且可以根据需要进行软件裁剪,内核最小可以达到几百KB等特点,使其近些年来在嵌入式领域的应用得到非常大的提高;
    • 主要应用:机顶盒、数宇电视、网络电话、程控交换机、手机、PDA、智能家居、智能硬件等都是其应用领域。以后在物联网中应用会更加广泛。

网络连接的三种方式:

  1. 桥接模式

  2. NAT模式

  3. 主机模式

IMG_31492E73D3F2-1

虚拟机克隆(方便快速构建集群)

​ 如果你已经安装了一合linux操作系统,你还想再更多的,老韩提示大家:没有必要再重新安装,你只需要克隆就可以。

  • 方式1:直接拷贝一份安装好的虛拟机文件
  • 方式2:使用vmware的克隆操作,注意,克隆时,需要先关闭linux系统

虚拟机快照

如果你在使用虛拟机系统的时候(比如linux),你想回到原先的某一个状态,也就是说你担心可能有些误操作造成系统异常,需要回到原先某个正常运行的状态,vmware也提供了这样的功能,就叫快照管理。

基础知识:

命令行结构:

1
2
root@iZbp1cmlu7iso80jlaxx2uZ:~# pwd
/root

其中:

  • root:表示用户名;
  • iZbp1cmlu7iso80jlaxx2uZ:表示主机名;
  • ~:表示目前所在目录为家目录,其中 root 用户的家目录是 /root 普通用户的家目录在 /home 下;
  • #:指示你所具有的权限( root 用户为 # ,普通用户为 $ )。

一些快捷键:

  • 通过上下方向键 ↑ ↓ 来调取过往执行过的 Linux 命令;
  • 命令或参数仅需输入前几位就可以用 Tab 键补全;
  • Ctrl + R :用于查找使用过的命令(history 命令用于列出之前使用过的所有命令,然后输入 ! 命令加上编号( !2 )就可以直接执行该历史命令);
  • Ctrl + L:清除屏幕并将当前行移到页面顶部;
  • Ctrl + C:中止当前正在执行的命令;
  • Ctrl + U:从光标位置剪切到行首;
  • Ctrl + K:从光标位置剪切到行尾;
  • Ctrl + W:剪切光标左侧的一个单词;
  • Ctrl + Y:粘贴 Ctrl + U | K | Y 剪切的命令;
  • Ctrl + A:光标跳到命令行的开头;
  • Ctrl + E:光标跳到命令行的结尾;
  • Ctrl + D:关闭 Shell 会话;

常用命令:

which:

——查看命令的可执行文件所在路径

Linux 下,每一条命令其实都对应一个可执行程序,在终端中输入命令,按回车的时候,就是执行了对应的那个程序, which 命令本身对应的程序也存在于 Linux 中。

image-20231219111417608

cat:

一次性显示文件所有内容,更适合查看小的文件。

1
cat cloud-init.log

【常用参数】

  • -n 显示行号。

less:

分页显示文件内容,更适合查看大的文件。

1
less cloud-init.log

head:

显示文件的开头几行(默认是10行)

1
head cloud-init.log

【参数】

  • -n 指定行数 head cloud-init.log -n 2

(要看几行,而不是看第几行)

tail:

显示文件的结尾几行(默认是10行)

1
tail cloud-init.log复制代码

【参数】

  • -n 指定行数 tail cloud-init.log -n 2
  • -f 会每过1秒检查下文件是否有更新内容,也可以用 -s 参数指定间隔时间 tail -f -s 4 xxx.log

touch:

创建一个文件

1
touch new_file

mkdir:

创建一个目录

1
mkdir new_folder

【常用参数】

  • -p 递归的创建目录结构 mkdir -p one/two/three

cp:

拷贝文件和目录

1
2
3
4
5
cp file file_copy 
--> file 是目标文件,file_copy 是拷贝出来的文件
cp file one --> 把 file 文件拷贝到 one 目录下,并且文件名依然为 file
cp file one/file_copy --> 把 file 文件拷贝到 one 目录下,文件名为file_copy
cp *.txt folder --> 把当前目录下所有 txt 文件拷贝到 folder 目录下

【常用参数】

  • -r 递归的拷贝,常用来拷贝一整个目录

mv:

移动(重命名)文件或目录,与cp命令用法相似。

rm:

删除文件和目录,由于 Linux 下没有回收站,一旦删除非常难恢复,因此需要谨慎操作

1
2
rm new_file  --> 删除 new_file 文件
rm f1 f2 f3 --> 同时删除 f1 f2 f3 3个文件

【常用参数】

  • -i 向用户确认是否删除;
  • -f 文件强制删除;
  • -r 递归删除文件夹,著名的删除操作 rm -rf

ln:

英文 Link 的缩写,表示创建链接。

学习创建链接之前,首先要理解链接是什么,我们先来看看 Linux 的文件是如何存储的:

Linux 文件的存储方式分为3个部分,文件名、文件内容以及权限,其中文件名的列表是存储在硬盘的其它地方和文件内容是分开存放的,每个文件名通过 inode 标识绑定到文件内容。

Linux 下有两种链接类型:硬链接和软链接。

硬链接

使链接的两个文件共享同样文件内容,就是同样的 inode ,一旦文件1和文件2之间有了硬链接,那么修改任何一个文件,修改的都是同一块内容,它的缺点是,只能创建指向文件(文件内容)的硬链接,不能创建指向目录的(其实也可以,但比较复杂)而软链接都可以,因此软链接使用更加广泛。

1
ln file1 file2  --> 创建 file2 为 file1 的硬链接

图片图片

如果我们用 rm file1 来删除 file1 ,对 file2 没有什么影响,对于硬链接来说,删除任意一方的文件,共同指向的文件内容并不会从硬盘上删除。只有同时删除了 file1file2 后,它们共同指向的文件内容才会消失。

软链接

软链接就类似 windows 下快捷方式。

1
ln -s file1 file2

图片图片

执行 ls -l 命名查看当前目录下文件的具体信息

1
2
3
total 0-rw-r--r-- 1 root root 0 Jan 14 06:29 
file1lrwxrwxrwx 1 root root 5 Jan 14 06:42
file2 -> file1 # 表示file2 指向 file1复制代码

其实 file2 只是 file1 的一个快捷方式,它指向的是 file1 ,所以显示的是 file1 的内容,但其实 file2inodefile1 并不相同。如果我们删除了 file2 的话, file1是不会受影响的,但如果删除 file1 的话, file2 就会变成死链接,因为指向的文件不见了。

用户与权限:

linux操作系统中,root用户是超级用户,拥有最高权限

普通用户需要更高权限来执行操作时,可以使用sudo命令

创建、删除用户:

1
2
3
4
5
useradd lion --> 添加一个lion用户,添加完之后在 /home 路径下可以查看
passwd lion --> 修改lion用户的密码

userdel lion --> 只会删除用户名,不会从/home中删除对应文件夹
userdel lion -r --> 会同时删除/home下的对应文件夹

su:

切换用户,需要 root 用户权限

1
2
3
sudo su --> 切换为root用户(exit 命令或 CTRL + D 快捷键都可以使普通用户切换为 root 用户)
su lion --> 切换为普通用户
su - --> 切换为root用户

群组的管理:

Linux 中每个用户都属于一个特定的群组,如果你不设置用户的群组,默认会创建一个和它的用户名一样的群组,并且把用户划归到这个群组。

groupadd

创建群组,用法和 useradd 类似。

1
groupadd friends
groupdel

删除一个已存在的群组

1
groupdel foo  --> 删除foo群组
groups

查看用户所在群组

1
groups lion  --> 查看 lion 用户所在的群组
usermod:

用于修改用户的账户。

【常用参数】

  • -l 对用户重命名。需要注意的是 /home 中的用户家目录的名字不会改变,需要手动修改。
  • -g 修改用户所在的群组,例如 usermod -g friends lion修改 lion 用户的群组为 friends
  • -G 一次性让用户添加多个群组,例如 usermod -G friends,foo,bar lion
  • -a -G 会让你离开原先的群组,如果你不想这样做的话,就得再添加 -a 参数,意味着append 追加的意思。
chgrp

用于修改文件的群组。

1
chgrp bar file.txt --> file.txt文件的群组修改为bar
chown

改变文件的所有者,需要 root 身份才能运行。

1
2
chown lion file.txt --> 把其它用户创建的file.txt转让给lion用户
chown lion:bar file.txt --> 把file.txt的用户改为lion,群组改为bar

【常用参数】

  • -R 递归设置子目录和子文件, chown -R lion:lion /home/frankfrank 文件夹的用户和群组都改为 lion

文件权限管理:

chmod:

修改访问权限。

1
chmod 740 file.txt

【常用参数】

  • -R 可以递归地修改文件访问权限,例如 chmod -R 777 /home/lion

修改权限的确简单,但是理解其深层次的意义才是更加重要的。下面我们来系统的学习Linux 的文件权限。

1
2
3
4
5
6
root@iZbp1cmlu7iso80jlaxx2uZ:/tangjy# ll
total 8
drwxr-xr-x 2 root root 4096 Dec 19 14:40 ./
drwxr-xr-x 20 root root 4096 Dec 19 14:08 ../
-rw-r--r-- 1 root root 0 Dec 19 14:40 file1
lrwxrwxrwx 1 root root 5 Dec 19 14:40 file2 -> file1

其中 drwxr-xr-x 表示文件或目录的权限。让我们一起来解读它具体代表什么?

  • d :表示目录,就是说这是一个目录,普通文件是 - ,链接是 l
  • rread 表示文件可读。
  • wwrite 表示文件可写,一般有写的权限,就有删除的权限。
  • xexecute 表示文件可执行。
  • - :表示没有相应权限。

权限的整体是按用户来划分的,如下图所示:

图片图片

现在再来理解这句权限 drwxr-xr-x 的意思:

  • 它是一个文件夹;
  • 它的所有者具有:读、写、执行权限;
  • 它的群组用户具有:读、执行的权限,没有写的权限;
  • 它的其它用户具有:读、执行的权限,没有写的权限。

现在理解了权限,我们使用 chmod 来尝试修改权限。chmod 它不需要是 root 用户才能运行的,只要你是此文件所有者,就可以用 chmod 来修改文件的访问权限。

数字分配权限
权限 数字
r 4
w 2
x 1

因此要改变权限,只要做一些简单的加法就行:

1
chmod 640 hello.c # 分析6 = 4 + 2 + 0 表示所有者具有 rw 权限4 = 4 + 0 + 0 表示群组用户具有 r 权限0 = 0 + 0 + 0 表示其它用户没有权限对应文字权限为:-rw-r-----
用字母来分配权限
  • uuser 的缩写,用户的意思,表示所有者。
  • ggroup 的缩写,群组的意思,表示群组用户。
  • oother 的缩写,其它的意思,表示其它用户。
  • aall 的缩写,所有的意思,表示所有用户。
  • + :加号,表示添加权限。
  • - :减号,表示去除权限。
  • = :等于号,表示分配权限。
1
2
chmod u+rx file # --> 文件file的所有者增加读和运行的权限
chmod g+r file # --> 文件file的群组用户增加读的权限

查找文件:

find命令:

1
find <何处(哪个文件夹下)> <条件,可以同时设置多个> <做什么(可选)>

其中条件可以有多种,可以根据文件的名字来查找,也可以根据其大小来查找,还可以根据其最近访问时间来查找……

例如:

  • -name “file.txt”
  • -size +10M
  • -atime -7 #近7天内访问过的

阅读手册

man:

Linux 命令种类繁杂,我们凭借记忆不可能全部记住,因此学会查用手册是非常重要的。

查阅阅读手册的命令为man

1
2
3
man 待查阅的命令名称
#如:
man ls

help:

man 命令像新华词典一样可以查询到命令或函数的详细信息,但其实我们还有更加快捷的方式去查询, command --helpcommand -h ,它没有 man 命令显示的那么详细,但是它更加易于阅读。

文本操作:

grep:

全局搜索一个正则表达式,并且打印到屏幕。简单来说就是,在文件中查找关键字,并显示关键字所在行。