Linux系统远程操作和程序编译

一、远程登陆

1.Ubuntu网络配置

更改为桥接模式

终端中使用ifconfig指令

修改Ubuntu网络配置文件:sudo nano /etc/network/interfaces

添加:

auto lo

iface lo inet loopback

auto ens33

iface ens33 inet static

address 192.168.43.109

netmask 255.255.255.0

gateway 192.168.43.1

指令:sudo nano /etc/resolv.conf

添加:

nameserver 192.168.43.1

2.创建用户

代码:

sudo useradd -m user -s /bin/bash

sudo passwd user

sudo adduser user sudo

sudo nano /etc/sudoers

3.ssh安装

代码:

sudo apt install ssh

ps -e | grep ssh

4.putty远程登陆

5.树莓派创建新用户

代码

sudo useradd -m -s /bin/bash user

passwd user

sudo nano /etc/sudoers

6.树莓派上开启ftp服务

下载vsftpd:

sudo apt-get install vsftpd

修改配置文件:

cd /etc/

sudo gedit vsftpd.conf

write enable=YES

local_umask=022

anon_upload_enable=YES

anon_mkdir_write_enable=YES

重启服务:

sudo service vsftpd restart

7.Windows使用ftp进行操作

在终端中连接树莓派指令:ftp +树莓派ip

上传文件:

lcd (主机路径)

cd (树莓派目录)

put (文件路径)

下载:

get (文件名)

8.VNC

ubuntu安装VNC server:apt-cache search vncserver

安装:sudo apt-get install vnc4server

报错解决:sudo apt-get update

配置VNCserver:sudo nano /home/lyy/.vnc/xstartup

Windows VNC viewer安装登陆

二、talk程序

代码:

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <unistd.h>

#include <sys/types.h>

#include <sys/wait.h>

#define BUFFER_SIZE 1024

int main() {

int parent_to_child[2]; // 父进程写,子进程读

int child_to_parent[2]; // 子进程写,父进程读

pid_t pid;

char buffer[BUFFER_SIZE];

复制代码
// 创建两个管道
if (pipe(parent_to_child) == -1 || pipe(child_to_parent) == -1) {
    perror("pipe");
    exit(EXIT_FAILURE);
}

// 创建子进程
pid = fork();
if (pid == -1) {
    perror("fork");
    exit(EXIT_FAILURE);
}

if (pid > 0) {  // 父进程
    close(parent_to_child[0]);  // 关闭父进程不用的读端
    close(child_to_parent[1]);  // 关闭父进程不用的写端
    
    printf("父进程(进程ID: %d)已启动,输入'exit'退出\n", getpid());
    
    while (1) {
        // 父进程发送消息
        printf("父进程> ");
        fgets(buffer, BUFFER_SIZE, stdin);
        buffer[strcspn(buffer, "\n")] = '\0';  // 去掉换行符
        
        if (strcmp(buffer, "exit") == 0) {
            write(parent_to_child[1], buffer, strlen(buffer) + 1);
            break;
        }
        
        write(parent_to_child[1], buffer, strlen(buffer) + 1);
        
        // 父进程接收消息
        int nbytes = read(child_to_parent[0], buffer, BUFFER_SIZE);
        if (nbytes <= 0) {
            break;
        }
        printf("子进程说: %s\n", buffer);
        
        if (strcmp(buffer, "exit") == 0) {
            break;
        }
    }
    
    close(parent_to_child[1]);
    close(child_to_parent[0]);
    wait(NULL);  // 等待子进程结束
    printf("父进程退出\n");
} else {  // 子进程
    close(parent_to_child[1]);  // 关闭子进程不用的写端
    close(child_to_parent[0]);  // 关闭子进程不用的读端
    
    printf("子进程(进程ID: %d)已启动,输入'exit'退出\n", getpid());
    
    while (1) {
        // 子进程接收消息
        int nbytes = read(parent_to_child[0], buffer, BUFFER_SIZE);
        if (nbytes <= 0) {
            break;
        }
        printf("父进程说: %s\n", buffer);
        
        if (strcmp(buffer, "exit") == 0) {
            break;
        }
        
        // 子进程发送消息
        printf("子进程> ");
        fgets(buffer, BUFFER_SIZE, stdin);
        buffer[strcspn(buffer, "\n")] = '\0';  // 去掉换行符
        
        if (strcmp(buffer, "exit") == 0) {
            write(child_to_parent[1], buffer, strlen(buffer) + 1);
            break;
        }
        
        write(child_to_parent[1], buffer, strlen(buffer) + 1);
    }
    
    close(parent_to_child[0]);
    close(child_to_parent[1]);
    printf("子进程退出\n");
    exit(EXIT_SUCCESS);
}

return 0;

}

结果:

三、OpenCV

1.安装OpenCV

