lukaliou123 / lukaliou123.github.io

lukaliou123在2022年的面试用知识点总结
Other
5 stars 0 forks source link

Linux常用命令篇 #14

Open lukaliou123 opened 2 years ago

lukaliou123 commented 2 years ago

1.Linux 文件系统简介—理念:

在 Linux 操作系统中,所有被操作系统管理的资源,例如网络接口卡、磁盘驱动器、打印机、输入输出设备、普通文件或是目录都被看作是一个文件。 也就是说在 Linux 系统中有一个重要的概念:一切都是文件

2.inode介绍

inode 是 linux/unix 文件系统的基础。那么,inode 是什么?有什么作用呢?

硬盘的最小存储单位是扇区(Sector),块(block)由多个扇区组成。文件数据存储在块中。块的最常见的大小是 4kb,约为 8 个连续的扇区组成(每个扇区存储 512 字节)。一个文件可能会占用多个 block,但是一个块只能存放一个文件。

虽然,我们将文件存储在了块(block)中,但是我们还需要一个空间来存储文件的 元信息 metadata :如某个文件被分成几块、每一块在的地址、文件拥有者,创建时间,权限,大小等。这种 存储文件元信息的区域就叫 inode,译为索引节点:i(index)+node。 每个文件都有一个 inode,存储文件的元信息。 简单来说:inode 就是用来维护某个文件被分成几块、每一块在的地址、文件拥有者,创建时间,权限,大小等信息。 简单总结一下: inode :记录文件的属性信息,可以使用 stat 命令查看 inode 信息。 block :实际文件的内容,如果一个文件大于一个块时候,那么将占用多个 block,但是一个块只能存放一个文件。(因为数据是由 inode 指向的,如果有两个文件的数据存放在同一个块中,就会乱套了) image

lukaliou123 commented 2 years ago

3.Linux目录切换命令

cd usr: 切换到该目录下 usr 目录 cd ..(或cd../): 切换到上一层目录 cd /: 切换到系统根目录 cd ~: 切换到用户主目录 cd -: 切换到上一个操作所在目录

lukaliou123 commented 2 years ago

4.目录操作命令

mkdir 目录名称: 增加目录。

ls/ll(ll 是 ls -l 的别名,ll 命令可以看到该目录下的所有目录和文件的详细信息):查看目录信息。

find 目录 参数: 寻找目录(查)。示例:① 列出当前目录及子目录下所有文件和文件夹: find .;② 在/home目录下查找以.txt 结尾的文件名:find /home -name ".txt" ,忽略大小写: find /home -iname ".txt" ;③ 当前目录及子目录下查找所有以.txt 和.pdf 结尾的文件:find . ( -name ".txt" -o -name ".pdf" )或find . -name ".txt" -o -name ".pdf"。

mv 目录名称 新目录名称: 修改目录的名称(改)。注意:mv 的语法不仅可以对目录进行重命名而且也可以对各种文件,压缩包等进行 重命名的操作。mv 命令用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。后面会介绍到 mv 命令的另一个用法。

mv 目录名称 目录的新位置: 移动目录的位置---剪切(改)。注意:mv 语法不仅可以对目录进行剪切操作,对文件和压缩包等都可执行剪切操作。另外 mv 与 cp 的结果不同,mv 好像文件“搬家”,文件个数并未增加。而 cp 对文件进行复制,文件个数增加了。

cp -r 目录名称 目录拷贝的目标位置: 拷贝目录(改),-r 代表递归拷贝 。注意:cp 命令不仅可以拷贝目录还可以拷贝文件,压缩包等,拷贝文件和压缩包时不 用写-r 递归。

rm [-rf] 目录 : 删除目录(删)。注意:rm 不仅可以删除目录,也可以删除其他文件或压缩包,为了增强大家的记忆, 无论删除任何目录或文件,都直接使用rm -rf 目录/文件/压缩包。

lukaliou123 commented 2 years ago

