深入Linux命令行——Linux与开发环境

深入Linux命令行

让我们深入探讨Linux命令行,涵盖你提到的常用命令、文件权限、进程管理以及Shell脚本编写。(文章只适用于初学者)

一、常用命令

  1. grep

    grep常用于搜索文件内容。

    #小知识:查询正在运行的进程:ps -aux | grep 进程名称
    #或者命令pgrep 进程名称,名称可tab
    grep "pattern" filename
    grep -r "pattern" /path/to/directory #递归搜索
    grep -n "pattern" filename #显示行号
    grep -i "pattern" filename #忽略大小写
    
  2. sed

    sed用于流编辑。

    sed 's/old/new/g' filename #替换文本
    sed -n '1,5p' filename #打印第1行到第5行
    sed 'pattern/d' filename #删除包含pattern的行
    
  3. awk

    awk用于文本处理。

    awk '{print $1}' filename #打印每行第一个字段
    awk '/pattern/ {print}' filename #打印包含pattern的行
    awk '{sum+=$1} END {print sum}' filename #计算第一列的总和
    
  4. find

    find用于查找文件。

    find /path/to/directory -name "filename"
    find /path/to/directory -type f -name "*.txt"
    find /path/to/directory -mtime -7 #查找7天内修改过的文件
    
  5. ssh

    ssh远程连接。

    ssh root@rootIP
    ssh -i /path/to/private_key.pem root@rootIP
    
  6. scp

    scp用于远程控制。

    scp /path/to/local/file username@hostname:/path/to/remote/directory
    scp -i /path/to//path/to/private_key.pem
    <space>/path/to/local/file username@hostname:/path/remote/directory  # 使用密钥
    
  7. top/htop

    tophtop用于监控系统资源。

    top #实时监控状态
    htop #有更友好的界面
    
  8. ps

    ps用于显示进程。

    #小知识:pgrep 进程名称 ##查找进程
    #pkill 进程名称 ##杀死进程
    ps -aux #显示所有进程,可用管道符 | 进行grep查询
    ps -aux | grep "process_name" #查找特定进程
    
  9. netstat

    netstat用于显示网络连接。

    netsta -tuln #显示所有监听接口
    netsta -anp | grep "port_number" #显示特定端口进程 
    

二、文件权限

查看和修改文件权限

ls -l #查看文件权限
chmod 755 filename #修改文件权限
chown user:group filename #修改文件所有者和组

三、进程管理

查找和杀死程序

ps -aux | grep "process_name" #查找进程
kill -9 PID #杀死进程
pkill "process_name" #根据名称杀死程序,可Tab 

四、Shell脚本编写(Bash)

基本结构

#!/bin/bash
#代表注释


#定义一个变量
NAME="Your_name"

#打印输出
echo "Hello,$NAME!"

#条件判断
if [condition]; then
    echo "true"
else
    echo "fail"
if

#循环
for i in {1..5};do
 echo "这是第$i次循环!"
done 

#读取输入
read -p "请输入您的名字:" name
echo "你好,$name!" 

函数定义

#!/bin/bash
function greet(){
    echo "Hello,$1!"
}

greet "World"

五、综合实例

#!/bin/bash 

