2024-08-14

在Ubuntu 22.04版本下,可以使用update-alternatives工具来快速切换安装的GCC版本。假设你已经安装了多个GCC版本,可以按照以下步骤进行版本切换:

  1. 首先,确保你已经安装了多个GCC版本。你可以使用apt命令来安装更多版本的GCC,例如:



sudo apt install gcc-10 g++-10
sudo apt install gcc-11 g++-11
  1. 设置update-alternatives。首先,为gccg++设置一个名为gcc-x的组(这里的x是你想要的版本号):



sudo update-alternatives --install /usr/bin/gcc gcc-x /usr/bin/gcc-x 10
sudo update-alternatives --install /usr/bin/g++ g++-x /usr/bin/g++-x 10
  1. 然后,为每个需要切换的版本设置优先级:



sudo update-alternatives --install /usr/bin/gcc gcc-x /usr/bin/gcc-10 10
sudo update-alternatives --install /usr/bin/gcc gcc-x /usr/bin/gcc-11 5
  1. 最后,使用update-alternatives配置你想要使用的版本:



sudo update-alternatives --config gcc
sudo update-alternatives --config g++

执行上述命令后,系统会提示你选择哪个版本作为默认版本。选择你想要的版本,按照提示操作即可。

注意:将上述命令中的gcc-x/usr/bin/gcc-x/usr/bin/gcc-10/usr/bin/gcc-11替换为实际想要使用的版本。

2024-08-14

在2024年2月5日,安装GCC的步骤大致如下:

  1. 更新系统软件包列表:



sudo apt update
  1. 安装编译依赖的软件包:



sudo apt install build-essential

build-essential 包组包含了编译程序所需的基本软件包,如gcc、g++、make等。

如果你需要特定版本的GCC,或者build-essential包组中的版本不是你需要的版本,你可以从源代码手动编译安装。以下是从源代码编译安装GCC的基本步骤:

  1. 安装GCC依赖的软件包:



sudo apt install curl
sudo apt build-dep gcc
  1. 下载GCC源代码:



curl -O https://ftp.gnu.org/gnu/gcc/gcc-X.Y.Z/gcc-X.Y.Z.tar.gz

X.Y.Z替换为你想要安装的GCC版本号。

  1. 解压源代码:



tar -xzf gcc-X.Y.Z.tar.gz
cd gcc-X.Y.Z
  1. 配置GCC构建系统:



./contrib/download_prerequisites
cd ..
mkdir objdir
cd objdir
$PWD/../gcc-X.Y.Z/configure --prefix=/usr/local/gcc-X.Y.Z --enable-languages=c,c++ --disable-multilib
  1. 编译和安装GCC:



make -j$(nproc)
sudo make install

$(nproc)会使用你机器上所有可用的核心来并行编译,从而加快编译过程。

  1. 更新系统的GCC软链接(如果需要):



sudo update-alternatives --install /usr/bin/gcc gcc /usr/local/gcc-X.Y.Z/bin/gcc X
sudo update-alternatives --install /usr/bin/g++ g++ /usr/local/gcc-X.Y.Z/bin/g++ X
sudo update-alternatives --install /usr/bin/cc cc /usr/local/gcc-X.Y.Z/bin/gcc X
sudo update-alternatives --install /usr/bin/c++ c++ /usr/local/gcc-X.Y.Z/bin/g++ X
sudo update-alternatives --config gcc
sudo update-alternatives --config g++

X.Y.Z替换为你安装的GCC版本号,X是优先级,可以根据需要设置。

注意:这些命令需要在一个干净的环境中运行,没有其他版本的GCC干扰。如果你的系统已经有了GCC,你可能需要使用不同的软链接优先级或者完全不同的前缀来安装新版本的GCC。

2024-08-14

在Windows上访问通过NFS共享的Linux目录,需要确保Windows系统上已安装NFS客户端。以下是步骤和示例:

  1. 安装NFS客户端:

    • 在Windows 10和Windows 11上,可以通过启用"特性"来安装NFS客户端。具体操作是:

      1. 打开“控制面板” -> “程序” -> “启用或关闭Windows功能”。
      2. 勾选“NFS客户端”,然后点击“确定”。
  2. 配置NFS共享:

    • 在Linux服务器上,确保已经正确配置了NFS共享,并且Windows客户端的IP地址已被添加到允许访问的列表中。
  3. 挂载NFS共享:

    • 打开命令提示符或PowerShell,使用mount命令将NFS共享挂载到Windows上的某个目录。

