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>
这是一条总结博客,由挨踢零声赞助。