计算机教育中缺失的一课

计算机教育中缺失的一课

原博文(弃)

这篇博客不知道从何入手,但是指令实在是太多,暂时的计划是想到哪里写哪里。

文件的一些操作
对文件进行复制:cp path/to/a path/to/b

对文件进行删除:rm /path/to/a

对文件夹进行删除:rm -rf /path/to/folder 这里的r表示删除子目录下的文件,f表示强制删除

对文件进行移动:mv /path/to/a/test.mp4 /path/to/b/haha.flv 这里是可以直接进行文件名和后缀的修改

显示路径下的文件:ls /path/to/a

查看当前文件夹下文件个数:ls | wc -l

linux的一些操作
查看内核版本:cat /proc/version

查看系统信息:lsb_release -a 有时候不起作用

查看位数信息:uname -a

查看系统版本:cat /etc/issue

查看指定端口使用情况:lsof -i:8080

查看某一个程序信息: ps -elf | grep ***

杀死某一个进程:kill -9 num

其他
脚本启动 bash /home/hah/test.sh

查看配置信息
查看gpu信息 lspci | grep -i vga

查看N卡详细信息 nvidia-smi

查看cpu信息 lscpu

下载文件
curl http://xxxxxxx

wget http://xxxxxxx

git clone https://git.xxxxxxxxxx/xxxxx.git xxxx


博客原文如上,计划在此博客中继续更新”计算机教育中缺失的一课“,方便学习复习。
mit课程链接
对应的中文站


$1 概述和SHELL

2022.04.10更新
课程主页

涉及到的一些指令

date #显示日期
echo hello #显示hello
echo $PATH #显示路径?显示谁的路径?
which echo #查找echo的位置
/bin/echo $PATH #显示路径?
pwd #打印当前路径 print work directory
cd /home #切换到home目录
cd ./ #仍在当前路径
cd .. #回到上级目录
cd /home/test/ #切换到指定路径
ls #查看当前目录下有哪些文件
man ls #更多ls指令使用man查看手册
ls -l /home #详细列出当前目录下的文件/文件夹信息
chmod #用于修改权限
# 有两种方式,chmod +/- 数字 和chmod +/- 字母
man chmod #查看详细的chmod手册

#重定向文件
echo hello > hello.txt
cat < hello.txt >hello2.txt
echo test >> hello2.txt

# 查看系统/硬件信息
#略
  • 按照上述步骤练习
  • 完成课后练习
  • 从”习题解答“中获取参考答案
  • 自行阅读出现的相关手册(ls /chmod / touch等)

本节完


$2 SHELL工具和脚本

计划是先跳过这节课程,先看vim相关
2022.04.11更新
课程主页
这部分的中文翻译读起来有些拗口,推荐更好的bash脚本教程,快速浏览以上手;
其他部分==SHELL工具部分建议仔细阅读
w3school

SHELL脚本体验

如果阅读了之前课程的wiki参考链接,相信会对#!(shebang)有一个大概的印象,这个可以被用来设置解释器(可以设置bash,当然也可以设置python等解释器),下面就从这一行开始。

  • touch foo.sh
  • vim foo.sh
    全程使用vim
#!/bin/bash/
foo=bar #变量赋值
echo $foo # 调用方式:$变量名
echo "$foo" #注意是双引号,进行转义
echo '$foo' #注意是单引号,原义字符串

运行方式:** ./foo.sh ** (运行之前建议思考可能的输出结果)
可能会出现一些问题
在这里插入图片描述
这部分已经有了答案,建议回到前面的课程。
运行后,可能会出现一些意料之外的错误,从提示出发,用vim来修改。
在这里插入图片描述

SHELL脚本编写函数

vim foo.sh

#!/bin/bash
foo=bar
echo $foo
echo '$foo'
echo "$foo"
# 函数定义
mcd(){
        man sudo>haha.txt
        cp haha.txt haha.bak
}

mcd 	#调用

官方的例子(注意函数的调用方式)

mcd () {
    mkdir -p "$1"
    cd "$1"
}

mcd uuuu	#uuuu作为第一个参数传入了函数

试着执行一下,是否有理想的结果
在这里插入图片描述

一些关系符

在这里插入图片描述
测试代码
在这里插入图片描述
尝试注释每一行

#!/bin/bash

# 尝试将所有可替换的英文变成中文
# 尝试注释

# 显示程序运行世界
echo "Starting program at $(date)" # date会被替换成日期和时间

# $0脚本名 	 $#参数个数 	 $$ 进程识别码
echo "Running program $0 with $# arguments with pid $$"


# 遍历参数,查找foobar
# grep返回值为0,表明匹配到了指定字符串
# grep返回值为1,表明未匹配到
for file in "$@"; do
    grep foobar "$file" > /dev/null 2> /dev/null
    # 如果模式没有找到,则grep退出状态为 1
    # 我们将标准输出流和标准错误流重定向到Null,因为我们并不关心这些信息
    # $?前一个命令的返回值
    # -ne 是什么意思?
    if [[ $? -ne 0 ]]; then
        echo "File $file does not have any foobar, adding one"
        echo "# foobar" >> "$file"	#写入文件
    fi
done

问题解释:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
shellcheck:sh/bash脚本错误检查
使用shebang来配置脚本环境

#!/usr/local/bin/python

注意
在这里插入图片描述

SHELL工具

查看命令如何使用

假设好奇sudo的具体用法

  1. 求助stackoverflow(不推荐)
  2. sudo -h(查看帮助)
  3. man sudo(查看手册,man = manual)
  4. 使用速查网站
查找文件

