Linux from zero to hello world
环境安装
为什么要购买云服务器
-
首先云服务器环境配置简单,可以提供多人使用,符合实际开发场景,可以作为我们学习环境进行仿真。
-
其次重装方便,学习成本低。
-
最后对于我们学生来说,选用最便宜的套餐就足够使用。同时,以学生的身份购买服务器,优惠力度大。
登录云服务器
使用ssh客户端即可登录。以XShell举例,只需新建会话,填写用户名(初始默认是root)和密码。然后主机填写云服务器的公网IP即可。登录之后就可以看到Linux字符界面。
操作系统定位
计算机是一个层状结构,最底层是硬件。每种硬件对应一种驱动程序,驱动程序控制硬件工作。往上就是操作系统,负责软硬件资源管理的软件。再往上就是用户层,主要由用户级软件组成。
LInux 基本指令
指令 | 说明 |
---|---|
ls | ls 用来显示当前目录中有哪些文件。显示的内容为所有文件的文件名。ls -l可以展示文件的详细信息。ls -a 可以显示额外的隐藏文件。通常在Linux中配置文件是对用户隐藏起来,防止误操作。ls -d [目录]。 只显示目录信息,不显示目录下详细信息。ls -R [目录] 递归式显示目录及子目录信息。 |
pwd | 显示当前所在路径。 |
cd | 更改所在目录。. 表示当前目录,…表示上级目录。但是cd …无法一直返回到上级目录,因为最上层的目录为 / (根目录)。因为在 Linux 中,目录是以树这种数据结构组成的。而 / 位于最顶层,所以叫做根目录。采用这种结构的目的就是为了便于查找文件。其次,从根节点到任一叶子节点的路径是唯一的。这样就能唯一标识任一文件。 |
mkdir | mkdir -p [目录/目录]递归式创建目录。 |
rmdir | 只能删除空目录。 |
rm | rm -r [非空目录] 递归删除非空目录。rm -rf [非空目录] 强制递归删除非空目录。 |
man | 查看手册,man [卷号] 查找内容,不写卷号,默认从第一卷查找。 |
cp | 拷贝内容。拷贝非空目录,需加 -r 选项。 |
mv | 剪贴。重命名。 |
cat | 查看文件内容。 |
cp | 拷贝。-r将目录中的文件递归拷贝。 |
more | 分页显示,不支持上翻。 |
less | 分页显示,支持上翻。 |
> | 输出重定向。 |
>> | 追加重定向。 |
< | 输入重定向。 |
管道(|) | 传输数据。head -110 file.txt | tail - 10 将file.txt的前110行数据作为tail指令输入,输出给tail指令。 |
date | 显示日期:date +%Y/%m%d:%H:%M:%S。-d @ 秒数 现在时间和计算机元年的相差多久。 |
cal | 日历。 |
find | find 路径 -name 寻找文件名,在指定路径找指定文件名。 |
grep | 在文本中查找匹配字符。grep 匹配字符 文本。 |
file | 查看文件类型。 |
zip | 压缩。 |
unzip | 解压缩。 |
adduser 用户名 | 添加用户。 |
passwd 用户名 | 设置用户名密码。 |
userdel | 删除用户。-r 删除用户的同时,删除用户家目录。 |
su | 普通用户切换成root。如果只是单纯的想提升当前指令权限,直接带上sudo |
su 普通用户 | root用户切换成普通用户。 |
权限管理
所谓权限,是指一件事情,是否允许某人去做。在下图中,有3个文件,一个root目录。每个文件对应一条信息。第一个字符表示文件类型。紧接着rwx表示权限为可读可写可执行。然后第一个用户名文件所有者,第二个用户名表示文件所属组,这两种角色对应两个不同的读、写、执行权限,剩下的一组就是其它用户的权限,即不属于该组,也不是该用户。需要注意的是,文件有可执行权限不代表就能执行。
相关指令
指令 | 说明 |
---|---|
chmod | 修改文件权限 |
chmod u-r test.c | 给文件所有者去掉读权限 |
chmod u+rwx test.c | 给文件所有者加上读、写、可执行权限 |
chmod g-r test.c | 给文件所属组去掉读权限 |
chmod o-r test.c | 给其他人去掉读权限 |
chgrp | 修改文件所属组 |
chown | 修改文件所有者 |
需要注意的是,在创建文件时,文件的默认权限是由umask决定的。但凡在umask中出现的权限位,都不应该出现在。即用默认的权限“与”~umask(取反的umask)。下图umask为022,root目录默认权限为777(一个目录要想进行读写操作必须先要保证是可执行的),777&( ~022)=111 101 101 即rwxr-xr-x。
关于粘滞位
粘滞位(Sticky bit),又称作粘着位,是Unix文件系统权限的一个旗标。 最常见的用法在目录上设置粘滞位,如此以来,只有目录内文件的所有者或者root才可以删除或移动该文件。 如果不为目录设置粘滞位,任何具有该目录写和执行权限的用户都可以删除和移动其中的文件。
基础开发工具
yum
在Linux中安装软件有三种方式:
- 源码安装
- 通过rpm安装包安装
- 包管理工具安装
yum就是centos下的包管理工具,它可以帮助我们很方便地从包服务器下载并安装软件。需要注意的是,任何时刻,只能有一个yum进行安装。
相关指令
指令 | 说明 |
---|---|
yum list | 查询所有已安装和可安装的软件包。 |
yum remove 包名 | 使用 yum 卸载软件包时,会同时卸载所有与该包有依赖关系的其他软件包,即便有依赖包属于系统运行必备文件,也会被 yum 无情卸载,带来的直接后果就是使系统崩溃。 |
yum lis 包名 | 安装软件包。 |
vim
三种模式切换
vim编辑器有三种模式,分别是:底行模式、命令模式和插入模式。其中,底行模式和插入模式两者无法进行直接切换,必须先切换成命令模式,再进行两种模式的切换。无论在哪种模式,按esc即可返回到命令模式。命令模式转换成底行模式需要按:
。命令模式转换成插入模式可以按a
或i
或o
。其中,i
进入输入模式后,将会在当前光标前插入字符,a
将会在当前光标的下一个字符前插入字符,o
将会在当前光标的下一行开始输入字符。
命令模式下的指令
熟练掌握命令模式下的指令能够帮助我们提高编码效率。
指令 | 说明 |
---|---|
$ | 光标移动到当前行行末 |
^ | 光标移动到当前行行首 |
G | 光标移动到末行行首 |
gg | 光标移动到首行行首 |
yy | 复制当前行 |
p | 换行粘贴 |
nyy | 从光标当前行开始,复制n行 |
np | 换行粘贴n行 |
u | 撤销 |
ctrl+u | 恢复撤销 |
dd | 删除光标所在行(剪切) |
ndd+p | 剪切n行,并粘贴 |
shift+` | 大小写切换 |
w | 以单词为单位,光标向前跳转 |
b | 以单词为单位,光标向后跳转 |
x | 删除光标所在字符 |
nx | 删除当前光标及往后的n个字符 |
X | 删除光标前一个字符 |
nX | 删除光标前的n个字符 |
r | 替换当前光标所在的字符 |
nr | 替换当前光标及光标之后的n个字符 |
shift+r | 进入替换模式 |
底行模式下的指令
指令 | 说明 |
---|---|
set nu | 打开行号显示 |
set nonu | 关闭行号显示 |
w | 保存 |
q | 退出 |
! | 强制执行 |
!+命令 | 不退出vim执行命令 |
vs+文件名 | 分屏显示文件 |
ctrl w+w | 切换分屏 |
gcc 编译指令
指令 | 说明 |
---|---|
gcc -E 源文件 -o 生成文件名 | 预处理:头文件展开、去注释、宏替换、条件编译 |
gcc -S 源文件 -o 生成文件名 | 将C代码编译成汇编 |
gcc -c 源文件 -o 生成文件名 | 将汇编文件转换成目标文件 |
gcc 源文件 -o 生成文件名 | 链接 |
gdb 调试
需要注意的是,在Linux中,c程序编译生成的可执行程序是release版本。要想生成debug版本的可执行程序,要在编译指令加上-g
选项。之后,运行gdb+可执行程序
即可调试。
调试指令 | 说明 |
---|---|
l | 显示代码和行号 |
r | 运行代码 |
b+行号 | 在该行打断点 |
info b | 查看断点 |
n | 逐过程调试 |
s | 逐语句调试 |
p+变量/&变量 | 查看变量内容/地址 |
display 变量 | 变量常显示 |
undisplay 变量编号 | 取消变量常显示 |
until+行号 | 跳转至任意一行 |
finish | 直接运行完对应的函数 |
continue | 跳转到下一个断点 |
make和makefile
makefile包括了make所需要的依赖关系和依赖方法。当执行make时,会执行对应makefile中的指令。makefile中的格式为目标:依赖
,紧接着是换行,tab
,编写从依赖到目标的指令。当依赖项变多时,也可以用一些自动变量代替。
字符 | 说明 |
---|---|
$@ | 表示依赖关系中的目标文件 |
$^ | 表示依赖关系中依赖文件列表 |
$< | 表示依赖关系中第一个依赖文件 |