shell 命令笔记(Linux系统常见命令和Git使用,正在更新中)

引言:研究生涯必不可少的能力之一就是使用Linux语言和Git的使用,很早就想系统学习这方面相关知识,奈何时间安排不当,加上自己的懒惰,每次都是现用现翻,没有形成固定的框架和理解,导致这次用了下次忘。但是太深的课程不适合我这样的小白投入精力看,太细的讲解有的也用不到。此种情况下,我向身边大佬请教,找到了一些很适合研究生学习的资料,并狠下心研究,把相关笔记心得记录下来,笔记中多会记录一些常用命令,希望帮到更多和我一样这方面不大行的难兄难(弟),啊不是,研友盆友。(本教程默认本地环境为MAC OS)

再次声明:本教程适合Linux似懂非懂的小白,不适合中高级学习者。也希望各位大佬看到愿意提出宝贵意见,谢谢!

The Shell

1.shell 是什么?

如今的计算机有着多种多样的交互接口让我们可以进行指令的的输入,从图像用户界面(GUI),语音输入甚至是 AR/VR 都已经无处不在。 然而在计算机的早期并没有图形界面,人们只能通过命令行来控制计算机。

由于用户不能直接接触内核,需要另外再开发一个程序,让用户直接使用。其作用就是接收用户的操作(点击图标、输入命令),并进行简单的处理,然后再传递给内核,这样用户就能间接地使用操作系统内核了。

用户界面和命令行就是这个另外开发的程序,就是这层“代理”。在Linux下,这个命令行程序叫做 Shell。

Shell 是一个应用程序,它连接了用户和 Linux 内核,让用户能够更加高效、安全、低成本地使用 Linux 内核,这就是 Shell 的本质。

2.shell 的一些基本命令

日期

$ date
2022年 3月22日 星期二 21时39分58秒 CST

目录问题

shell 中的路径是一组被分割的目录,在 Linux 和 macOS 上使用 / 分割,而在Windows上是 \。

  • 路径 / 代表的是系统的根目录,所有的文件夹都包括在这个路径之下,在Windows上每个盘都有一个根目录(例如: C:\)。
  • 如果某个路径以 / 开头,那么它是一个绝对路径,其他的都是相对路径
    • 相对路径是指相对于当前工作目录的路径
    • 当前工作目录可以使用 pwd 命令来获取。
    • 打开新目录需要使用 cd 命令
    • 在路径中,"."表示的是当前目录,而 “. .” 表示上级目录
$ ls
Applications   Users        cores        home 
$ cd ./Users
$ pwd
/Users
$ ls
Applications   Users        cores        home 
$ cd Users
$ pwd
/Users
# 此时,cd ./Users和cd Users 一样

-h 或 --help 标记可以打印帮助信息,-l 参数可以打印出更加详细地列出目录下文件或文件夹的信息。首先,“drwxrwxrwt……” 那行第一个字符 d 表示 root 是一个目录。然后接下来的九个字符,每三个字符构成一组。 (rwx). 它们分别代表了文件所有者(sugege),用户组(users) 以及其他所有人具有的权限。其中 - 表示该用户不具备相应的权限。

  • w: 修改,添加或删除文件夹中的文件
  • x:可执行,为了进入某个文件夹,用户需要具备该文件夹以及其父文件夹的“搜索”权限
  • r:读权限
$ ls -l ./Users
total 0
drwxrwxrwt   5 root      wheel   160  3 17  2021 Shared
drwxr-xr-x+ 61 sugege  staff  1952  3 22 22:01 suxinyan

注意,这里root根用户几乎不受任何限制,他可以创建、读取、更新和删除系统中的任何文件。 通常在我们并不会以根用户的身份直接登录系统,因为这样可能会因为某些错误的操作而破坏系统。 取而代之的是我们会在需要的时候使用 sudo 命令[1]。

输入流和输出流

当程序尝试读取信息时,它们会从输入流中进行读取,当程序打印信息时,它们会将信息输出到输出流中。通常,键盘作为输入,显示器作为输出。

3.shell 工具和脚本

bash

本节主要介绍shell中最流行的 bash 脚本,要注意使用的时候和常用编程语言的区别之一:在shell脚本中使用空格会起到分割参数的作用,有时候可能会造成混淆,请务必多加检查。

Bash中的字符串通过’ 和 "分隔符来定义,但是它们的含义并不相同。以’定义的字符串为原义字符串,其中的变量不会被转义,而 "定义的字符串会将变量值进行替换。

$ suge=girl
$ echo '$suge'
$suge
$ echo "$suge"
girl

bash也支持if, case, whilefor 这些控制流关键字。同样地, bash 也支持函数,它可以接受参数并基于参数进行操作。通常$1 是脚本的第一个参数。bash使用了很多特殊的变量来表示参数、错误代码和相关变量。下面是列举:

  • $0 - 脚本名
  • $1$9 - 脚本的参数。 $1 是第一个参数,依此类推
  • $@ - 所有参数
  • $# - 参数个数
  • $? - 前一个命令的返回值
  • $$ - 当前脚本的进程识别码

另一个常见的模式是以变量的形式获取一个命令的输出,这可以通过 命令替换(command substitution)实现。