5.Linux权限命令

操作系统中每个文件都拥有特定的权限、所属用户和所属组。权限是操作系统用来限制资源访问的机制,在 Linux 中权限一般分为读(readable)、写(writable)和执行(excutable),分为三组。分别对应文件的属主(owner),属组(group)和其他用户(other),通过这样的机制来限制哪些用户、哪些组可以对特定的文件进行什么样的操作。

通过 ls -l 命令我们可以 查看某个目录下的文件或目录的权限 示例:在随意某个目录下ls -l image

第一列的内容的信息解释如下: image

文件的类型:

d: 代表目录 -: 代表文件 l: 代表软链接(可以认为是 window 中的快捷方式)

Linux 中权限分为以下几种:

r:代表权限是可读,r 也可以用数字 4 表示 w:代表权限是可写,w 也可以用数字 2 表示 x:代表权限是可执行,x 也可以用数字 1 表示

文件和目录权限的区别:

对文件和目录而言,读写执行表示不同的意义。 1646889515(1)

在 linux 中的每个用户必须属于一个组,不能独立于组外。在 linux 中每个文件有所有者、所在组、其它组的概念。

所有者(u) :一般为文件的创建者,谁创建了该文件,就天然的成为该文件的所有者,用 ls ‐ahl 命令可以看到文件的所有者 也可以使用 chown 用户名 文件名来修改文件的所有者 。 文件所在组(g) :当某个用户创建了一个文件后,这个文件的所在组就是该用户所在的组用 ls ‐ahl命令可以看到文件的所有组也可以使用 chgrp 组名 文件名来修改文件所在的组。 其它组(o) :除开文件的所有者和所在组的用户外,系统的其它用户都是文件的其它组。

修改文件/目录的权限的命令:chmod 示例:修改/test 下的 aaa.txt 的权限为文件所有者有全部权限,文件所有者所在的组有读写权限,其他用户只有读的权限。

chmod u=rwx,g=rw,o=r aaa.txt 或者 chmod 764 aaa.txt image

补充一个比较常用的东西:开机自动启动脚本

假如我们装了一个 zookeeper,我们每次开机到要求其自动启动该怎么办?

新建一个脚本 zookeeper 为新建的脚本 zookeeper 添加可执行权限,命令是:chmod +x zookeeper 把 zookeeper 这个脚本添加到开机启动项里面,命令是:chkconfig --add zookeeper 如果想看看是否添加成功,命令是:chkconfig --list

lukaliou123 commented 2 years ago

6.Linux用户管理命令

useradd 选项 用户名:添加用户账号

userdel 选项 用户名:删除用户帐号

usermod 选项 用户名:修改帐号

passwd 用户名:更改或创建用户的密码

passwd -S 用户名 :显示用户账号密码信息

passwd -d 用户名: 清除用户密码

useradd 命令用于 Linux 中创建的新的系统用户。useradd可用来建立用户帐号。帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号。使用useradd指令所建立的帐号,实际上是保存在 /etc/passwd文本文件中

7.Linux系统用户组的管理

每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同 Linux 系统对用户组的规定有所不同,如 Linux 下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。

用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新

Linux 系统用户组的管理相关命令:

groupadd 选项 用户组 :增加一个新的用户组 groupdel 用户组:要删除一个已有的用户组 groupmod 选项 用户组 : 修改用户组的属性

lukaliou123 commented 2 years ago

8.其他常用命令

pwd: 显示当前所在位置

sudo + 其他命令:以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。

grep 要搜索的字符串 要搜索的文件 --color: 搜索命令,--color 代表高亮显示

ps -ef/ps -aux: 这两个命令都是查看当前系统正在运行进程,两者的区别是展示格式不同。如果想要查看特定的进程可以使用这样的格式:ps aux|grep redis (查看包括 redis 字符串的进程),也可使用 pgrep redis -a。

