本文我来介绍Linux的一些基础用法,本文包含了linux的基本指令、权限、还有基础开发工具,我也会展示代码案例以及结果
1、基本指令
1.1ls指令:
ls指令的用法为:ls [选项] [目录/文件]。
功能:对于目录,该命令列出该目录的所有子目录和子文件。并展示出所有内容和信息。

常用附加选项
-a:列出该目录下的所有文件,包含用.开头的隐含文件

-d:将目录像文件一样显示,而不是显示其下的文件,如ls-d指定目录

-i:输出文件的i节点的索引信息,如ls-ai指定文件

-k:以k字节的形式表示文件大小。ls -alk指定文件

-l列出文件的详细信息

-n用数字的UID、GID代替名称

-F在每个文件名后附上一个字符说明文件类型 "*"表示可执行的普通文件,"/"表示目录。"@"表示符号链接;"|"表示FIFOs,"="表示套接字。

-r对目录进行反向排序

-t以时间排序

-s在l文件名后输出此文件大小。

-R列出所有子目录下的文件

-l一行只输出一个文件

1.2pwd命令
显示用户当前所在的目录

路径的存在意义是为了保证快速定位查找指定文件,且路径具有唯一性
1.3cd指令
功能:改变工作目录,将当前工作目录转到指定的目录下

1.4touch指令
语法touch。。。文件。。。
功能:touch命令参数可修改文档或目录的日期时间,包括存储时间和更改时间,或者新建不存在的文件
-a :change the access time
-c:chagne the modificantion time


1.5mkdir指令
此指令勇于创造新的目录,mkdir xx 就是创造一个名为xx的目录


1.6rmdir && rm指令
rmdir指令是删除命令,remove。
rmdir [-p] [xxx]

rm命令可以同时删除文件或录像
rm [-f-i-r-v] [dirName/dir]
适用对象:所有使用者
功能:删除文件或目录
-f即使文件为只读,也直接删除
-i删除前逐一询问确认
-r删除目录及其下所有文件

1.7man指令
-k根据关键字联机帮助,num在第num章节查找
-a将所有章节都显示出来,比如man printf它缺省从第一张开始搜索。知道就停止,用a选项,按q退出。

1.8cp指令
cp源文件或目录,目标文件或目录
-f 强行复制,-i覆盖之前先询问的用户,-r递归处理,将目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,一律视为普通文件处理


1.9mv指令
用来移动文件或者更改文件名,经常用来备份文件或目录
mv命令中第二个参数类型的不同。mv命令将文件重命名或将其移动到一个新目录中

1.10cat指令
-b对空输出行编号,空行不做编号
-n对输出的所有行编号
-s不输出多行空行




1.11more指令
-n指定结果行数,q退出

1.11less指令
less可以随意浏览文件,而More只能向前移动,不能向后移动。
-i忽略搜索时的⼤⼩写
• -N显⽰每⾏的⾏号
• /字符串:向下搜索"字符串"的功能
• ?字符串:向上搜索"字符串"的功能
• n:重复前⼀个搜索(与/或?有关)
• N:反向重复前⼀个搜索(与/或?有关)
• q:quit

1.12head指令
head命令打印响应文件的开头10行

1.13tail指令
用来显示指定文件的末尾内容,不指定文件时,作为输入信息进行处理,常用于查看日志文件
-f循环读取,-n显示行数