所有的unix和Linux发行版都提供了一个find工具,它会递归搜索符合条件的文件。下面是一些示例用法


# 查找所有名称为src的文件夹
find . -name src -type d

# 查找所有文件夹路径中包含test的python文件
find . -path '*/test/*.py' -type f

# 查找前一天修改的所有文件
find . -mtime -1

# 查找所有大小在500k至10M的tar.gz文件
find . -size +500k -size -10M -name '*.tar.gz'

# 删除全部扩展名为.tmp 的文件
find . -name '*.tmp' -exec rm {} \;

# 查找全部的 PNG 文件并将其转换为 JPG
find . -name '*.png' -exec convert {} {}.jpg \;

# 查找满足模式PATTERN的文件
find -name '*PATTERN*'

# 不区分大小写的查找
find -iname ...

find的一些替换程序
fd 和locate(有兴趣的看原文)

查找代码
# 获取查找结果的上下文
grep -C -NUM
grep -C 5

# 匹配结果反选
grep -v		#小写v
# 递归进入子目录并搜索所有文本文件
grep -R

grep的一些替代品(有兴趣看原文)
ack
ag
rg

查找SHELL历史命令
# 查找历史命令中含有ls的行
history | grep ls

# ctrl+R后输入子串继续宁回溯搜索

# 方向键可以定位到不久之前的输入

在这里插入图片描述

文件夹导航

alias给命令一个别名
ln -s创建软链接
tree查看目录结构

有兴趣自行bing/google查找教程

课后练习
  • 学会使用–help,学会阅读手册
  • 学会简单函数的编写和参数调用
  • 如何更好理解和使用shell的命令
  • find有更深入的用法,这里只做引子

$3 vim编辑器

2022.04.11更新
课程主页

这几句话是有必要的

  • 认真阅读教程
  • 坚持使用vim来完成编辑工作
  • 随时查阅某个可能的更方便的操作

原课程中说明了编辑器的选择 、vim的哲学等,这里直接跳过

编辑模式

  • 正常模式/一般模式,移动光标进行修改
  • 插入模式,用于插入文本
  • 替换模式,用于替换文本
  • 可视化模式(一般,行,块),选中文本块
  • 命令模式

可以在左下角看到当前模式,一般模式和插入模式是接触最多的。
常用模式:

  • 一般模式
  • 插入模式
  • 命令模式
    下面将从上述顺序介绍
一般模式

在这里,我们需要得到一个文档来进行练习,最好的办法是使用第一节课程中的方法来生成一个txt文档,来用于练习。

# 使用下述指令来生成文档
man sudo > test.txt
# 这里可以写入任何感兴趣的手册,如man chmod, man ls等

下面开始进行测试
在这里插入图片描述
在这里插入图片描述
数字和字符的结合可以有不同的效果
在这里插入图片描述
请发挥想象力,在test.txt文档中,任意修改,来深入理解和掌握其中的vim命令。

编辑模式

如何进入编辑模式
一共有6种方式

  • i
  • I
  • a
  • A
  • o
  • O
    请自行尝试,总结其作用
    编辑模式中,和常规的Windows下文档编辑并无两样。
命令模式

在这里插入图片描述

# 常用的一些
:q
:wq
:q!
:wq!
# 其他的
:set nu
:set nonu
# ....

几个小建议

  • 用了才知道其作用,书上得来终觉浅
  • 多用
  • 多尝试
  • 从易到难
  • 有一个念头,”一定有更快捷的方式“

本节完


$4 数据整理

2022.04.12更新
课程链接
在操作中,很多时候需要把一些格式存储的数据转换为另一种格式。广义上来说,像"ls -l | grep drwx"这样的操作也是一种转换行为。更常见的包括,日志的整理,错误信息的快速定位等。

文章举了一个系统日志的例子,以用来查看用户登录信息,因为我这里忘记了root密码,所以我用下面的指令。

journalctl | grep sshd  #查看journalctl输出信息中有sshd的行

# 因为这是一台共享主机,所以非常多的人登录,行数多到爆
# 从需求中学习:假设现在我想看到有哪些人登录,他们的ip是什么,我应该如何做?

如何提取用户名和对应的ip信息在这里插入图片描述

正则表达式

首先提取所在行,其公共字符为”Invalid user"

# less 分页显示
journalctl | grep sshd | grep "Invalid user" | less
# 或者是下面这句,-i不区分大小写
journalctl | grep sshd | grep -i "invalid user"
# 可能会有一些包含Invalid user的行出现,但是并不是所需要的,我们需要用通配符来进行更加精准的匹配
# sed的正则表达式使用,通过下面的网址进行简单学习,然后重新看这一行
| sed -E 's/.*Disconnected from (invalid |authenticating )?user .* [^ ]+ port [0-9]+( \[preauth\])?$//'

regexone:快速学习
regex101:快速检查

原文给了一些其他的正则表达式任务,如email匹配等,感兴趣的可以看link

awk

首先学习了其他的一些指令,如sort/tail /paste等
然后引入了awk。
可以使用man对这些指令进行深入学习。

journalctl | grep Invalid |grep user |grep sshd| grep from|sed -E 's/.+Invalid user? .* from [^ ]+ port [0-9] ? //' | sort | uniq -c |sort -nk1,1 |tail -n10 | awk {'print $9'}

在这里插入图片描述
在这里插入图片描述
深入学习awk点这里

其他的一些指令

指令名用途
bcLinux中用作计算器
gzip常用,自查
gnuplot绘制图表

习题

指令太多,没人能全部记住,掌握常用的一些即可,要有阅读manual的能力

本节完


  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值