注意:如果直接用 ps((Process Status))命令,会显示所有进程的状态,通常结合 grep 命令查看某进程的状态

kill -9 进程的pid: 杀死进程(-9 表示强制终止。)

先用 ps 查找进程,然后用 kill 杀掉

网络通信命令:

查看当前系统的网卡信息:ifconfig 查看与某台机器的连接情况:ping 查看当前系统的端口使用:netstat -an net-tools 和 iproute2 :net-tools起源于 BSD 的 TCP/IP 工具箱,后来成为老版本 LinuxLinux 中配置网络功能的工具。但自 2001 年起,Linux 社区已经对其停止维护。同时,一些 Linux 发行版比如 Arch Linux 和 CentOS/RHEL 7 则已经完全抛弃了 net-tools,只支持iproute2。linux ip 命令类似于 ifconfig,但功能更强大,旨在替代它。更多详情请阅读如何在 Linux 中使用 IP 命令和示例

shutdown: shutdown -h now: 指定现在立即关机;shutdown +5 "System will shutdown after 5 minutes":指定 5 分钟后关机,同时送出警告信息给登入用户。

reboot: reboot: 重开机。 reboot -w: 做个重开机的模拟(只有纪录并不会真的重开机)

lukaliou123 commented 2 years ago

9.find 和 三剑客(非常重要,常考!!!!)

https://www.cnblogs.com/sgh1023/p/10712803.html

三剑客和cat的区别

1.grep主要用于文本搜索,特别擅长按关键词进行搜索。 2.awk主要用于文本编辑,特别擅长按列进行操作,适合处理结构化的文本,如日志文件或系统状态输出。 3。sed是一个流编辑器,主要用于对文本流进行各种操作,包括插入、删除和替换等。 4.cat则主要用于查看文件内容或者合并文件,它的操作粒度比较大,适合处理整个文件或者大量数据。

9.1.find

find命令是一个用于搜索文件的命令。find命令的基本语法:find path [option] params

path为搜索文件的路径,可以是相对路径,也可以是绝对路径,还可以指定多个路径,如:find /var /home主要选项(option)如下1690805156356 主要参数(param)如下1690805185809 find /usr/bin -type f -atime +100 搜索在过去100天内未被使用过的执行文件 find /usr/bin -type f -mtime -10 搜索在10天内被创建或者修改过的文件

9.1.2.常用方法

1.精确查找文件:find ~ -name "spur.java" image

*2.模糊查找:find ~ -name "spur" image 其实有个-type可以用来筛选目录和文件,查找文件在上面的命令后面添加-type f,查找目录加-type d**。

忽略文件名大小写进行查找文件:find ~ iname "spurt" 查找文件并恢复文件权限:find -type f -exec chmod -R 644 {} \; 删除30天之前的日志文件:find -type f -name ".log" -mtime +30 -exec rm -rf {} \;

9.2.grep命令

9.2.1.grep简介