1.14date指令
指定格式显示时间 date +%Y:%m:%d
时间相关
%H:小时(00~23,24 小时制)
%M:分钟(00~59)
%S:秒(00~61)
%X:时间简写,等价于 %H:%M:%S
日期相关
%d:日(01~31)
%m:月份(01~12)
%Y:完整年份(0000~9999)
%F:日期简写,等价于 %Y-%m-%d
常用组合速记
完整时间:%X = %H:%M:%S
完整日期:%F = %Y-%m-%d
日期 + 时间:%F %X(最常用格式)
bash
date -s "01:01:01 2008-05-23" // 设置全部时间
date -s "01:01:01 20080523" // 设置全部时间
date -s "2008-05-23 01:01:01" // 最常用、最标准
date -s "20080523 01:01:01" // 设置全部时间
bash
date -s // 设置当前时间(交互方式)
date -s 20080523 // 设置日期为 2008-05-23,时间自动置为 00:00:00
date -s 01:01:01 // 设置时间为 01:01:01,不修改日期
1.15cal指令
功能:⽤于查看⽇历等时间信息,如只有⼀个参数,则表⽰年份(1-9999),如有两个参数,则表⽰⽉份和年份
-3:显示上月、当月、下月三个月月历
-j:显示当天是当年第几天(从 1 月 1 日开始计数)
-y:显示全年一整年份的日历

1.16find指令
⽤于在⽂件树中查找⽂件,并作出相应的处理(可能访问磁盘)
-name按文件名查找文件

1.17which && whereis指令
搜索系统指令的命令

whereis:用于找到程序的源,二进制文件或手册

1.18alias指令
是指命令别名

grep指令
在⽂件中搜索字符串,将找到的⾏打印出来