#检查参数
if [$# -ne 1];then
    echo "Usage:$0 <port_number>"
    exit 1
fi

PORT=$1

#查找占用指定端口的进程
PID=$(netstat -anp | grep :":$PORT" | awk '{print $7}' | cut -d'/' -f1)

#检查是否有进程占用端口    
if [-z "$PID"]; then
    echo "没有进程占用端口$PORT"
    exit 0
fi

#杀死占用端口的进程
echo "杀死占用端口 $PORT 的进程,PID:$PID"
kill -9 $PID

#检查进程是否被杀死
if [$? -eq 0]; then
    echo "进程已成功杀死"
else 
    echo "杀死进程失败"
fi

开发环境

Linux下的C++开发工具链包括编译器(如g++)、调试器(如gdb)以及构建工具(如make和CMake)。以下将详细讲解这些工具的使用方法,并通过示例帮助您更好地理解。

一、g++编译器

  1. 基本用法
  • 编译单个文件

    g++ source.cpp -o executable
    
  • -o:指定输出文件名。

  • 默认生成的可执行文件a.out

  • 指定C++标准:

    g++ -std=c++11 source.cpp -o executable
    
  • -std=c++11:指定使用 C++11 标准。

  • 添加调试信息

    g++ -g source.cpp -o executable
    
  • -g:在可执行文件中添加调试信息

  • 编译多个文件

    g++ source.1cpp source2.cpp -o executable
    
  • 链接外部库

    g++ source.cpp -o executable -lm
    
  • -l:链接库文件,-lm:表示链接数学库。

  1. 示例

    假设有一个简单的C++程序 Hello.cpp:

    #include <iostream>
    int main()
    {
        cout << "Hello,World!" <<std::endl;
        return 0;
    }
    

    编译并运行:

    g++ -std=c++11 hello.cpp -o hello
    ./hello
    

二、gdb调试器

  1. 基本用法

GDB是一个强大的调试工具,用于调试程序中的错误

  • 启动GDB
gdb ./executable
  • 常用命令

    • break<行号>:在指定行设置断点。

    • run:运行程序。

    • next:执行下一行(不进入函数)。

    • step:执行下一行(执行函数)。

    • continue:继续运行知道下一个断点。

    • print<变量>:打印变量的值。

    • bt:查看调用栈。

    • quit:退出GDB。

  1. 示例

    debug.cpp

    #include <iostream>
    int main(){
        int a=10;
        int b=0;
        std::cout << a / b << std::endl;
        return 0;
    }
    

编译并添加调试信息:

g++ -g -std=c++11 debug.cpp -o debug        

使用GDB调试:

gdb ./debug

在gdb中运行:

(gdb) break 5        //在第5行设置断点
(gdb) run            //运行程序
(gdb) print a / b    //打印变量值
(gdb) bt             //查看调用栈
(gdb) quit           //退出GDB

三、make和CMake构建工具

  1. Make工具

Make是一个自动化构建工具,通过读取Makefile文件来编译和链接程序

  • 简单的Makefile示例:
    CC = g++
    CFLAGS = -std=c++11 -Wall
    TARGET = myprogram
    SRCS = main.cpp util.cpp
    OBJS = $(SRCS:.cpp=.o)

    all:$(TARGET)

    $(TARGET):$(OBGS)
        $(CC)$(CFLAGS) -o $@$^
    %.o:%.cpp
        $(CC)$(CFLAGS) -c $< -o$@

  clean:
      rm -f $(OBJS)$(TARGET)
  • 使用方法
make //编译程序
make clean //清理生成的文件 
  1. CMake工具

CMake工具是一个跨平台的构建工具,通过 CMakelists.txt文件描述构建过程。

  • 简单的CMakeLists.txt示例:
  cmake_minimum_required(VERSION 3.10)
  project(MyProject CXX)

  set(CMAKE_CXX_STANDARD 11)
  add_executable(MyProgram main.cpp util.cpp)

  # 链接库(如果需要)
  target_link_libraries(MyProgram pthread)
  
  • 使用方法:
mkdir build
cd build 
cmake ..
make 
  1. 示例:

假设项目结构如下:

Myproject/
|——CMakeLists.txt
|——main.cpp
|——util.cpp

CMakeLists.txt内容:

cmake_minimum_required(VERSION 3.10)
project(MyProject CXX)

set(CMAKE_CXX_STANDARD 11)
add_executable(MyProgram main.cpp util.cpp)

编译步骤:

mkdir build
cd build
cmake ..
make./Myproject

四、综合示例

假设我们要开发一个简单的C++项目,包含两个源文件main.cpputil.cpp,并使用CMake进行构建。

  1. 项目结构
myproject/
|——CMakeLists.txt
|——main.cpp
|——util.cpp
|——include——util.h
  1. 源文件内容

main.cpp

#include <iostream>
#include “util.h"
int main(){
    std::cout << “The answer is : " << add(2,3) << std::endl;
    return 0;
}

util.cpp

include "util.h"
int add(int a,int b){
    return a+b;
}


util.h:

#pragma once

int add(int a, int b);

  1. CMakeLists内容:
cmake_minimum_required(VERSION 3.10)
project(MyProject CXX)

# 添加头文件搜索路径
include_directories(include)

# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 11)

# 添加可执行文件
add_executable(MyProgram main.cpp util.cpp)

  1. 编译运行
mkdir build
cd build
cmake ..
make
./Myproject

通过以上示例,您应该能够熟练使用 g++、gdb、make 和 CMake 进行 Linux 下的 C++ 开发。

posted @ 2025-06-04 13:15  Jaylan  阅读(22)  评论(0)    收藏  举报