grep (缩写来自Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行,基本语法为grep [options] pattern [file]

如果没有提供文件名,则grep命令将会搜索标准输入

主要选项(option)如下表1690805564414 9.2.2.常用方法 1.在文件中搜索字符串,然后输出匹配的行。例如匹配文件spur.txt中的字符串for,并输出整行,要求带行号:grep -n for spur.txt image 2.计算匹配的行的数目:grep -c for spur.txt image 3.管道操作符“|”可将指令连接起来前一个指令的输出作为后一个指令的输入。注意:只有前一个命令正确输出的时候,才会处理后一个命令。例如:find ~ | grep for image

lukaliou123 commented 1 year ago

9.3.awk命令

9.3.1.awk简介 AWK是Unix系统下一个非常强大的文本处理工具。AWK其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。实际上 AWK 本身也可以作为一门计算机脚本语言。它允许创建简短的程序,这些程序可以读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表等其他的功能。

9.3.2.awk知识要点 语法:awk [options] 'cmd' file 一次读取一行文本,按输入分隔符进行切片,切成多个组成部分(一行为一个record,一列为一个field) 将切片直接保存在内建的变量中,$1,$2...($0表示行的全部) 支持对单个切片的判断,支持循环判断,默认分隔符为空格

9.3.3.常用方法 这里有个spur.txt的文件,文件内容如下: image 使用awk命令查看全部文件内容:awk '{print}' spur.txt print是awk的内置函数,用于打印出变量的值。 image 打印某一列或者某几列:$1为第1列,$2为第2列,...($0表示全部) 以打印第1列和第4列为例:awk '{print $1,$4}' spur.txt 分隔符的使用

awk认为“,”为系统默认分隔符,“ ”为直接连接起来。 image 例如第2个例子中awk '{print $1,$4}' spur.txt,使用的是默认分隔符,结果两列之间有空格隔开的。

本例子使用awk '{print $1 $4}' spur.txt,使用的是直接相连,结果两列之间没有空格隔开。 image

当然,也可以自定义分隔符。如果希望用“-”分割,可以这么写:awk '{print $1 "-" $4}' spur.txt

内置变量NR和NF的使用。

Awk定义一行为一个record,一列为一个field。NR为行数(number of record),NF为列数(number of field)

例如查找打印最后一列为2794的记录并打印:awk '$NF==2794{print $0}' spur.txt

image

BEGIN语句块和END语句块

BEGIN用于awk 开始处理输入文件中的文本之前执行初始化代码

END用于执行最终计算或打印应该出现在输出流结尾的摘要信息

继续以分隔符举例,我们可以使用BEGIN语句块来定义全局变量,FS为输入分隔符,OFS为输出分隔符。

提示:如果awk命令后面不加文件名,awk则认为下一行输入的内容为需要处理的内容

设置“,”为输入分隔符,“\t”为输出分隔符: image

正则表达式 CAL~G5(C3W)5Q@858PGM0SJ 例如需要匹配出马刺队所有的后卫球员,也就是正则匹配spur.txt中包含guard的记录:awk '/guard/{print $0}' spur.txt image 匹配第3列以“te”结尾,打印所有的列:awk '$3 ~ /(te)$/{print $0}' spur.txt image 注意:“~”表示模式开始。“//” 中是模式。

9.4.sed命令

9.4.1.sed简介 Sed的全名为Stream Editor流编辑器,适合用于对文本的行内容进行处理。基本语法为:sed [option] 'sed command' filename 9.4.2.常用的选项 1690809790719 常用的命令1690809813237

9.4.3.常用方法 这里我们设置一个场景,假设我们的replace.txt文件内容如下1690810066562

1.删除指定的行(删除1-3行为例):sed '1,3d' replace.txt VN6I{L~EU)}V)_ RY~$CC52

注意,这个命令只会在输出时删除这些行,不会真的修改文件

2.新增一行:sed '1a hello world' replace.txt 1690810161678 这个命令在第一行后面添加了"hello world"。

