Linux c++ 工程管理知识点(一)

Linux(ubuntu)常用命令

查看当前文件夹内容:ls

参数:

-l:以长格式显示文件和目录的详细信息,包括权限、所有者、组、大小、修改日期等。
-a:显示所有文件,包括以.开头的隐藏文件。
-h:与 -l 结合使用时,以人类可读的格式显示文件大小(例如 KB、MB 等)。
-t:按照修改时间进行排序,最新修改的文件或目录在最前面。
-r:反向排序,通常与 -t 结合使用,以逆序显示文件列表。
-R:递归显示子目录的内容,即显示目录中的所有文件和子目录。
-F:在文件名后面加上符号来标识文件类型,例如斜杠 / 表示目录,星号 * 表示可执行文件等。

切换目录:cd

cd:不带参数时,默认切换到当前用户的主目录(通常是 /home/username)。

cd 目录名:切换到指定的目录,例如 cd Documents 将切换到当前目录下的 Documents 目录。

cd ~ 或 cd(不带参数):切换到当前用户的主目录。

cd -:切换到上次所在的目录。

cd ..:切换到当前目录的上一级目录。

cd /:切换到根目录。

cd -P 目录名:使用物理路径切换到目录,而不是符号链接的路径。

cd -L 目录名:使用逻辑路径切换到目录,如果目录是一个符号链接,则解析链接并切换到目标目录。

移动文件:mv

# 移动
mv 源文件 目标目录
# 重命名
mv 原文件名 新文件名
# 强制覆盖
mv -f 源文件 目标文件
# 覆盖时让我选择
mv -i 源文件 目标目录
# 静默模式,在执行操作时显示详细信息
mv -v 源文件 目标目录

查看进程:ps

ps: 列出与当前终端关联的进程信息。
ps -A: 列出系统上所有的进程信息。
ps -e: 同样用于列出系统上所有的进程信息。
ps -u username: 列出特定用户的进程信息。
ps aux: 以详细的格式列出所有进程的信息,包括 CPU 占用率、内存占用情况等。

监听端口:ss

ss -t: 列出所有当前的 TCP 连接。
ss -u: 列出所有当前的 UDP 连接。
ss -l: 列出所有当前的监听套接字。
ss -s: 显示套接字统计摘要信息。

测试链接:ping

ping <目标主机>: 向指定的目标主机发送 ICMP 数据包,并显示每个数据包的往返时间和丢包情况。
ping -c <次数> <目标主机>: 限制发送 ICMP 数据包的次数。
ping -i <间隔时间> <目标主机>: 设置发送 ICMP 数据包的间隔时间。
ping -s <数据包大小> <目标主机>: 指定发送的 ICMP 数据包的大小。

防火墙:ufw

启用和禁用防火墙:

启用防火墙:sudo ufw enable
禁用防火墙:sudo ufw disable
配置默认规则:

允许所有传入的流量:sudo ufw default allow
拒绝所有传入的流量:sudo ufw default deny
添加规则:

允许特定端口的流量:sudo ufw allow <端口号>
允许特定协议和端口的流量:sudo ufw allow <端口号>/<协议>
允许来自特定 IP 地址的流量:sudo ufw allow from <IP 地址>
删除规则:

删除特定端口的规则:sudo ufw delete allow <端口号>
删除特定协议和端口的规则:sudo ufw delete allow <端口号>/<协议>
删除来自特定 IP 地址的规则:sudo ufw delete allow from <IP 地址>
查看规则状态:

显示当前防火墙规则:sudo ufw status
显示详细的规则信息:sudo ufw status verbose
重载规则:

重新加载防火墙规则:sudo ufw reload
重置防火墙:

重置防火墙规则为默认状态:sudo ufw reset

 测试IP+端口:nc

# 测试
nc <目标主机> <端口号>
# 监听本地
nc -l <端口号>
# udp连接
nc -u <目标主机> <端口号>
# 扫描
nc -zv <目标主机> <起始端口>-<结束端口>

CMake基础

先看一下基础模板:

cmake_minimum_required(VERSION 3.22)

project(project1)

include_directories(/usr/local/ffmpeg6.0/include)
link_directories(/usr/local/ffmpeg6.0/lib)


