目录
一、基础指令
1、ls
ls
是一个常用的命令,用于列出当前目录下的文件和文件夹。
基本用法:
ls
该命令会列出当前目录下的文件和文件夹的名称。
常见的参数:
-l
:以长格式显示文件和文件夹的详细信息。-a
:显示所有文件和文件夹,包括以点开头的隐藏文件。-h
:人类可读格式显示文件大小。-R
:递归地列出当前目录下的所有文件和文件夹。-t
:按修改时间排序,最近修改的文件或文件夹在前。-S
:按文件大小排序,文件大小大的在前。-r
:逆序显示文件和文件夹。
例如,要以详细信息的长格式显示当前目录下的所有文件和文件夹,可以使用以下命令:
ls -l
2、cd
cd
是一个常用的命令,用于更改当前工作目录。
基本用法:
cd <目录路径>
该命令会将当前工作目录更改为指定的目录路径。
常见的用法和参数:
cd
:不带任何参数,返回用户的主目录(home directory)。cd -
:返回之前所在目录。cd ..
:返回上一级目录。cd .
:保持在当前目录。cd /
:返回根目录。cd ~
:返回用户的主目录(home directory)。
例如,要进入名为 “Documents” 的子目录,可以使用以下命令:
cd Documents
3、pwd
pwd
是一个常用的命令,用于显示当前工作目录的路径。
基本用法:
pwd
该命令会在终端中显示当前所在的工作目录的完整路径。
例如,如果当前工作目录是 “/home/user/Documents”,那么使用 pwd
命令会显示:
/home/user/Documents
pwd
命令通常用于确认当前所在的目录,或在脚本中获取当前工作目录的路径。
4、 mkdir
mkdir
是一个常用的命令,用于创建新的目录。
基本用法:
mkdir <目录名>
该命令会在当前目录下创建一个新的目录,目录名由 <目录名>
指定。
例如,要在当前目录下创建一个名为 “new_dir” 的目录,可以使用以下命令:
mkdir new_dir
如果要在其他目录下创建目录,可以在命令中指定完整的目录路径,如:
mkdir /path/to/new_dir
5、touch
touch
是一个常用的命令,用于创建新的空文件或更新已有文件的访问时间和修改时间。
基本用法:
touch <文件名>
该命令会创建一个新的空文件,文件名由 <文件名>
指定。如果文件已存在,touch
命令将更新文件的访问时间和修改时间,但文件内容不会改变。
例如,要在当前目录下创建一个名为 “file.txt” 的空文件,可以使用以下命令:
touch file.txt
6、more
more
是一个用于分屏显示文件内容的命令。它允许你按页浏览文本文件,适用于较长的文件内容。
基本用法:
more <文件名>
该命令会将 <文件名>
指定的文件内容按页显示在终端中。你可以通过按空格键向下翻页,按 “q” 键退出浏览。
例如,要查看名为 “file.txt” 的文件内容,可以使用以下命令:
more file.txt
7、cat
cat
是一个常用的命令,用于显示文件的内容或将多个文件合并成一个文件。
基本用法:
cat <文件名>
该命令会将 <文件名>
指定的文件的内容显示在终端中。
例如,要显示名为 “file.txt” 的文件内容,可以使用以下命令:
cat file.txt
cat
命令还可以用于将多个文件的内容合并,并输出到一个文件或标准输出。如下所示:
合并多个文件,并输出到标准输出:
cat file1.txt file2.txt
合并多个文件,并输出到一个新文件:
cat file1.txt file2.txt > merged_file.txt
除了基本用法,cat
命令还有其他选项和功能,比如显示行号、多文件显示等。
8、cp
cp
命令用于复制文件或目录。
基本用法:
cp <源文件路径> <目标文件路径>
例如,将文件 “file.txt” 从当前目录复制到 “backup” 目录中,可以使用以下命令:
cp file.txt backup/
9、mv
mv
命令用于移动文件或目录,也可以用于修改文件或目录名。
基本用法:
mv <源文件路径> <目标文件路径>
例如,将文件 “file.txt” 从当前目录移动到 “backup” 目录中,可以使用以下命令:
mv file.txt backup/
如果目标路径与源路径相同,mv
命令也可以用于修改文件或目录名。例如,重命名文件 “file.txt” 为 “new_file.txt”:
mv file.txt new_file.txt
10、rm
rm
命令用于删除文件或目录。需要注意的是,该命令会直接删除文件或目录,并且在删除之前没有任何提示信息,请谨慎使用。
基本用法:
rm <文件或目录路径>
删除文件 “file.txt”:
rm file.txt
删除目录 “dir”:
rm -r dir/
需要注意的是,在删除目录时需要添加 -r
参数,以递归删除目录中的所有文件和子目录。
11、which
which
命令用于查找并显示可执行程序的路径。
基本用法:
which <命令名>
例如,要查找命令 ls
的路径,可以使用以下命令:
which ls
该命令会输出 ls
命令的完整路径,例如 /bin/ls
。
12、find
find
命令用于在指定目录下递归搜索文件和目录。
基本用法:
find <目录> <表达式>
例如,要在当前目录及其子目录下查找所有扩展名为 .txt
的文件,可以使用以下命令:
find . -name "*.txt"
find
命令还支持更多的用法和选项,例如按文件类型、文件大小等进行搜索。
13、grep
grep
命令用于在文件中搜索指定的模式并显示匹配的行。
基本用法:
grep <模式> <文件名>
例如,要在文件 “file.txt” 中搜索包含字符串 “example” 的行,可以使用以下命令:
grep "example" file.txt
14、wc
wc
命令用于统计文件中的单词数、行数和字符数。
基本用法:
wc <选项> <文件名>
例如,要统计文件 “file.txt” 中的行数、单词数和字符数,可以使用以下命令:
wc file.txt
wc
命令的选项包括:
-l
统计行数-w
统计单词数-c
统计字符数
使用管道符 |
可以将多个命令连接起来,将一个命令的输出作为另一个命令的输入。
例如,要统计文件 “file.txt” 中包含字符串 “example” 的行数,可以使用以下命令:
grep "example" file.txt | wc -l
这个命令首先使用 grep
命令找到包含 “example” 的行,然后将这些行作为输入传递给 wc
命令,使用 -l
选项统计行数。
15、echo
echo
命令用于在终端上输出指定的文本。
基本用法:
echo <文本>
例如,要在终端上输出 “Hello, World!”,可以使用以下命令:
echo Hello, World!
echo
命令还支持一些特殊字符和转义序列,如换行符 \n
、制表符 \t
等,用于格式化输出文本。你可以通过以下命令来实现换行输出:
echo -e "Line 1\nLine 2"
16、tail
tail
命令用于显示文件的末尾几行,默认显示文件的最后 10 行。
基本用法:
tail <选项> <文件名>
例如,要显示文件 “file.txt” 的最后 10 行,可以使用以下命令:
tail file.txt
常用的选项包括:
-n <行数>
显示指定行数的末尾内容,例如-n 20
显示最后 20 行。-f
实时监视文件的变化,并动态显示新增的内容。
重定向符用于将命令的输入或输出重定向到文件或设备。
常见的重定向符包括:
>
将输出重定向到文件,覆盖原有内容。>>
将输出重定向到文件,追加到原有内容末尾。<
将文件内容作为输入重定向给命令。2>
将错误输出重定向到文件。
例如,要将命令的输出保存到文件 “output.txt”,可以使用以下命令:
command > output.txt
二、vim编辑器相关操作
切换和退出:
- 启动 Vim:在终端中输入
vim
命令。- 退出 Vim:
- 命令模式下输入
:q
。- 保存并退出:命令模式下输入
:wq
或者按下ZZ
。- 强制退出:命令模式下输入
:q!
。
移动光标:
在命令模式下使用以下键盘按键可以移动光标:
h
:左移一个字符。j
:下移一行。k
:上移一行。l
:右移一个字符。w
:向后移动一个字(由空格或标点分隔的词)。b
:向前移动一个字。0
:移至行首。$
:移至行尾。G
:跳至文件末尾。gg
:跳至文件开头。<Ctrl-f>
:向前翻页。<Ctrl-b>
:向后翻页。
插入和编辑文本:
- 进入插入模式:
i
:在光标前插入文本。a
:在光标后插入文本。o
:在当前行下面插入新行。O
:在当前行上面插入新行。- 退出插入模式:按下
ESC
键。
删除和复制文本:
- 删除:
x
:删除光标所在位置的字符。dw
:删除一个字(删除光标位置到下一个空格之间的文本)。dd
:删除当前行。- 复制和粘贴:
yy
:复制当前行。yw
:复制一个字。p
:在光标后粘贴内容。
撤销和重做:
u
:撤销最后的操作。<Ctrl-r>
:重做撤销的操作。
搜索和替换:
/
:进入搜索模式。
- 输入要搜索的文本并按下回车进行搜索。
- 按下
n
跳转到下一个匹配项。- 替换:
:%s/旧文本/新文本/g
:将文件中的所有旧文本替换为新文本。
设置标记和跳转:
- 设置标记:
m<标记>
:在当前位置设置标记。例如,ma
设置标记为a
。- 跳转到标记:
'a
:跳转到标记a
的行。`a
:跳转到标记a
的位置。
三、gcc相关操作
在Linux系统上使用gcc编译器执行C语言程序的各步骤指令如下:
-
查看gcc版本:
gcc --version
-
编写C语言源代码文件(例如,hello.c)。
-
预处理(Preprocessing):在这个阶段,gcc 会根据源代码中的预处理指令对代码进行预处理。预处理指令以
#
开头,例如#include
、#define
等。预处理器会处理这些指令,包括文件包含、宏替换等。预处理后的文件保存为.i
或.ii
文件(通常为临时文件)。gcc -E hello.c -o hello.i
这将把C源代码预处理为纯文本,并将其输出到hello.i文件中。
-
编译(Compiling):在编译阶段,预处理后的源代码将被转换为汇编语言。这个过程由编译器完成,其主要任务是将高级语言代码转换为底层汇编代码,以便机器能够理解。编译后的文件通常以
.s
扩展名保存,也是临时文件。gcc -S hello.i -o hello.s
这将把预处理后的代码编译为汇编语言,并将其输出到hello.s文件中。
-
汇编(Assembling):在汇编阶段,汇编器接受编译器生成的汇编代码文件,并将其转换为机器可执行的二进制目标文件。目标文件通常以
.o
扩展名保存。gcc -c hello.s -o hello.o
这将把汇编代码转换为机器代码,并将其输出到hello.o目标文件中。
-
链接(Linking):
gcc hello.o -o hello
这将把目标文件与必要的库文件链接在一起,生成可执行文件hello。
-
运行可执行文件:
./hello
这将执行生成的可执行文件hello。
四、gdb调试
1、启动gdb
使用vim编辑器编写一个简单的测试程序并保存:
vim hello.c
然后使用gcc将其编译为可执行文件,同时使用-g表示该程序可调试:
gcc -g hello.c -o hello
接下来输入gdb -q + 可执行文件,启动gdb进行调试:
gdb hello
或
gdb -q hello
-q参数可以屏蔽一些gdb版本等相关信息,使得页面看起来干净些(我用了)。至此gdb启动完毕。
2、启动源码
输入list(l)即可查看程序源码:
默认显示10行,回车显示更多
3、运行程序
输入run(r)开始运行程序,直到遇到“断点”或者“结束”:
因为还没设断点,所以直接运行到最后
4、设置断点
输入 break(b)+数字 可以对程序进行断点操作(数字就是设置断点的代码行数)
输入 info breakpoints 即可查看断点信息:
Num: 断点编号
Disp:断点执行一次之后是否有效(keep:有效 dis:无效)
Enb: 当前断点是否有效 (y:有效 n:无效)
Address:内存地址
What:位置
5、单步执行
next:单步执行程序,但是遇到函数时会直接跳过函数,不进入函数
step:单步执行程序,但遇到函数会进入函数
continue:继续执行程序,直到遇到断点或结束
6、查看变量
print + 变量:查看变量值
whatis + 变量:查看变量数据类型
7、退出
输入q即可退出gdb
8、一些其他命令
(1)运行命令
until 如果你厌倦了在一个循环内单步跟踪,它可以运行程序直到退出循环体
until + 行号 运行至某行
finish 运行程序,直到当前函数返回完成,并且打印函数返回时的堆栈地址和返回值及参数值等信息
call + 行数 + (参数)
调用程序中可见的函数,并传递参数
如:call gdb_test(66)
(2)断点
delete + n 删除第n个断点
disable + n 暂停第n个断点
enable + n 开启第n个断点
clear + n 清除第n行的断点
info b ( info breakpoint ) 显示当前程序的断点设置情况
delete breakpoints 清除所有断点
(3)运行信息
where / bt
当前运行的堆栈列表
bt backtrace 显示当前调用堆栈
up / down 改变堆栈显示的深度
set args + 参数 指定运行时的参数
show args 查看设置好的参数
info program 查看程序是否在运行,以及进程号被暂停的原因
五、git
在Linux中使用Git,你可以按照以下步骤进行:
-
安装Git:在终端中运行以下命令来安装Git:
sudo apt update sudo apt install git
-
配置Git:在终端中运行以下命令来进行Git的全局配置,用于设置你的用户名和电子邮件地址:
git config --global user.name "Your Name" git config --global user.email "youremail@example.com"
-
克隆仓库:在终端中导航到你想要克隆的目录,并执行以下命令来克隆一个Git仓库:
git clone <repository_url>
-
添加文件:将你要跟踪的文件添加到暂存区中,可以使用以下命令:
git add <file_name>
或者,如果你要添加当前目录下的所有文件,可以运行:
git add .
-
提交更改:使用以下命令将暂存区中的更改提交到本地仓库:
git commit -m "Commit message"
-
推送更改:如果你希望将本地的提交推送到远程仓库,可以使用以下命令:
git push
-
拉取更新:如果你想获取远程仓库的最新更改,可以使用以下命令:
git pull
六、makefile
Makefile 是一个命名为 Makefile
(或者 makefile
或者 GNUmakefile
)的文本文件,它包含一系列规则和指令,用于告诉构建系统如何编译和构建项目。
Makefile 使用一种类似于自然语言的结构,其中包含目标、依赖关系和命令。
基本的 Makefile 结构是:
target: dependencies
commands
target
是需要生成的文件或者执行的任务的名称。dependencies
是构建目标所依赖的文件或者任务。commands
是构建目标的具体操作。每个命令必须以 Tab 键开始。
Make 命令根据 Makefile 中的规则,以目标为依据,检查依赖关系,并执行相应命令来生成目标文件。
对于简单的项目,你可以将规则和命令直接放在 Makefile 中。例如,以下是一个简单的示例:
hello: main.o hello.o
gcc main.o hello.o -o hello
main.o: main.c
gcc -c main.c
hello.o: hello.c
gcc -c hello.c
clean:
rm -f hello hello.o main.o
在这个示例中,我们定义了一个目标 hello
,它依赖于 main.o
和 hello.o
。当 hello
目标被执行时,相应的命令 gcc main.o hello.o -o hello
将被执行。
此外,我们还定义了 main.o
和 hello.o
的规则与命令,以及一个名为 clean
的伪目标,用于清理生成的文件。
.PHONY 是一个特殊的目标,它用于声明一个伪目标。伪目标不对应实际的文件,而是用于表示一个任务或命令。通过声明 .PHONY 目标,可以告诉 Make 工具在执行这些任务时不要检查对应的文件是否存在。
例如:
.PHONY: clean
clean:
rm -f *.o
在这个示例中,我们声明了一个名为 clean
的伪目标,用于删除所有 .o 文件。在执行 make clean
命令时,Make 工具会直接执行对应的命令,而不会检查是否存在 clean
目标对应的文件。
要使用 Makefile,只需在命令行中进入项目目录,然后执行 make
命令。Make 工具会读取当前目录中的 Makefile 文件,并根据其中的规则和命令执行构建任务。
例如:
$ make
这将启动 Make 工具,它会根据 Makefile 中定义的规则和命令来构建项目。默认情况下,它将执行 Makefile 中的第一个目标。
如果你想执行特定的目标,可以在 make
命令后面加上目标名称。例如:
$ make clean
这将执行 Makefile 中名为 clean
的目标,并执行其对应的命令。
总结来说,Makefile 是一个用于自动化构建和管理项目的工具,通过规则和命令描述如何生成目标文件,.PHONY 目标用于声明伪目标来执行任务而不考虑文件是否存在。通过在命令行中使用 make
命令,可以使用 Makefile 来构建和管理项目。