3.替换某行:sed '1c hello world' replace.txt S NIV8DU3)Q~GL6R7FXT9{D 这个命令将第一行替换为"hello world"。

4.把“Str”开头的行替换为“String”,仅输出到终端显示:sed 's/^Str/String/' replace.txt 1690810482411 这个命令将以"Str"开头的行替换为以"String"开头的行。

5.字符串替换,把replace.txt中全部的“Jack”替换为“me”,要求在文档中修改:sed -i 's/Jack/me/g' replace.txt 1690810632496

替换末尾的“.”为“;”:sed -i 's/.$/\;/' replace.java

lukaliou123 commented 1 year ago

10.一些面经收集的Linux命令

1.如何在一个文件里搜索一关键字(grep)如果想找第一个呢?找最后一个呢?(head和tail?) 如果你想要找到文件中第一次出现关键字的行,你可以使用grep配合head命令,如下: grep 'your_keyword' filename | head -n 1 这个命令会返回匹配关键字的行,但是head -n 1只会取第一个。

如果你想找到文件中最后一次出现关键字的行,你可以使用grep配合tail命令,如下:

grep 'your_keyword' filename | tail -n 1 这个命令会返回匹配关键字的行,但是tail -n 1只会取最后一个。

这种方法是最常见的,但如果文件非常大,可能会有性能问题,因为它会处理整个文件。如果你知道你要搜索的关键字在文件的开始或者结束部分,你可以只使用head或tail来提高性能。

lukaliou123 commented 1 year ago

11.面试常见的问题(查看文件内容)

https://www.jianshu.com/p/4bca8fe8a878

11.1.cat篇

(用于查看文本文件的内容,后接要查看的文件名,通常可用管道与more和less一起使用)

1.cat file1 从第一个字节开始正向查看文件的内容 2.tac file1 从最后一行开始反向查看一个文件的内容 3.cat -n file1 标示文件的行数 4.more file1 查看一个长文件的内容 5.head -n 2 file1 查看一个文件的前两行 6.tail -n 2 file1 查看一个文件的最后两行 7.tail -n +1000 file1 从1000行开始显示,显示1000行以后的 8.cat filename | head -n 3000 | tail -n +1000 显示1000行到3000行 首先,head -n 3000会选取文件的前3000行,然后,tail -n +1000会从这3000行中的第1000行开始输出,到最后一行,即输出第1000行到第3000行。 9.cat filename | tail -n +3000 | head -n 1000 从第3000行开始,显示1000(即显示3000~3999行) 首先,head -n 3000会选取文件的前3000行,然后,tail -n +1000会从这3000行中的第1000行开始输出,到最后一行,即输出第1000行到第3000行。 10.cat出文件内容,再输出到另一个文件上 cat file2.txt >> file1.txt ![Uploading 1690814847546.png…]()

12.文件的权限 - 使用 "+" 设置权限,使用 "-" 用于取消

1.chmod 命令 ls -lh 显示权限

chmod ugo+rwx directory1 设置目录的所有人(u)、群组(g)以及其他人(o)以读(r,4 )、写(w,2)和执行(x,1)的权限 chmod go-rwx directory1 删除群组(g)与其他人(o)对目录的读写执行权限

2. chown 命令 (改变文件的所有者) chown user1 file1 改变一个文件的所有人属性 chown -R user1 directory1 改变一个目录的所有人属性并同时改变改目录下所有文件的属性 chown user1:group1 file1 改变一个文件的所有人和群组属性

3.. chgrp 命令 (改变文件所属用户组

chgrp group1 file1 改变文件的群组

13.文本处理命令

1.grep(见前篇)

2. paste 命令 paste file1 file2 合并两个文件或两栏的内容 paste -d '+' file1 file2 合并两个文件或两栏的内容,中间用"+"区分

3 sort 命令 sort file1 file2 排序两个文件的内容 sort file1 file2 | uniq 取出两个文件的并集(重复的行只保留一份) sort file1 file2 | uniq -u 删除交集,留下其他的行 sort file1 file2 | uniq -d 取出两个文件的交集(只留下同时存在于两个文件中的文件)

4. comm 命令 comm -1 file1 file2 比较两个文件的内容只删除 'file1' 所包含的内容 comm -2 file1 file2 比较两个文件的内容只删除 'file2' 所包含的内容 comm -3 file1 file2 比较两个文件的内容只删除两个文件共有的部分

comm命令在 Linux 中是用来比较两个已排序文件的。这个命令按列输出,输出三列,每一列的意义分别是:

第一列:只在文件1中出现的行。 第二列:只在文件2中出现的行。 第三列:在文件1和文件2中都出现的行。 comm命令还接受三个参数,-1、-2和-3,这些参数可以用来取消指定列的输出。例如,comm -12 file1 file2将输出只在文件1和文件2中都出现的行。

比如,有两个已经排序的文件,file1和file2。内容如下: 1690814118194