AcWing-《Linux基础课》笔记
Linux基础课笔记
1. 常用文件管理命令
Linux系统文件不分盘存储
基本文件概念
-
路径:绝对路径开头是 /,相对路径则不是
-
. 当前目录, .. 上层目录
-
~/ : 家目录, / :根目录
常用命令及操作
-
Ctrl + C:结束命令或进程(命令清空并换行输入下一个命令,进程终止)
-
Ctrl + U:清空本行命令并重新输入当前行命令
-
Tab:补全命令,文件,只有一个选项直接补全,单击直接补全,有多个选项,双击列出所有选项
-
↑:弹出上一条命令
-
ls:查看当前文件夹所有内容
- -l, d表示是文件夹,4096是大小(字节)
- -hl,人性化输出 此处用k作单位输出(命令带h都有人性化输出的意思)
- -a,以.开头的文件都是隐藏文件,此命令输出当前目录所有的文件(包含隐藏文件)
- -A,不显示当前目录及上层目录,即显示文件中没有 "." 和 ". ."
-
pwd:查看当前在哪个目录下
-
cd(change directory):后跟文件路径,进入目标文件夹,不加任何参数则返回家目录,后跟 -,返回上一个待过的目录
-
cp:
- cp a/tmp.txt b(tmp2.txt),将a中tmp.txt文件复制到b中,(重命名为tmp2.txt)
- cp a b -r,将整个文件夹a,复制到文件夹b中
- cp a c -r,直接复制文件夹a重命名为c
-
mkdir:输入:mkdir + 文件路径,创建文件夹
- 连续创建文件夹,mkdir a/b/c -p(文件存在则不报错,不存在就创建)
- mkdir --help or -h,显示命令行帮助
-
rm:输入 rm file1 file2,删除多个文件, rm dir1 -r,删除dir1文件夹,rm -f 删除所有文件(包括受保护的)
-
touch:创建一个文件
-
mv:输入 mv XXX YYY,将XXX文件移动到YYY,XXX和YYY相同或更改文件名则产生重命名的效果
-
cat:查看文件里的内容
作业完成情况
2.tmux和vim
tmux
作用:分屏、进程不会因为断开链接而中断(在云端执行)
结构tmux->session->pane:一个tmux可以开多个session,一个session可以开多个window,一个window可以开多个pane,一个pane开一个shell
操作
-
新建一个session,其中包含一个window,window包含一个pane,一个pane打开了一个shell对话框
-
按Ctrl + a后松开再按%,将当前pane左右平分成两个pane(原版为Ctrl + b)
-
按Ctrl + a后松开再按",将当前pane上下平分成两个pane
-
Ctrl + d,关闭当前pane;如果当前window的所有pane都关闭则关闭window;如果session所有window都关闭,自动关闭session
-
鼠标点击可以选中目标pane
-
按Ctrl + a后松开再按方向键,可以切换到相邻的pane
-
鼠标拖动pane之间的分割线,可以调整分割线位置
-
按住Ctrl + a同时按方向键,也能调整分割线的位置
-
按Ctrl + a后松开再按z,可以全屏,再按一次取消全屏
-
按Ctrl + a后松开再按d,退出session
-
tmux a:打开刚才挂起的session
-
先按Ctrl + a松开再按s
- 方向键上下,选择session
- 方向键左,合上选项
- 方向键右,展开选项
-
先按Ctrl + a松开再按c,在当前session中创建一个新的window
-
先按Ctrl + a松开再按w,选择其他window,方法和第12的相同
-
先按Ctrl + a松开再按PageUp,翻阅当前pane内的内容
-
按住Shift进行选中,Ctrl + insert复制,Shift + insert粘贴
vim
功能
1. 命令行模式下的文本编辑器
2. 使用文件扩展名自动判断编程语言。支持代码缩进、代码高亮等功能
3. 使用方式:vim filename
1. 有该文件,则打开
2. 无该文件,则新建并打开这个文件
模式
一般命令模式
默认模式,命令输入方式:按不同字符,即可进行不同操作。可以复制、粘贴、删除文本等
编辑模式
一般命令模式里按 i,进入编辑模式
按下ESC退出编辑模式,进入一般命令模式
命令行模式
一般命令模式下按: / ?三个字母中的任意一个,会进入命令模式。命令行在最下面。
可以查找、替换、保存、退出、配置编辑器等。
操作
- i:进入编辑模式
- ESC:进入一般命令模式
- h 或 左箭头键:光标向左移动一个字符
- j 或 下箭头键:光标向下移动一个字符
- k 或 上箭头键:光标向上移动一个字符
- l 或 右箭头键:光标向右移动一个字符
- n<Space>:n表示数字,按下数字再按功空格,光标向右移动这一行的n个字符
- 0 或 Home:光标移动到本行开头
- $ 或 End:光标移动到本行末尾
- G:光标移动到最后一行
- :n 或 nG:其中n为数字,光标移动到第n行
- gg:光标移动到第一行 ,相当于1G
- n<Enter>:n为数字,光标向下移动n行
- /word:向光标之下寻找第一个值为word的字符串
- ?word:向光标之上寻找第一个值为word的字符串
- n:重复前一个查找操作
- N:反向重复前一个查找操作
- :n1,n2s/word1/word2/g:其中n1和n2位数字,在n1行与n2行之间寻找word1这个字符串,并将该字符串替换为word2
- :1,$s/word1/word2/g:将全文word1替换为word2
- 1,$s/word1/word2/gc:与前者相似,但在替换前需要用户确认
- v:选中文本
- d:删除选中的文本
- dd:删除当前行(剪切)
- y:复制选中的文本
- yy:复制当前行
- p:将复制的数据在光标的下一个位置粘贴
- u:撤销
- Ctrl + r:取消撤销
- Shift + >:将选中的文本整体向右移动
- Shift + <:将选中的文本整体向左移动
- :w:保存
- :w!:强制保存
- :q:退出
- :q!:强制退出
- :wq:保存并退出
- :set paste:设置成粘贴模式,取消代码自动缩进
- :set nopaste:取消粘贴模式,开启代码自动缩进
- :set nu:显示行号
- :set nonu:隐藏行号
- gg=G:将全文格式化
- :noh:关闭查找关键词高亮
- Ctrl + q:当vim卡死,可以取消当前执行的命令
异常处理
每次用vim编辑文件时,自动创建一个.finename.swp的临时文件
如果打开某个文件,该文件swp文件已经存在,会报错,此时有两种解决方法:
1. 找到正在打开该文件的程序,并退出
2. 直接删掉该swp文件即可
Shell
注释
# XXX 单行注释
:<<EOF(或其他字符)
多行注释1
多行注释2
多行注释3
EOF
变量
定义变量
变量首先被定义成字符串,再使用时会进行自动转换
name1='roshin' # 可以加单引号
name2="roshin" # 可以加双引号
name3=roshin # 可以不加引号
使用变量
$可以类比为取值符号
{}帮助识别变量的边界,否则第三个echo会输出nameyyds这个变量的值
name=roshin
echo $name # out:roshin
echo ${name} # out:roshin
echo ${name}yyds # out:roshinyyds
只读变量
关键字:readonly declare
name=roshin
readonly name
declare -r name
name=abc # 有报错,因为常量只读无法修改
删除变量
unset 删除变量
name=roshin
unset roshin
echo $name # out:(无输出)
变量类型
1.自定义变量(局部变量)子进程不能访问的变量
2.环境变量(全局变量) 子进程可以访问的变量
# 自定义变量换为环境变量
name=roshin
export name # 第一种方法
declare -x name # 第二种方法
# 环境变量变为自定义变量
declare +x name
字符串
字符串用不用单双引号都可以
单引号与双引号的区别:
单引号中的内容会原样输出、不会执行、不会去变量
双引号中的内容可以执行,可以取变量
获取字符串长度
name=roshin
echo ${#name} # out:6
提取子字符串
name=roshin
echo ${name:0:5} # out:roshi
默认变量
文件参数变量
执行shell脚本时,可以向脚本传递参数,$1是第一个参数,$2是第二个参数,$0是文件名(含路径)
echo $0
echo $1
echo $2
其他参数相关变量