Linux学习笔记

这篇博客详尽记录了Linux学习的要点,包括环境变量、路径、重定向符号等基础知识,以及bash、正则表达式、常用命令的使用。通过实例演示了grep、sed、awk等工具的高级操作,如文本格式化、过滤与替换。同时,介绍了快捷键、bash脚本创建以及cron、mailx等实用工具的使用方法。
摘要由CSDN通过智能技术生成

本文的主要内容是我学习Linux时记载下来的笔记。
我学习的主要资料包括:B站UP主 Python地中海 的教学视频 2周光速Linux入门,共189集,持续更新中,喜欢的就和我交个朋友吧!、阿里云开发者学堂、公众号 Linux就该这么学相关文章
感谢UP主的分享!


常见概念

环境变量

输出环境变量echo $PATH
注意:PATH一定要大写,这个变量是由一大堆的目录组成的,分隔符是“:”\

  • 小实验–定义一个变量
  1. 执行命令name=hello world
  2. 执行命令echo name

绝对路径与相对路径

  • 绝对路径
    从根目录开始寻找就是绝对路径写法/home/test/study/filetest
  • 相对路径
    只要不是从根目录开始寻找就是相对路径./study/filetest

重定向符号

重定向的意思是将数据传送到其他地方
例如:

  1. 将文件study1中的文本内容复制到文件study2,那么我们可以执行命令cat study1 > ./study2
    其中,>代表以覆盖的形式传送(也就是说,哪怕命令执行100次,该文件中仍然只有一版内容),>>以追加的形式传送(命令执行几次,文本内容就有几版)
  2. 将文件study1中的文本内容发送给cat命令读取,那么我们可以执行命令cat < study1
  3. 将文本内容拆分成多行,xargs -n 3 < study将study文件中的内容拆分成三个字符一行、
  4. 在指定文件中写入内容cat >> 指定文件名 << EOF 写入内容 EOF

常用快捷键

  • 取消当前操作 ctrl+c
  • 清空屏幕内容ctrl+l
  • 退出当前用户ctrl+d
  • 光标移动到行首ctrl+a
  • 光标移动到行尾ctrl+e
  • 删除光标到行首的内容 ctrl+u

bash

我们可以将 bash 看作是一个翻译官,一个运行在文本窗口中的命令解释器。

  • 小实验:
  1. 执行命令touch bash_test.sh创建脚本文件
  2. 执行命令vim bash_test.sh, 写入touch bash_test.py echo "print('hello world')" >> bash_test.py在脚本中写入命令去创建一个文本文件,并在此文件中写入内容
  3. 执行命令sh bash_test.sh让脚本文件生效
  4. 执行命令cat nash_test.sh检验脚本文件是否生效
    • 按顺序打印文件file1…file100,但排除文件编号为偶数的文件echo file{1..100..2}
    • 查询机器上的别名alias
    • 取消rm命令的别名unalias rm
    • 恢复刚刚删除的rm命令的别名alias rm=rm -i
    • 在用户执行rm命令的时候,打印提示语alias rm='echo 请谨慎使用rm命令'

正则表达式

正则表达式可应用于多种语言,但在Linux环境下普通命令不能使用正则表达式,可以使用grep/awk/sed

grep

  • 忽略大小写查找文本中的"root"内容grep -i "root" filename
  • 查找文本中的“root”内容,并显示行号grep -n "root" filename
  • 查找文本中的“root”内容,并统计文本中有多少行包含了该内容grep -c "root" filename
  • 查找文本中的空行,并显示空行所在的行号grep ^$ filename -n
  • 过滤空行,查找改文本中的有效信息grep ^$ filename -v
  • 过滤以#开头的注释行以及空行,输出过滤后的文本grep '^#' -v filename | grep -v '^$'
  • 忽略大小写,找出以“m”开头的所有行内容,并显示行号grep -in '^m' filename
  • 输出文本中以“.”结尾的行内容,并显示行号grep -in '\.$' filename
    注意:此处必须要加\是因为系统容易将查找的句号.和通配符.混淆,因此要加上转义字符\
  • passwd文件中找出所有以/bin/bash结尾的行,显示行号,且仅输出查找的bin/bash grep -no '/bin/bash$' /etc/passwd
    注意:在Linux中,所有的文件结尾都有一个$ ,可以执行cat -E filename检验。
  • passwd文件中查找含有一个字母f的行内容 grep -i '.f' /etc/passwd
  • 贪婪匹配:输出目标文本中所有行中以字母s结尾的内容grep '.*s' filename
  • 过滤并输出目标文件中所有包含数字的内容grep '[0-9]' filename
  • 过滤并输出目标文件中所有包含小写字母的内容grep '[a-z]' filename
  • 过滤并输出目标文件中所有包含大写字母的内容grep '[A-Z]' filename
  • 过滤目标文件中的数字0-5并输出余下的内容grep '[^0-5]' filename
  • 找出目标文件中的gd或者god,即在g与d之间,o要么不出现,要么只出现一次grep -E 'go?d filename'
  • 在目标文件夹中查找以"bat"为后缀名的文件,并筛选出文件名中只含a 或 e 的文件find 目标文件夹路径 -name ".bat" | grep -E "a|e"
  • 匹配目标文本中的’y’字符,最少2次,最多4次grep -E "y{2,4}" filename