示例代码:




mount \\Linux_Server_IP\shared_directory X:

这里,Linux_Server_IP是Linux服务器的IP地址,shared_directory是Linux上共享的目录名,X:是你希望在Windows上挂载该NFS共享的驱动器字母。

注意:如果你的Linux服务器使用的是非标准端口或者你想指定不同的本地挂载点,你需要使用额外的参数,例如:




mount -o nolock \\Linux_Server_IP\shared_directory X:

或者指定端口:




mount -o nolock,vers=3 \\Linux_Server_IP\shared_directory X:

在实际操作中,请替换Linux_Server_IPshared_directory为实际的IP地址和共享目录名。

2024-08-14

在Linux中,用户属于一个或多个组,每个组拥有文件或目录的特定权限。用户管理中的一个常见操作是变更用户所属的组。以下是如何使用命令行来变更用户所属组的示例:




# 将用户添加到新组
sudo usermod -a -G groupname username
 
# 将用户的主组改为新组
sudo usermod -m -g groupname username
 
# 示例:将用户"user1"添加到"developers"组
sudo usermod -a -G developers user1
 
# 示例:将用户"user2"的主组改为"developer"组
sudo usermod -m -g developer user2

在这些命令中:

  • -a 参数表示添加用户到一个新组,保留其在其他组的成员资格。
  • -G 参数指定用户要添加的组。
  • -m 参数用于同时更改用户的主组。
  • -g 参数指定新的主组。

确保在执行这些操作时具有相应的权限,通常需要root权限。使用groups命令可以查看用户所属的组。

2024-08-14

在Linux中,你可以使用find命令来查找特定目录下包含特定关键字的文件,然后使用grep命令在这些文件中搜索关键字,并使用xargs来处理findgrep的输出。以下是一个示例:

假设你想在/home/user/documents目录下搜索包含关键字"example"的文件,并列出这些文件的名称。




find /home/user/documents -type f -print0 | xargs -0 grep -l 'example'

解释:

  • find /home/user/documents: 查找/home/user/documents目录下的所有文件。
  • -type f: 仅查找文件,不包括目录。
  • -print0: 在文件名之间打印null字符,以正确处理文件名中的空格或特殊字符。
  • |: 管道,将find的输出传递给xargs
  • xargs -0: 使用null字符作为分隔符来读取输入。
  • grep -l 'example': 在文件中搜索字符串"example",并只列出包含该字符串的文件名。

这个命令会列出所有包含关键字"example"的文件名。

2024-08-14

在Linux系统中,可以通过使用systemd服务或者添加脚本到/etc/rc.local(如果系统使用的是较老的启动方式)来设置程序在开机时自启动。

使用systemd服务

  1. 创建一个新的systemd服务单元文件。例如,创建/etc/systemd/system/your-service.service



[Unit]
Description=Your Custom Startup Program
 
[Service]
ExecStart=/path/to/your/program
 
[Install]
WantedBy=multi-user.target
  1. 重新加载systemd管理器配置。



sudo systemctl daemon-reload
  1. 启用该服务以在开机时启动。



sudo systemctl enable your-service

添加到/etc/rc.local

  1. 如果系统使用的是较老的启动方式,编辑/etc/rc.local文件。



sudo nano /etc/rc.local
  1. 在文件中,在exit 0语句之前添加你的启动命令。



/path/to/your/program
exit 0

确保替换/path/to/your/program为你想要运行的程序的实际路径。如果你的程序需要特定的运行权限,请确保rc.local文件具有正确的权限设置。

2024-08-14

在Linux中,可以使用netstat命令查看端口占用情况。但需要注意的是,netstat命令在最新的Linux发行版中可能不默认安装,你可能需要使用yumapt等包管理工具来安装net-tools包。

安装net-tools(如果需要):




sudo yum install net-tools  # 对于基于Red Hat的发行版,如CentOS
# 或者
sudo apt-get install net-tools  # 对于基于Debian的发行版,如Ubuntu