zip/unzip指令
将目录或文件压缩为zip形式/解压
bash
zip test2.zip test2/*
unzip test2.zip -d /tmp
rzsz这个工具时windows和linux机器通过xshell传输文件,安装后通过拖拽即可传文件
tar指令
-c:创建压缩文件(create)
-x:解压压缩文件
-t:查看压缩包内文件列表
-z:启用 gzip 压缩 / 解压
-j:启用 bzip2 压缩 / 解压
-v:显示压缩 / 解压过程详情
-f:指定压缩包文件名,f 必须放在参数最后
-C:解压到指定目录
bash
tar -cvf /tmp/etc.tar /etc<==仅打包,不压缩!
tar -zcvf /tmp/etc.tar.gz /etc <==打包后,以 gzip 压缩
tar -jcvf /tmp/etc.tar.bz2 /etc <==打包后,以 bzip2 压缩
bash
tar -ztvf /tmp/etc.tar.gz
bc指令
bc命令可以很⽅便的进⾏浮点运算
uname -f指令
功能:uname⽤来获取电脑和操作系统的相关信息。
补充说明:uname可显⽰linux主机所⽤的操作系统的版本、硬件的名称等基本信息。
关机重启 shutdown 命令
语法:shutdown [选项]
常用选项:
-h:停止系统服务后立即关机-r:停止系统服务后重启-t sec:指定延迟秒数,多少秒后执行关机/重启
2、权限
lInux分为两种用户,超级用户和普通用户
超级用户:用由最高权限,可以做任何事
普通用户:做有限的事情
超级用户命令提示符为# 普通用户为$
命令su
bash
su user
su root
linux权限管理,文件访问者的分类,文件和文件目录的所有者 u---User
文件和文件目录的所有者所在组的用户:g--Group领导者
其他用户:o--Other(外来者)
d:文件夹(目录)
-:普通文件
l:软链接(类似 Windows 快捷方式)
b:块设备文件(硬盘、光驱等)
p:管道文件
c:字符设备文件(串口、屏幕等设备)
s:套接字文件
文件权限表示与chmod命令
一、文件权限值表示方法
- 字符表示方法
- 八进制数值表示方法
二、文件访问权限设置
1. chmod 命令
功能:设置文件访问权限
格式:chmod [参数] 权限 文件名
常用选项:
-R:递归修改目录及内部所有文件权限
说明:仅文件所有者和root用户可修改文件权限
2. chmod 权限格式(字符模式)
用户表示符 +/-/= 权限字符
+:增加指定权限-:取消指定权限=:赋予设定权限,覆盖原有权限- 用户符号:后续可搭配权限字符使用
用户符号说明
- u:文件拥有者
- g:同组用户
- o:其他用户
- a:所有用户
权限示例
chmod u+w /home/abc.txt给拥有者增加写权限chmod o-x /home/abc.txt取消其他用户的执行权限chmod a=x /home/abc.txt给所有用户统一设置为仅执行权限
chown修改文件拥有者
bash
chown user1 f1
chown -R user1 filegroup1
chgrp
修改文件或目录的所属组
bash
chgrp users /abc/f2
umask
umask 文件掩码 查看与修改
- 作用:查看或修改文件默认权限掩码
- 新建文件默认原始权限:0666
- 新建目录默认原始权限:0777
实际权限规则:
创建文件/目录时,会受 umask 掩码影响
实际权限计算公式:
实际权限 = 默认权限 & ~umask
file指令
功能说明:辨识⽂件类型。
常用选项
-
-c:详细显示指令执行过程,便于排错或分析程序执行情况 -
-z:尝试解读压缩文件的内容目录权限作用说明
-
可执行权限:目录若无执行权限,无法使用
cd进入该目录 -
可读权限:目录若无可读权限,无法用
ls查看目录内文件 -
可写权限:目录若无写权限,无法在目录中新建、删除文件
目录权限总结
- 目录的可执行权限(-x) :代表能否在该目录下执行命令、能否
cd进入目录。 - 目录无 -x 权限 :即便有读权限
-r,也无法 cd 进入目录,无法对目录执行任何操作。 - 目录有 -x 权限、无 -r 权限 :可以
cd进入目录,能执行命令,但无法用 ls 查看目录内文件列表。
基础开发工具
1-3 yum 具体操作
1-3-1 查看软件包
命令:yum list
作用:列出系统中所有可安装、已安装的软件包。
用法:
由于软件包数量极多,通常配合 grep 筛选指定软件。
bash
yum list | grep 软件名
yum list | grep nginx
yum list | grep java
yum list | grep mysql
通过yum,我们可以通过很简单的⼀条命令完成gcc的安装.
bash
sudo apt install -y lrzsz
Linux 软件安装 重要规则总结
- 安装软件需要向系统目录写入内容,必须使用 sudo 或切换到 root 账户才能执行。
- yum / apt 安装软件串行执行:只能等一个安装完成后,再装另一个。
- 如果正在执行 yum/apt 安装,同时再开一个终端执行安装,yum/apt 会直接报错(进程互斥)。
bash
sudo yum install -y epel-release
卸载命令
bash
sudo apt remove [-y] lrzsz
注意事项,必须保证主机畅通,可通过ping指令认证
vim编辑器
vi/vim这两个的区别还是有的,虽然都是多模式编辑器,只不过vim是vi的升级版,兼容vi的指令,同时包含新特性。
vim的三个模式
命令模式,插入模式,底行模式
普通模式:正常控制光标的移动,字符或行的删除
插入模式:做文字的输入
末行模式:文件保存或退出没业绩而已进行文件替换 ,找字符串,列出行号等操作

vim的基本操作
输入vim后,就会进入全屏幕编辑画面
vim要切换到插入模式才能输入文字
正常切换到插入模式
输入a,输入i.输入o
插入模式想切换到正常:只能ESC推到正常再修改
正常切换到末行
shift+;其实就是输入:
退出vim
:w保存当前文件
:wq保存并退出
:q!不存盘强制退出
Vim 正常模式命令集(干净格式化版)
一、正常模式 → 插入模式(最常用)
命令 功能说明
i 从光标当前位置进入插入模式
a 从光标下一个位置进入插入模式
o 在光标下方新建一行,从行首进入插入模式
I 直接跳转到行首并进入插入模式
A 直接跳转到行尾并进入插入模式
O 在光标上方新建一行,从行首进入插入模式
二、正常模式 → 退出 / 保存
命令 功能说明
:w 保存文件
:q 退出文件(未修改时可用)
:wq 保存并退出
:q! 强制退出(不保存)
ZZ 快速保存并退出(不用输冒号)
三、正常模式 → 光标移动
命令 功能说明
h 左移
j 下移
k 上移
l 右移
0 跳转到行首
$ 跳转到行尾
gg 跳转到文件第一行
G 跳转到文件最后一行
2-4 vim 正常模式命令集
一、插入模式
- 按
i切换进入插入模式,从光标当前位置开始输入文字 - 按
a进入插入模式,从光标所在位置的下一个位置开始输入文字 - 按
o进入插入模式,在光标下方插入新的一行,从行首开始输入文字
二、从插入模式切换为命令模式
- 按
ESC键退回正常命令模式
三、移动光标
- 正规 Vim 使用
h、j、k、l控制光标:左、下、上、右移动一格 - 按
G:移动到文章最后一行 - 按
$:移动到光标所在行的行尾 - 按
^:移动到光标所在行的行首 - 按
w:光标跳到下个单词的开头 - 按
e:光标跳到下个单词的字尾 - 按
b:光标回到上个单词的开头 - 按
#l:光标移到该行第 # 个位置,例:5l、56l - 按
gg:跳转到文本第一行开头 - 按
shift+g:跳转到文本末尾 - 按
ctrl+b:屏幕向后翻一页 - 按
ctrl+f:屏幕向前翻一页 - 按
ctrl+u:屏幕向后移动半页 - 按
ctrl+d:屏幕向前移动半页
四、删除文字
x:每按一次,删除光标所在位置的一个字符#x:例6x,删除光标位置往后(包含自身)6 个字符X:大写 X,每按一次删除光标前面一个字符#X:例20X,删除光标前面 20 个字符dd:删除光标所在整行#dd:从光标所在行开始,向下删除 # 行
五、复制
yw:复制光标所在处到单词字尾的内容到缓冲区#yw:复制 # 个单词到缓冲区yy:复制光标所在整行到缓冲区#yy:例6yy,从当前行往下复制 6 行文字p:将缓冲区内容粘贴到光标所在位置,所有 y 系列复制命令都需配合 p 完成粘贴
六、替换
r:替换光标所在处单个字符R:进入连续替换模式,按 ESC 结束替换
七、撤销与恢复
u:撤销上一步操作,可多次按 u 多级撤销ctrl+r:恢复被撤销的操作
八、更改
cw:修改光标所在单词从当前位置到字尾c#w:例c3w,连续更改 3 个单词
九、跳至指定行
ctrl+g:查看光标当前所在行号#G:例15G,直接跳转到文章第 15 行行首
2-5 vim 末行模式命令集
进入末行模式:先按 ESC 进入正常模式,再按 :(冒号) 即可进入末行模式。
显示行号
set nu:在文件每一行前显示行号
跳转到指定行
:加数字回车,例如:15,直接跳转到文件第 15 行
查找字符
/关键字:从光标位置向下 正向查找关键字,按n继续往下匹配?关键字:从光标位置向上 反向查找关键字,按n继续往上匹配
查找区别
/ 是从上往下搜索;? 是从下往上搜索,按下 n 都会沿着当前搜索方向继续查找下一个匹配内容。
保存文件
w:保存当前文件
退出 Vim
q:正常退出 Vimq!:强制退出,不保存修改内容wq:保存文件并退出 Vim
3. 编译器 gcc/g++
3-1 编译器gcc/g++ 背景知识
程序从源码到可执行文件分为四大步骤:
-
预处理
进行宏替换、去除注释、条件编译、头文件展开等操作
-
编译
将预处理后的代码翻译成汇编代码
-
汇编
把汇编代码转为机器可识别的二进制目标代码
-
链接
将多个目标文件、系统库文件合并,生成最终可执行文件或库文件
预处理指令
预处理功能主要包括宏定义,⽂件包含,条件编译,去注释等。
• 预处理指令是以#号开头的代码⾏。
• 实例:gcc --E hello.c --o hello.i
• 选项"-E",该选项的作⽤是让gcc在预处理结束后停⽌编译过程。
• 选项"-o"是指⽬标⽂件,".i"⽂件为已经过预处理的C原始程序。
汇编
把编译阶段生成的.s转为目标文件
在此可使用选项-c就可以看到汇编代码已转化为.o的二进制代码了
gcc --c hello.s --o hello.o连接
bash
gcc hello.o --o hello
静态库与动态库
静态库是指编译链接时,把库⽂件的代码全部加⼊到可执⾏⽂件中,因此⽣成的⽂件⽐较⼤,但在运
⾏时也就不再需要库⽂件了。其后缀名⼀般为".a"
3-2 gcc 其他常用选项(了解即可)
-
-E只激活预处理,不生成文件,需要把结果重定向到输出文件中
-
-S编译到汇编语言,不进行汇编和链接
-
-c编译到目标代码(只编译不链接)
-
-o 文件将输出内容输出到指定文件
-
-static对生成的文件采用静态链接
-
-g生成调试信息,GNU 调试器可使用该信息
-
-shared尽量使用动态库,生成文件较小,需要系统提供动态库
-
优化级别
-O0没有优化-O1默认优化级别-O2更高优化-O3优化级别最高
-
-w不生成任何警告信息
-
-Wall生成所有警告信息
4-5适度扩展语法
bash
# 定义变量
BIN = proc.exe # 最终生成的可执行文件
CC = gcc # 指定编译器
# 获取当前目录下所有 .c 源文件
SRC = $(wildcard *.c)
# 将 .c 替换为 .o,生成目标文件列表
OBJ = $(SRC:.c=.o)
# 编译 & 链接选项
LFLAGS = -o # 链接选项
FLAGS = -c # 编译选项
RM = rm -f # 删除命令
# 最终目标:生成可执行文件
$(BIN): $(OBJ)
@$(CC) $(LFLAGS) $@ $^
@echo "linking ... $^ to $@"
# 模式规则:由 .c 生成 .o
%.o: %.c
@$(CC) $(FLAGS) $<
@echo "compling ... $< to $@"
# 伪目标:清理文件
.PHONY: clean
clean:
$(RM) $(OBJ) $(BIN)
# 伪目标:测试打印变量
.PHONY: test
test:
@echo $(SRC)
@echo $(OBJ)
进度条
5-1补充-回⻋与换⾏
• 回⻋概念
• 换⾏概念
• ⽼式打字机的例⼦
• \r&&\n
git
Git 引入背景
不知道你工作或学习时,有没有遇到这样的情况:我们在编写各种文档时,为了防止文档丢失、更改失误,在出现失误后可以恢复到原来的版本,我们不得不手动复制文档副本,例如:
"报告-v1"
"报告-v2"
"报告-v3"
"报告-确定版"
"报告-最终版"
"报告-究极进化版"
安装git
bash
yum install git
$ git --version
git version 1.8.3.1
git add
bash
git add [⽂件名]
提交移动到本地
bash
git commit -m "XXX"
同步到远端服务器上
bash
git push
7. 调试器gdb/cgdb使⽤
cpp
#include <stdio.h>
int Sum(int s, int e)
{
int result = 0;
for(int i = s; i <= e; i++)
{
result += i;
}
return result;
}
int main()
{
int start = 1;
int end = 100;
printf("I will begin\n");
int n = Sum(start, end);
printf("running done, result is: [%d-%d]=%d\n", start, end, n);
return 0;
}
预备
程序的发布方式
程序的发布方式主要有两种:debug 模式 和 release 模式。
debug 模式
调试模式,包含调试信息,方便开发者调试程序,不会对代码进行优化,运行速度较慢。
release 模式
发布模式,去掉调试信息,编译器会对代码进行优化,运行效率更高,体积更小,用于正式上线使用。