sed

  • 打印目标文件的2-4行sed -n "2,3p" filename
  • 打印目标文件的第2行,及其后延续的3行sed -n "2,+3p" filename
  • 打印目标文件中含有Nobody的行sed -n "/Nobody/p" filename
  • 删除目标文件中含有Nobody的行sed -i "/Nobody/d" filename
  • 删除目标文件中14行之后的内容sed -i '14,$d' filename
    其中,执行sed命令删除文件内容时,系统删除的是缓存内容,要想真正的删除文件中的内容需要加-i参数。此条命令使用的是单引号。
  • 将目标文件中的内容进行文本替换sed -i "s/想要替换掉的内容/用来替换的内容/g" filename
  • 批量替换目标文件中的内容sed -e "s/想要替换掉的内容/用来替换的内容/g" -e "s/想要替换掉的内容/用来替换的内容/g" filename -i
  • 在目标文件第二行之前写入新内容sed -i "2a 新内容" filename
  • 在目标文件第二行之后写入新内容sed -i "2i 新内容" filename
  • 在目标文件第二行之后写入多行新内容,可以用分行符解决`sed -i “2i 新内容1\n新内容2\n新内容3 filename”
  • 在目标文件中为每一行添加一行分隔符sed -i "a --------------------" filename
  • 对目标文本去头尾ifconfig eth0 | sed "2p" -n | sed "s/^.*inet//" | sed "s/net.*$//" 或者ifconfig eth0 | sed -e "2s/^.*inet//" -n -e "2s/net.*$//p"

awk

文本格式化
  • 打印目标文件的第一列内容awk '{print $1}' filename
  • 打印目标文件的第一、第三列与第五列内容awk '{print $1,$3,$}' filename
  • 打印目标文件的第一列与第三列,并在每一列前分别添加“第一列”与“第三列”这样的自定义语句awk '{print "第一列",$1,"第三列",$3}' filename
  • 打印目标文件,并在每一行前添加引导语“此行的内容是:”awk '{print "此行的内容是:",$0}' filename
  • 打印目标文件的第五行awk 'NR==5' filename
  • 打印目标文件的第二行到第五行awk 'NR==2,NR==5' filename
  • 打印目标文件的第二行到第五行并显示行号awk 'NR==2,NR==6 {print NR, $0}' filename
  • 打印目标文件的第一行,倒数第二行与倒数第三行`awk ‘{print $1, $(NF-1), $(NF-2)}’ filename
  • 打印目标文件第二列的第二行到第六行内容awk 'NR==2,NR==6{print $2}' filename
分隔符
  • 以“:”为分隔符,取出/etc/passwd文件中的第一列awk -F ":" '{print $1}' /etc/passwd或者awk -v FS=":" '{print $1,$NF}' /etc/passwd
  • 设置制表符为自定义分割符,输出目标文本的第一列,第三列和第五列awk -F ":" -v OFS="\t" '{print $1,$3,$5}' filename
变量

对于awk命令来说,变量分为自定义变量与内置变量两种,内置变量的含义可以参照下表:

内置变量解释
FS输入字段分隔符,默认为空白字符
OFS输出字段分隔符,默认为空白字符
RS输入记录分隔符(输入换行符),指定输入时的换行符
ORS输出记录分隔符(输出换行符),输出时用指定符号代替换行符
NFNumber of Field,当前行的字段的个数(即当前行被分割成了几列),字段数量。不用添加$符号
NR行号,当前处理的文本行的行号。不用添加$符号
FNR各文件分别计数的行号
FILENAME当前文件名
ARGC命令行参数的个数
ARGV数组,保存的是命令行所给定的各参数
  • 以:为分隔符,计算并输出目标文件的总行数与总列数awk -F ":" '{print NR, NF}' filename
  • 自定义“:”为分行符,打印目标文件的内容与行号awk -v RS=":" '{print NR, $0}' filename
  • 自定义“—”为分隔符,打印目标文件的内容awk -v ORS="---" '{print NR, $0}' filename
  • 显示awk正在处理文件的名字并打印出目标文件的内容awk '{print FILENAME, $0}' filename
  • 自定义变量"ANSER=YES"awk -v ANSWER=YES 'BEGIN{print "Do you lile Linux", ANSWER}'
  • 引用shell变量
  1. 执行命令定义变量myname=Podman
  2. 执行命令检验自定义shell变量是否生效echo $myname
  3. 执行命令引用shell变量awk -v awk_name=$myname 'BEGIN{print awk_name}'