unzip opencv-4.11.0.zip

cd opencv-4.11.0

sudo su

sudo apt-get update

sudo apt-get install cmake

sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff5.dev libswscale-dev

mkdir build

cd build

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ...

sudo make

sudo make install

配置环境:

sudo gedit /etc/ld.so.conf.d/opencv.conf

sudo ldconfig

sudo gedit /etc/bash.bashrc

source /etc/bash.bashrc

2.text1.cpp

#include <opencv2/highgui.hpp>

#include <opencv2/opencv.hpp>

using namespace cv;

using namespace std;

int main(int argc, char** argv)

{

CvPoint center;

double scale = -3;

IplImage* image = cvLoadImage("lena.jpg");

argc == 2? cvLoadImage(argv[1]) : 0;

cvShowImage("Image", image);

if (!image) return -1; center = cvPoint(image->width / 2, image->height / 2);

for (int i = 0;iheight;i++)

for (int j = 0;jwidth;j++) {

double dx = (double)(j - center.x) / center.x;

double dy = (double)(i - center.y) / center.y;

double weight = exp((dxdx + dy dy)scale);
uchar
ptr = &CV_IMAGE_ELEM(image, uchar, i, j * 3);

ptr[0] = cvRound(ptr[0] * weight);

ptr[1] = cvRound(ptr[1] * weight);

ptr[2] = cvRound(ptr[2] * weight);

}

Mat src;Mat dst;

src = cvarrToMat(image);

cv::imwrite("test.png", src);

cvNamedWindow("test",1); imshow("test", src);

cvWaitKey();

return 0;

}

编译命令:gcc test1.cpp -o test1 pkg-config --cflags --libs opencv

pkg-config是一个帮助查询已安装库信息的工具。

--cflags获取编译时需要的标志,包括头文件路径和其他编译选项。

--libs获取链接时需要的标志,包括:库文件路径

当执行该命令时:系统会查找OpenCV的.pc配置文件并从配置文件中读取头文件路径、库文件路径和依赖关系,再输出完整的编译和链接选项

Makefile:

CXX := g++

CXXFLAGS := -std=c++11 -Wall

OPENCV := $(shell pkg-config --cflags --libs opencv4 2>/dev/null || pkg-config --cflags --libs opencv)

SRC_DIR := src

BUILD_DIR := build

TARGET := $(BUILD_DIR)/test1

SRCS := (wildcard (SRC_DIR)/*.cpp)

OBJS := (patsubst ( S R C D I R ) / (SRC_DIR)/%.cpp, (SRCDIR)/(BUILD_DIR)/%.o,(SRCS))

all: (BUILD_DIR) (TARGET)

(TARGET): (OBJS)

(CXX) (CXXFLAGS) \^ -o @ $(OPENCV)

$(BUILD_DIR):

mkdir -p $(BUILD_DIR)

clean:

rm -rf $(BUILD_DIR)

run: ( T A R G E T ) . / (TARGET) ./ (TARGET)./(TARGET) your_image.jpg

.PHONY: all clean run

CMake:

cmake_minimum_required(VERSION 3.5)

project(OpenCV_Test CXX)

set(CMAKE_CXX_STANDARD 11)

set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(OpenCV REQUIRED)

message(STATUS "OpenCV library status:")

message(STATUS " version: ${OpenCV_VERSION}")

message(STATUS " libraries: ${OpenCV_LIBS}")

message(STATUS " include path: ${OpenCV_INCLUDE_DIRS}")

add_executable(test1 src/test1.cpp)

target_link_libraries(test1 ${OpenCV_LIBS})

install(TARGETS test1 DESTINATION bin)

相关推荐
刘俊辉个人博客15 分钟前
端口安全配置示例
运维·网络·数据库·计算机网络·安全·网络安全
猪猪b。19 分钟前
dhcp 配置IP实战演练!!!!!
运维·服务器·网络
m0_719817111 小时前
Linux运维新人自用笔记(用虚拟机Ubuntu部署lamp环境,搭建WordPress博客)
linux·学习
“αβ”2 小时前
Linux-多线程安全
linux·运维·服务器·ssh·github·线程·进程
我最厉害。,。2 小时前
Webshell篇&魔改哥斯拉&打乱特征指纹&新增后门混淆&过云查杀&过流量识别
linux
爱喝西北风的东北风3 小时前
Linux树莓派项目实战:外网访问、PWM呼吸灯、超声波测距与驱动开发
linux·运维·驱动开发
Blossom.1183 小时前
基于深度学习的智能图像去雾技术:技术与实践
运维·服务器·人工智能·深度学习·机器学习·sklearn·智能电视
铃木隼.3 小时前
haproxy搭建nginx网站访问
运维·nginx
Liugh3 小时前
图解 Linux 内核网络栈
linux