分享一些学习bash时的笔记
这不算是一份教程,只是浅记录一下我认为容易忘记的东西,并且分享一些好用的技巧
所以这篇博客写的没有什么逻辑...
rm指令
选项:
r
:递归
f
:强制
i
:每次删的时候问一下,例如:
这个指令很危险,删了基本上没法恢复(我曾经就因为把mv打成rm而误删了一堆文件(好在不太重要))
我想,仿照windows的做法,在某个地方建一个rubbish文件夹,要删除的时候mv
{{filename}} rubbish
为了方便操作,我改了一下home/.bashrc
文件(后面讲),加了这么几行:
1
2
3
4
5
6
7
8function del ()
{
d=`date +%Y-%m-%d`
if [ ! -e "/home/Legend/rubbish/$d" ] ;then
mkdir "/home/Legend/rubbish/$d"
fi
mv $1 "/home/Legend/rubbish/$d"
}
这样,以后使用命令del
filename
就可以直接把这个文件移动到rubbish里面啦(并且是按日期分类的)
例如(忽略2022那个文件夹,我乱建的):
(这个不太好用,本文后面还有一个更好用的版本)
diff
diff 用于比较文件之间的差异
-b 不检查空格
-B 不检查空行
-q 仅显示有无差异
如果两个文件完全相同,什么都不会输出(什么都不输出就,怪怪的)
如果两个文件不同,会以这种方式显示:
(有点像git合并冲突时生成的东西)
用于文本处理的指令
sed
sed [选项] 命令 输入文本
1 | 选项(常用): |
常用例子
1 | sed -n "2,4P" filename #输出文件的[2,4)行 |
awk
例子:
1 | awk -F: '{print $2}' txt |
.bashrc
.bashrc相当于一个配置文件,存在于每个用户的家目录中,每次用户登录或者开启一个新的进程(使用命令bash
)都会载入.bashrc文件。
.bashrc文件里面的内容其实就是bash脚本,我的理解是,每次开启一个新的进程的时候都会执行一遍这个脚本。
所以你在这个脚本里面定义的全局变量都会变成你的用户变量,在这个脚本里面写的东西也都会运行一遍。
怎么验证呢?
我在.bashrc最开始写了一句
1 echo "Drink some water please."然后每开启一个新的进程就会看到这个:
修改.bashrc文件的主要用处有以下几点:
设置全局变量。如果你想配置PATH,就可以在这个文件里修改
设置快捷指令。
正如前面我自己定义的快捷指令
del
,.bashrc文件里面的函数可以被直接当做指令运行alias为已有指令设置别名,例如
1
2alias ll='ls -alF'
alias la='ls -A'设置提示符
提示符就是这一堆东西:
(不过我觉得这个看起来没啥用,不过这篇文章挺花哨,先mark
tips:在修改完.bashrc后新建一个进程或者重新打开终端才会起作用,或者直接
bash ~/.bashrc
用windows的子系统访问c盘
如果你和我一样装了windows的ubuntu子系统,想用它访问c盘的文件应该怎么办呢?
首先,你应该知道,可以在根目录下的/mnt/
里面访问windows的c盘:
据说这是一种叫“挂载”的技术,
/mnt/
文件夹也与这个有关,但是我现在还没有学到这,先走马观花
但是这样很不方便。
ln指令
不是对数函数
这里要学习一个指令:ln
用于建立链接,也就类似于Windows的快捷方式
用法:ln [OPTION]... TARGET LINK_NAME
例如
1 | ln -s test linkOfTest |
我们可以用ln指令在方便访问的地方建立一个c盘的链接,访问的时候直接cd
./linkname
,方方便便。
当然也可以建立一些常用文件夹的链接。
另一些奇怪的散装知识
"`"反引号表示先执行反引号里面的内容,然后把这个指令执行的结果传递到前面的指令(有点类似于管道?)
一个奇怪的例子:
怎么解释呢?
在bash脚本中
((a++))表示a自增1,例如这样:
五颜六色的输出
很炫酷,先mark一下
其实前面加的
del
指令还可以改一下,让他支持一次性删除多个文件不说了,放代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15function del ()
{
y=`date +%Y`
m=`date +%Y/%m`
d=`date +%Y/%m/%d`
dir="/home/Legend/rubbish/"
if [ ! -e "$dir$y" ]; then mkdir "$dir$y"; fi
if [ ! -e "$dir$m" ]; then mkdir "$dir$m"; fi
if [ ! -e "$dir$d" ]; then mkdir "$dir$d"; fi
for i in $*
do
mv $i "$dir$d"
echo "Successfully deleted $i"
done
}这样就人性化多了!
试了一下,完美!
甚至可以这样:
缺点是,如果删除同名文件,会将垃圾箱里面原来的覆盖掉
指令忘了怎么办
--help
我觉得这个挺好用的,会列出来这个指令的基本功能,以及各个选项的作用,简单清晰易懂,适合速查,强烈推荐
tldr
'too long don't read'的缩写
这更像一个教程,就是给你举一些常用的例子,告诉你怎么写
还是彩色的,会让你的眼前一抹绿(要是有中文版就好了TAT
man
狗都不看
上网查(误
求助大佬(误
[后记]
bash这个玩意,指令真的记不住
只有熟能生巧,但是windows这么好用,谁没事用Linux啊
除去os课不讲,我觉得这玩意的最大优势在于装逼批处理
大概是我现在还没有习惯于命令行并且不熟练才会觉得很难受吧