查看端口占用的命令:




netstat -tuln

参数说明:

  • -t 表示显示TCP端口
  • -u 表示显示UDP端口
  • -l 表示显示监听状态的端口
  • -n 表示显示数字形式的端口和地址

例如,要查看80端口被哪个进程占用,可以使用以下命令:




netstat -tulnp | grep :80

这里,grep :80用于过滤出监听80端口的行。如果你看到输出,应该能看到相关进程的详细信息,包括进程ID(PID)。

2024-08-14

在CentOS 7上安装unrar以解压RAR压缩包的步骤如下:

  1. 首先,你需要添加EPEL仓库,因为unrar不在默认的仓库中。运行以下命令来添加EPEL仓库:



sudo yum install epel-release
  1. 接下来,更新你的系统:



sudo yum update
  1. 安装unrar



sudo yum install unrar
  1. 验证安装是否成功,使用unrar命令:



unrar

如果安装成功,你应该能看到unrar的帮助信息。

使用unrar解压RAR压缩包的基本命令格式如下:




unrar x yourfile.rar

这里的x参数表示解压到当前目录,并且保持所有文件结构。如果你想解压到指定目录,可以使用:




unrar x yourfile.rar /path/to/destination
2024-08-14

在Linux服务器之间传输文件,可以使用以下四种方法:

  1. 使用scp (Secure Copy):



scp /path/to/local/file username@remote_server:/path/to/remote/directory
  1. 使用rsync (Remote Sync):



rsync -avz /path/to/local/file username@remote_server:/path/to/remote/directory
  1. 使用sftp (SSH File Transfer Protocol):



sftp username@remote_server
put /path/to/local/file /path/to/remote/directory
  1. 使用ssh (Secure Shell) 结合 tar 进行压缩传输:



tar -czvf - /path/to/local/file | ssh username@remote_server 'cd /path/to/remote/directory && tar -xzvf -'

每种方法都需要服务器之间网络连接,并且需要知道远程服务器的用户名和IP地址或主机名。这些命令应在本地服务器上运行。记得替换路径和文件名以适应你的具体情况。

2024-08-14



#include <stdio.h>
 
// 定义GCC和G++的版本信息
#define GCC_VERSION_4_1_1 20070807 // GCC 4.1.1 发布日期
#define GCC_VERSION_4_4_0 20090413 // GCC 4.4.0 发布日期
#define GCC_VERSION_4_8_1 20130522 // GCC 4.8.1 发布日期
#define GCC_VERSION_9_1_0 20180816 // GCC 9.1.0 发布日期
#define GXX_VERSION_3_4_5 20090120 // G++ 3.4.5 发布日期
#define GXX_VERSION_4_8_1 20130522 // G++ 4.8.1 发布日期
#define GXX_VERSION_9_1_0 20180816 // G++ 9.1.0 发布日期
 
// 打印GCC和G++各个版本的发布年份及新特性
void print_versions_and_features() {
    printf("GCC Versions:\n");
    printf("4.1.1 - 发布于: %d, 新特性: C++0x 支持\n", GCC_VERSION_4_1_1);
    printf("4.4.0 - 发布于: %d, 新特性: 并行代码生成\n", GCC_VERSION_4_4_0);
    printf("4.8.1 - 发布于: %d, 新特性: 静态初始化的线程局部存储\n", GCC_VERSION_4_8_1);
    printf("9.1.0 - 发布于: %d, 新特性: C++17 支持\n\n", GCC_VERSION_9_1_0);
 
    printf("G++ Versions:\n");
    printf("3.4.5 - 发布于: %d, 新特性: 支持C++11\n", GXX_VERSION_3_4_5);
    printf("4.8.1 - 发布于: %d, 新特性: 完整的C++11支持\n", GXX_VERSION_4_8_1);
    printf("9.1.0 - 发布于: %d, 新特性: 完整的C++17支持\n\n", GXX_VERSION_9_1_0);
}
 
int main() {
    print_versions_and_features();
    return 0;
}

这段代码定义了一些假的GCC和G++版本发布年份,并且打印出了这些版本的发布信息和相关的新特性。在实际情况中,你需要查询官方文档或者其他可靠的资料来获取正确的发布年份和特性信息。