格式化输出
  • 将目标文本中的参数格式化输出awk 'BEGIN{printf "%d\n%d\n%d\n", 1,2,3}'
  • 将目标文本的内容按照“第一列:”这样的格式输出awk '{printf "第一列: %s 第二列:%s 第三列: %s\n", $1,$2,$3}' filename'
awk模式

常用命令

crond

cron:定时任务的名字
crond:定时任务进程名
crontab:管理定时任务命令

Linux系统启动后,cron软件便会启动,对应的进程名字叫做corn,默认是定期(每分钟检查一次)检查系统中是否由需要执行的任务计划,如果有,则按计划进行,就好比我们平时用户的闹钟。
corn定时任务默认最快的频率是每分钟执行一次,因此,若是需要设置以秒为单位的计划任务则需要编写Shell脚本。

  • 一分钟后在tmp路径下创建一个txt文件
    1. 执行命令at now + 1min设置定时时间
    2. 按提示执行命令touch /tmp/test_at.txt创建文件

mailx

MTA(mail Transport Agent)
MUA(Mail User Agent)

mkdir

  • 一次性创建多个文件夹 mkdir {文件名1,文件名2,文件名3,... }
  • 递归创建文件夹mkdir -p ./文件夹1/文件夹2/文件夹3/
  • 依次创建100个文件夹mkdir 文件名{1 .. 100}

touch

touch有两个用法:

  1. 创建普通文件
  2. 修改文件的时间
  • 创建普通文件touch 文件名
    一次性创建100个普通文件touch 文件名{1..100}或者touch 文件名{a..z}
  • 修改文件的时间
    • 将文件时间默认修改为当前的时间touch 文件名
    • 将文件时间修改为指定的时间
      1. 执行touch -t 指定时间 文件名命令修改时间
      2. 执行ls -l --full-time 查看是否修改成功

cp

  1. 复制普通文件cp 被复制文件名 复制文件名
  2. 复制普通文件,将副本重新命名,并将之放置在指定文件文件夹中cp 被复制文件 文件夹/新文件名
  3. 一次性复制多个文件夹放入指定文件夹中cp 被复制文件1 被复制文件2 指定文件夹
  4. 复制文件夹cp -r 被复制文件夹 复制的文件夹
    其中,-r参数指的是递归式复制文件夹。由于文件夹内有多个文件,所以普通的复制命令已经不能满足题目要求,我们必须加上-r参数才能复制成功。
  5. 复制文件,并保持所有属性不变cp -p 被复制文件 复制出的文件
  6. 复制软链接,并保持链接的属性不变cp -d 被复制软连接 复制出的软连接
  7. 复制文件以代替当前已存在的文件,覆盖之前出现提示cp -i 被复制文件 复制出的文件
    注:哪怕不添加参数-i,我们在执行复制命令时也会发现系统会显示询问提示,这是因为Linux系统自带Alias(别名)功能,而在此功能中,cp=cp -i

cat

cat -n 文件名 读取该文件内容时,标识出每一行的行号

chattr

  • 将文件的权限修改为,只能追加写入内容而不能使用vim写入内容,不能删除文件chattr +a filename
  • 将文件的权限修改为,操作者无权对其改名、删除、修改内容chttr -i filename
  • 列出文件的特殊权限lsattr filename
  • 去掉此权限chattr -a filename

chpasswd

批量修改用户密码

  1. 执行命令chpasswd并按下回车键,进入密码输入模式
  2. 以“username:passwd”的格式输入新密码
  3. 新密码输入完毕之后按 enterctrl+d完成密码修改过程

chmod

  • 更改文件权限chmod 777 filename
  • 一次性将文件属性修改为,所有属主与属组都只能读取chmod a=r filename或者chmod 444 filename

注意,如果执行的命令是chmod 5 filename那么,系统会将此处的5默认为005