target_link_libraries(project1
        avformat
        avcodec
        avfilter
        avutil
        swresample
        swscale
        avdevice
)

cmake_minimum_required:设置cmake最低的版本号

project:设置项目名称,这个如果使用ide例如clion会自动填写为项目名称,自己创建的话就随便写了,一般不影响编译

include_directories:头文件路径, 需要注意的是有些库比较坑爹,include目录下面还有个子目录,这个时候也要把子目录加上不然会报错找不到头文件

link_directories:共享库文件,包括静态库和动态库

但是这个项目如果需要换其他系统环境,再进行重新编译就不是很方便了,因为机器上安装的库目录不一定相同,有些自己手动编译的库可能安装在其他位置。多数编译好的库都是支持cmake配置的,可以找一下官方文档。opencv的官方cmake就是这么写的:

cmake_minimum_required(VERSION 2.8)
project( DisplayImage )
find_package( OpenCV REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable( DisplayImage DisplayImage.cpp )
target_link_libraries( DisplayImage ${OpenCV_LIBS} )

直接使用find_package命令去寻找库,找到以后直接使用${OpenCV_INCLUDE_DIRS} 和${OpenCV_LIBS}就好了。官方文档不好找,或者搜不到库名可以看看安装目录,如果有  xxxConfig.cmake结尾的配置文件,那么xxx大概率就是库名。如果是自己手动安装的库,可能需要导入路径。

# 设置多个安装路径
set(CMAKE_PREFIX_PATH "/path/to/library1/installation;
                       /path/to/library2/installation;
                       /path/to/library3/installation")

# 使用find_package寻找第三方库
find_package(TheLibraryName REQUIRED)

cmake还可以设置编译选项,例如设置多种编译模式。总之gcc命令里面常见的编译选项都可以通过set命令设定。

# 设置 C++ 编译器选项
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")  # 添加编译器选项 -Wall

# 设置 Debug 模式的编译选项
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g")  # 开启调试信息

# 设置 Release 模式的编译选项
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3")  # 开启优化

# 也可以写在一起
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -g -O3")

cmake还能使用循环和分支

# 判断
set(MY_VARIABLE "value1")
if (MY_VARIABLE STREQUAL "value1")
    message("MY_VARIABLE is equal to 'value1'")
elseif (MY_VARIABLE STREQUAL "value2")
    message("MY_VARIABLE is equal to 'value2'")
else()
    message("MY_VARIABLE is not equal to 'value1' or 'value2'")
endif()


# foreach循环

set(my_list 1 2 3 4 5)

foreach(item IN LISTS my_list)
    message("Current item: ${item}")
endforeach()

 如果需要设置不同的安装目录,比如debug和release版本分开安装,那么也可以使用cmake设置。需要注意的是cmake内置常量或者变量都是大写的,为了避免混淆,自定义常量或者变量的时候尽可能使用小写字母。

# 安装可执行文件
install(TARGETS myExecutable
    DESTINATION /path/to/installation
)

# 安装静态库文件
install(TARGETS myStaticLibrary
    DESTINATION /path/to/installation
)

# 安装动态库文件
install(TARGETS myDynamicLibrary
    DESTINATION /path/to/installation
)

git常用命令

基础命令:

git安装完成后首先需要配置用户名和邮箱,每次提交都会保存这些信息。

git config --global user.name "Your name"  
​
git config --global user.email "Your email"

仓库初始化:

git init

添加新建的文件到暂存区,可以选择一个或者所有新建文件

git add file_name
git add *

创建、查看、切换分支

# 查看所有分支
git branch
# 创建分支
git branch new-branch
# 切换分支
git checkout new-branch
# 创建并切换分支
git checkout -b feature-branch

提交git到本地或者远程仓库

# 首先需要切换到目标分支
git checkout target-branch

git add .
git commit -m "commit msg"

# 如果远程分支和本地分支重名
git push -u origin feature-branch


恢复到上一次的提交

# 恢复所有文件到上一次的提交
git checkout .
# 恢复单个文件到上一次的提交
git reset file_name

# 恢复到以前的提交
# 查看每次提交的哈希值
git log
# 会摒弃该次提交之后的所有提交
git reset --hard <commit_hash>
# 切换到某次提交
git checkout <commit_hash>

这是一条总结博客,由挨踢零声赞助。

  • 14
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值