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.txt
mkdir 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
和Taxt
grep [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 2020
cal 1 2020
grep tex filename.txt | wc
:|
表示命令的组合,把|
前面得出的结果传递给这个符号后面的命令,这个例子的输出是统计filename.txt
文件里包含tex
序列的行数、单词书和字符数
Shell脚本
- Linux的脚本文件以
.sh
结尾,使用sh test.sh
运行(当有 数组 时,使用bash test.sh
) >
和<
:重定向命令,把输出打到文件或者把文件内容当成输入a=10
:给变量a
赋值为 10,注意=
两端不能有空格$a
:使用变量a
echo $a Text
:输出的命令,相当于cout << a << " Text";
read a
输入保存到变量a
c='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/