$ echo "Starting program at $(date)" # date会被替换成日期和时间

常见 shell 工具(find、grep等命令)

find (语法比较难以记忆)
总结比较好的博文: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'

grep: 查找代码

  • -C :获取查找结果的上下文(Context)
  • -A:显示行数
  • -v:输出不匹配的结果
  • -R 会递归地进入子目录并搜索所有的文本文件。
$ grep "被查找的字符串" 文件名
#从文件内容查找匹配指定字符串的行
$ grep –i "被查找的字符串" 文件名
#查找时不区分大小写
$ grep -c "type" main.py 
#查找匹配的行数(c小写)
$ grep -C 5 "config.K_Fold=kfold" main.py 
#输出匹配结果前后五行。

Vim 编辑器

Vim有着悠久历史;它始于1976年的Vi编辑器,到现在还在不断开发中。即使你最后使用其他编辑器,Vim也值得学习。本节仅介绍Vim基础知识。

操作模式

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

在默认设置下,Vim会在左下角显示当前的模式。 按下 <ESC> (退出键) 从任何其他模式返回正常模式。
在正常模式:

  • 键入 i 进入插入模式

  • R 进入替换模式

  • 可视化模式
    v 进入可视(一般)模式
    V 进入可视(行)模式,
    <C-v> (Ctrl-V, 有时也写作 ^V)进入可视(块)模式,

  • : 进入命令模式
    在键入 : 后,你的光标会立即跳到屏幕下方的命令行。 这个模式有很多功能,包括打开,保存,关闭文件,以及退出 Vim。
    :q 退出(关闭窗口)
    :w 保存(写)
    :wq 保存然后退出
    :e {文件名} 打开要编辑的文件
    :ls 显示打开的缓存
    :help {标题} 打开帮助文档
    :help :w 打开 :w 命令的帮助文档
    :help w 打开 w 移动的帮助文档

  • 正常模式可使用命令

    • 基本移动: hjkl (左, 下, 上, 右)
    • 计数移动:用一个计数来结合“名词”和“动词”会执行指定操作若干次
      3w 向前移动三个词
      5j 向下移动5行
      7dw 删除光标所在词及后方共7个词
    • 词: w (下一个词), b (词初), e (词尾)
    • 行: 0 (行初), $ (行尾)
    • 屏幕: H (屏幕首行), M (屏幕中间), L (屏幕底部)
    • 翻页: Ctrl-u (上翻), Ctrl-d (下翻)
    • 文件: gg (文件头), G (文件尾)
    • 行数: :{行数}<CR> 或者 {行数}G ({行数}为行数)
    • 查找: f{字符}, t{字符}, F{字符}, T{字符}
      • 查找到光标 向前/向后在本行的{字符}
      • ; 用于导航匹配
    • 全文搜索: /{正则表达式}, 然后回车开始全文查找,n / N 用于前后导航匹配,r+字符会进行光标当前位置字符替换
    • 编辑
      • O / o 在之上/之下插入行
      • d{移动命令} 删除 {移动命令}
        • 例如, dw 删除光标所在词, d$ 删除到行尾, d0 删除到行头。
      • c{移动命令} 改变 {移动命令}
        • 例如, cw 改变词,比如 d{移动命令} 再 i
      • x 删除字符(等同于 dl)
      • s 替换字符(等同于 xi)
      • ea 在光标一词后插入
      • 可视化模式 + 操作
        • 选中文字, d 删除 或者 c 改变
      • u 撤销, 重做
      • y 复制 / “yank” (其他一些命令比如 d 也会复制)
      • p 粘贴

正则表达式

正则表达式通常以(尽管并不总是) /开始和结束。常见模式:

  • . 除换行符之外的”任意单个字符”
  • * 匹配前面字符零次或多次
  • + 匹配前面字符一次或多次
  • [abc] 匹配 a, b 和 c 中的任意一个
  • (RX1|RX2) 任何能够匹配RX1 或 RX2的结果
  • ^ 行首
    $ 行尾

进阶版命令

有能力者建议自行研究:

sed, awk,sort,

shell环境配置和进程

常见问题汇总

Q1:vi 和 vim是一个东西吗?
A1:不是!如果配置vim的一些环境,要注意对vi是不适用的,介意的人可以(用alias)处理一下

Q2:配置路径和一些环境变量后,保存了脚本文件再次重启服务器不生效怎么办?
A2:输入source ~/.bashrc or source ~/.zshrc ,source:使当前shell读入路径为filepath的shell文件并依次执行文件中的所有语句,通常用于重新执行刚修改的初始化文件,使之立即生效

Q3: 第一次登录服务器发现Tab键失效、上下左右箭头出现乱码
A3:这个我一开始看CSDN各种教程,说的都不是主要原因,不能解决问题!!!!!!,believe me,输入这条命令,解决百分之80问题(改bash还是zsh看自己喜好)

chsh  -s $(which bash)

Note:
不管何种情况,请绝对信任Linux系统,出现环境问题,第一时间看配置文件或者日志文件,只要不是天大的问题,都可以解决。

参考资料

[1] MIT shell 课程
[2] GIt 飞行笔记
[3] 跟廖雪峰学Git
[4] Git book
[5]shell 开胃菜

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值