Linux快速入门
本文是 Linux 命令行和一些小工具的笔记,方便忘记了回顾用
Linux基本命令
目录操作
pwd:present workspace direction | 当前的位置cd:跳转目录cd ~:跳转到全局变量HOME指向的目录cd ..:返回上一级cd test:进入当前目录下的test文件夹
ls:列出当前目录内的文件和文件夹ls -l:将会显示文件和文件夹的详细信息,其中每行前10个字符的形式为drwxrwxrwx,第一个字符表示类型:文件夹为d,文件为-;后面每三个为一组,分别代表u(作者),g(小组) 和o(其他)这三类人群的读r、写w和运行x的权限
chmod o-rw filename.txt:去除其他(o)这类人的读(r)写(w)权限chmod u+x filename.txt:增加作者(u)这类人的运行(x)权限
这里也可以使用二进制更改,如
chmod 444 filename.txt会使得filename.txt文件的权限变为r--r--r--
文件操作
cp filename.txt target.txt:将filename.txt复制一份并命名为target.txtmkdir dirname:创建一个名为dirname的文件夹rmdir:删除空文件夹rm:删除文件(rm -rf dirname可以实现删除有内容的文件夹,r代表向下递归,f代表强制删除)
Linux没有回收站,需要谨慎使用rm 命令,尤其涉及到 rm -rf
touch filename.txt:创建名为filename.txt的文件mv filename.txt tragetname.txt/tragerdir:将文件重命名为tragetname.txt或者把文件移动到tragetdir目录下cat filename.txt:在终端输出filename.txt的文件内容less filename.txt:在终端输出filename.txt的文件内容,不过一次加载一面,按Q退出diff filename1.txt filename2.txt:输出filename1.txt和filename2.txt中不同的地方head filename.txt -n 6:查看filename.txt文件前 6 行的内容tail filename.txt -n6:查看filename.txt文件后 6 行的内容wc filename.txt:查看filename.txt的行数(-l)、单词书(-w)和字符数(-c)find:文件查找指令find . -name filename.txt -type -d:在当前目录下查找名字为filename.txt的文件夹(type -f表示文件)find / -size +10M:找到所有文件大小大于 10M 的文件find / -ctime -1:找到所有修改时间在一天内的文件 (可替换为-cmin表示1min之内修改,+1表示一天/min前修改的文件,c表示更改、a表示读)-ctime:文件iNode信息发生改变-mtime:文件内容发生改变-atime:文件查看
find . -maxdepth 3 -name filename.txt:找到当前文件夹下文件层数最多为3文件名称为filename的文件
正则表达式
grep Text filename.txt:在filename.txt中查找Text,会把所有存在的输出(所在的那一行打印)grep TT* filename.txt:首字母是T,随后跟着0~n个T所在的那一行grep ^Tex filename.txt:以Tex开头的那一行grep T.xt filename.txt:存在T任意字母xt的那一行,如Text和Taxtgrep [Tt]ex[A-Za-z] filename.txt:包含首字母是T或t,中间是ex,最后一个是任意字母序列的那一行grep -n Text filename.txt:输出行号-r:递归子路径-A 2:输出找到的那一行和它下面2行(After)-B 2:输出找到的那一行和它上面2行(Before)
其他
date:当前日期时间cal:当月日历cal 2020cal 1 2020
grep tex filename.txt | wc:|表示命令的组合,把|前面得出的结果传递给这个符号后面的命令,这个例子的输出是统计filename.txt文件里包含tex序列的行数、单词书和字符数
Shell脚本
- Linux的脚本文件以
.sh结尾,使用sh test.sh运行(当有 数组 时,使用bash test.sh) >和<:重定向命令,把输出打到文件或者把文件内容当成输入a=10:给变量a赋值为 10,注意=两端不能有空格$a:使用变量aecho $a Text:输出的命令,相当于cout << a << " Text";read a输入保存到变量ac='expr $a + $b':计算表达式,其中'是键盘上~对应的飘号,注意运算符两边要有空格*,(,)号无法当作乘号,应该在前面加上转义符号\判断
1
2
3
4
5
6if [ $a -gt $b ]
then
echo $a
else
echo $b
fi- 对于数字,用
-gt,-lt,-gq,le,-eq,-ne表示 $\gt,\lt,\ge,\le,=,\ne$ - 对于字符串,可以直接使用
>,=,<
- 对于数字,用
循环
1
2
3
4
5
6
7
8
9
10for i in 1..3
do
echo $i
done
a=10
while [a -gt 0]
do
echo $a
a=`expr $a - 1`
done-z a:判断a是否是空,相反,用-n可以判断a是否不空- 数组初始化:
array=(1 2 3) - 数组元素的使用:
echo ${array[2]} - 数组的遍历
1 | |
Vim
编辑器
| 命令 | 解释 |
|---|---|
:w |
保存文件 |
:q |
关闭文件,:wq 表示保存并关闭文件,:q! 表示强制关闭文件 |
j/J k/K h/H l/L |
让光标进行上、下、左、右的移动 |
3gg/GG 3j/J 3k/K |
让光标移动到第3行、光标向上移动3行、光标向下移动3行 |
/string |
查找字符串 string 文件中的所有该字符串都会高亮显示 n/N 可以让光标定位到下一个 string。 Ctrl+n/N 可以让光标定位到上一个 string |
CC Y P U |
剪切所在行、复制、粘贴、撤销 |
V |
进入 Visual 模式,可以大规模选中 |
GCC
编译器
阶段停止的命令
graph LR
A[hello.cpp] --预处理器-E--> B[hello.i]
B --编译器-S--> C[hello.s]
C --汇编器-c--> D[hello.o]
D --链接器--> E[hello]
F[printf.o] --链接器--> E[hello]
| 选项 | 解释 |
|---|---|
-E |
只运行预编译器,生成修改了的源程序文本文件 |
-S |
只运行到编译器,生成汇编程序(文本文件) |
-c |
只运行到汇编器,生成二进制的可重定位目标程序 |
debug相关
| 选项 | 解释 |
|---|---|
-g |
生成调试信息。GNU 调试器可利用该信息。 |
-Og |
不进行优化处理。 |
-O1 -O2 -O3 |
优化生成代码,数字越大,优化程度越高 |
其他
gcc 命令的常用选项
| 选项 | 解释 |
|---|---|
-o FILE |
生成指定的输出文件,用在生成可执行文件时 |
-pthread |
用于生成多线程的可执行文件 |
GDB
调试器
Makefile
解决多文件编译输入命令麻烦的问题
假如有以下文件需要编译成一个可执行程序
graph LR
main.cpp
main.cpp --> math.cpp --> math.h
main.cpp --> tool.cpp --> tool.h
用下面的命令可以将这些程序编译为名字为 main 的可执行程序
1 | |
但是当文件很多时,这样写就很麻烦,这时候就需要 Makefile 了
1 | |
Makefile文件的名称必须是 Makefile 或 makefile ,编译的时候,在命令行中执行下面的语句就可以了
1 | |
执行 clear 执行需要在命令行中执行
1 | |
Linux快速入门
https://fu-qingchen.github.io/2021/08/09/HUST/LinuxCrash/