chown

  • 更改文件的新属主chown newoner filename/dirname或者chown ownername filename
  • 修改文件的用户组chown :groupname filename
  • 一次性修改文件的属主与属组chown ownername:groupname filename
  • 递归修改某文件夹中所有文件的属主和属组chown -R ownername:groupname dirname/*

cut

gzip

  • 对当前的所有txt文件进行gzip压缩gzip ./*.txt
  • gzip不能直接压缩文件夹,需要打成tar包再压缩

groupadd

  • 创建用户组groupadd 群组名

history

  • 列出所有你使用过的命令history

last

  • 查询截至目前登录过系统的用户信息last

lastlog

  • 查询系统中所有用户最近一次登录信息lastlog

mv

  1. 把当前的文件移动到另一个文件夹mv 被移动的文件夹 目标文件夹
  2. 把多个文件移动到另一个文件夹,例如,把所有以study开头的文件名都移动到当前的test文件夹中去mv study* ./test/
  3. 重命名文件mv 原文件名 新文件名
  4. 设置一种机制,如果新文件名已经存在,那么在重命名覆盖前系统自动询问是否覆盖mv -i 原文件名 新文件名。但是,-i参数在这里其实是无关紧要的,因为mv 命令的别名就是mv -i。
  5. 强制性覆盖,系统不再询问,直接加-f参数即可

passwd

  • 修改用户密码passwd username
  • 查看用户密码cat /etc/shadow | grep -w username

rm

  1. 删除普通文件rm 删除文件名,执行此命令时会询问
  2. 删除多个文件,直接写入多个名字,空格分隔就好rm 文件1 文件2
  3. 删除文件夹rm -r 文件夹名字
  4. 删除空文件夹rm -d 空文件夹名字
  5. 强制删除当前目录下的所有文件和文件夹rm -rf ./*
    注意:执行此命令时,一定要仔细、严谨
  6. 显示删除的过程rm -rv 文件夹名

rpm

使用rpm命令安装软件时,需要解决该软件的各项依赖关系,因此在实际应用中我们更多地执行yum命令。

sort

su

  • 切换用户,保持环境变量不变su username
  • 切换用户,替换环境变量su - username

sudo

执行命令发现权限不够的时候,可以使用sudo切换到其他用户来获取权限,此时默认用户为root。但前提条件是已经在/etc/sudoers文件中写入了信息。

tar

tar命令可以在对多个文件进行压缩(将打完年间压缩成小文件)、打包(将一大堆文件或目录汇总成一个整体)、解包。

  • 对tmp下的所有内容打包,生成file1tar -cvf file1 /tmp/
  • 拆开file1tar -xvf file1 ./
  • 对当前目录下的所有文件进行打包并压缩tar -zcvf 打包的文件.tar.gz ./*
  • 从当前的压缩包中提取出指定文件tar -zxvf 压缩文件.tar.gz ./想要提取的文件名
  • 将压缩包解压至指定文件夹tar -zxvf 压缩文件 -C 指定的文件夹
  • 排除文件的解压缩方式tar -zxvf 压缩文件 --exclude 被排除的文件

umask

root用户创建文件的最大权限是666,创建文件夹的最大权限是777。执行umask命令可以查看遮罩码。

useradd

  • 创建普通用户useradd username #创建用户的同时,会创建一样的用户组
  • 查看刚刚创建的用户信息ls -l /home | grep username
  • 查看刚刚创建用户的bash.profile文件ls /home/username/ -a #bash.profile文件是用户个人环境配置文件,当我们需要给单个用户定义一些特别功能(如希望该用户一开机就能加载某些变量)的时候,我们可以再此文件中写入
  • 查看用户信息 id username
  • 新建用户并指定用户默认所属的群组useradd username -g groupname
  • 新建用户并指定用户所属的附加组useradd username -G groupname
  • 新建用户并指定用户的shelluseradd -s /bin/bash
  • 新建用户并指定用户的标签信息useradd -c 标签信息
  • 新建用户并修改用户的有效时间useradd -4 time
  • 新建用户并修改用户的登录目录useradd -d 指定目录

userdel

  • 强制删除用户userdel -f username
  • 删除与用户有关的文件userdel -r username

usermod

  • 修改现有用户的uidusermod -u 想要修改的uid

vim

vim快捷键

输入u,撤销上一步的操作
输入yy,复制光标所在行
输入4yy,复制4行内容
输入p,打印粘贴的内容
输入/,查找内容
输入C,删除光标所在位置到行尾的所有内容,且进入编辑模式
输入o,在当前所在行的下一行进行内容编辑
输入O,在当前行的上一行进行内容编辑
批量删除:

  1. 按住ctrl+v进入可视块模式
  2. 用上下左右命令,选择你操作的块
  3. 选中块后,输入d,删除块内容

vim常见问题

文件交换问题

w

查询当前已登录的用户.

wget

  1. 准备工作: 执行命令wget检测计算器上是否存在此命令。若机器显示没有,那么执行yum install wget -y下载安装该命令。

yum

yum是一种可自动化解决依赖关系的软件包管理器。与rpm相比,

  1. 安装wget命令yum install wget -y
  2. 按提示指定yum仓库的网站地址(可登录https://developer.aliyun.com/mirror/下载epel与CentOS-Base.repo)

who

功能与w一样,但显示结果更加详细

whoami

查询当前登录的用户

zip

压缩文件zip 压缩包名字 要压缩的文件
解压缩文件unzip 压缩包

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值