Linux工作常用命令

在 Linux 中,有许多常用的命令可用于执行各种任务,包括文件管理、系统管理、网络管理等。以下是一些常用的 Linux 命令:

  1. 文件和目录操作
    • ls: 列出目录内容。
    • cd: 切换目录。
    • pwd: 显示当前工作目录。
    • mkdir: 创建新目录。
    • touch: 创建新文件或更新文件的访问和修改时间戳。
    • cp: 复制文件和目录。
    • mv: 移动或重命名文件和目录。
    • rm: 删除文件和目录。
    • cat: 查看文件内容。
    • moreless: 分页查看文件内容。
    • grep: 在文件中搜索指定模式。
    • find: 在文件系统中查找文件。
  2. 系统管理
    • ps: 显示当前运行的进程。
    • top: 实时显示系统资源使用情况和进程信息。
    • kill: 终止进程。
    • shutdown: 关闭系统。
    • reboot: 重启系统。
    • uname: 显示系统信息。
    • df: 显示磁盘空间使用情况。
    • du: 显示目录或文件的磁盘使用情况。
    • free: 显示系统内存使用情况。
    • chmod: 修改文件权限。
    • chown: 修改文件所有者和组。
    • passwd: 修改用户密码。
  3. 用户和组管理
    • useradd: 添加新用户。
    • userdel: 删除用户。
    • usermod: 修改用户属性。
    • groupadd: 添加新用户组。
    • groupdel: 删除用户组。
    • groupmod: 修改用户组属性。
  4. 网络管理
    • ifconfig: 显示或配置网络接口信息(已废弃,在新版本中使用 ip 命令替代)。
    • ip: 显示或配置网络接口信息。
    • ping: 向目标主机发送 ICMP 回显请求以测试网络连接。
    • traceroutetracepath: 显示到目标主机的路由路径。
    • netstat: 显示网络连接、路由表和网络接口统计信息。
    • wgetcurl: 下载文件或内容。
    • ssh: 安全 Shell,用于远程登录和执行命令。

这些是一些 Linux 中常用的命令,但 Linux 系统提供了更多功能丰富的命令和工具,具体使用取决于你的需求和场景。

find命令

find 命令是在 Linux 和类 Unix 系统中用于在文件系统中搜索文件和目录的工具。

它提供了广泛的搜索选项,可以根据不同的标准来定位文件和目录。以下是 find 命令的一些常见用法和选项:

  1. 基本用法

    find [path...] [expression]
    
    • path: 指定要搜索的起始路径。如果未指定,则默认从当前目录开始搜索。
    • expression: 指定搜索的条件和操作。
  2. 常用选项

    • -name pattern: 根据文件名模式进行搜索。
    • -type type: 指定要搜索的文件类型,如 f 表示普通文件,d 表示目录等。
    • -size [+|-]size: 根据文件大小进行搜索,+size 表示大于指定大小,-size 表示小于指定大小。
    • -exec command {} \;: 对搜索到的每个文件执行指定的命令。
    • -print: 将搜索到的文件名输出到标准输出。
    • -delete: 删除搜索到的文件。
    • -maxdepth level: 指定搜索的最大深度。
    • -mindepth level: 指定搜索的最小深度。
  3. 示例

    • 搜索当前目录及其子目录中所有文件名以 .txt 结尾的文件:

      ```

      find . -name "*.txt"

 ├── test-find
 │   └── a
 │       ├── a.txt
 │       └── b
 │           ├── b1.txt
 │           ├── b2.txt
 │           ├── b3.txt
 │           ├── b4.txt
 │           ├── b5.txt
 │           └── c
 │               ├── c1.log
 │               ├── c2.log
 │               ├── c3.log
 │               ├── c4.log
 │               ├── c5.log
 │               └── d
 │                   └── e
 ├── test.txt
 ├── use-vim.txt
 └── yuchao.txt



 root@VM-8-7-ubuntu:~# find /root/test-find/    -name '*.txt'
 /root/test-find/a/b/b3.txt
 /root/test-find/a/b/b2.txt
 /root/test-find/a/b/b4.txt
 /root/test-find/a/b/b5.txt
 /root/test-find/a/b/b1.txt
 /root/test-find/a/a.txt

 # 要你的结果,不要那么多前缀
 root@VM-8-7-ubuntu:~# find ./test-find/ -name '*.txt'
 ./test-find/a/b/b3.txt
 ./test-find/a/b/b2.txt
 ./test-find/a/b/b4.txt
 ./test-find/a/b/b5.txt
 ./test-find/a/b/b1.txt
 ./test-find/a/a.txt

 root@VM-8-7-ubuntu:~# find ./test-find/ -name '*.log'
 ./test-find/a/b/c/c4.log
 ./test-find/a/b/c/c2.log
 ./test-find/a/b/c/c5.log
 ./test-find/a/b/c/c1.log
 ./test-find/a/b/c/c3.log


 ```
  • 搜索 当前 目录中所有普通文件并删除它们:

    ```

    先找到所有文件

    root@VM-8-7-ubuntu:~# find . -type f -ls

 # 找到所有目录
 root@VM-8-7-ubuntu:~# find . -type d     -ls

 # 找到所有的txt文件,且删除
 root@VM-8-7-ubuntu:~# find . -type f  -name '*.txt' -delete 
 root@VM-8-7-ubuntu:~# 
 root@VM-8-7-ubuntu:~# find . -type f  -name '*.txt'


 ```
  • 搜索 /home 目录中大小大于 1MB 的文件:

    ```

    find /home -type f -size +1M

    找出大于1M的文件且统计其单位

    root@VM-8-7-ubuntu:~# find /home -type f -size +1M -exec du -h {} \;

 ```
  • 搜索 /var/log 目录中修改时间在 7 天以内的文件:

    ```

    文件修改时间,在这周内 4-8 4-1前

    find /var/log -mtime -7

 # 超过7天被修改的文件,超过一周了
 find /var/log -mtime +7

 # 正好是第7天被修改的文件
 find /var/log -mtime 7

 ```
  • 搜索 /usr/bin 目录中名为 gcc 的可执行文件并打印它们的路径:

    root@VM-8-7-ubuntu:~# find /usr/bin -type f -name '*gcc*'
    /usr/bin/c99-gcc
    /usr/bin/x86_64-linux-gnu-gcc-11
    /usr/bin/x86_64-linux-gnu-gcc-ranlib-11
    /usr/bin/c89-gcc
    /usr/bin/x86_64-linux-gnu-gcc-nm-11
    /usr/bin/x86_64-linux-gnu-gcc-ar-11
    

find 命令的选项非常丰富,可以根据具体的需求灵活组合使用。需要注意的是,在使用 find 命令时要谨慎,特别是在使用删除操作时,以免意外删除重要文件。建议在测试过程中先使用 -print 选项输出结果,确认结果正确后再执行删除或其他操作。

案例

当在实际工作中使用 find 命令时,可能会遇到各种不同的情况和需求。以下是一些实际工作场景下常见的 find 命令用法案例:

  1. 查找特定类型的文件

    • 搜索系统中所有的文本文件:

      find / -type f -name "*.txt"
      
    • 查找并列出所有目录:

      find /path/to/search -type d
      
  2. 根据文件大小进行搜索

    • 查找大于 100MB 的文件:

      find / -type f -size +100M
      
    • 查找小于 1KB 的文件:

      find / -type f -size -1k
      
  3. 根据文件的修改时间进行搜索

    • 查找最近 7 天内修改过的文件:

      find / -type f -mtime -7
      
    • 查找修改时间在 30 天前的文件:

      find / -type f -mtime +30
      
  4. 结合 -exec 执行操作

    • 删除所有 .tmp 文件:

      find /path/to/search -type f -name "*.tmp" -exec rm {} \;
      
    • 修改所有 .txt 文件的权限为只读:

      find /path/to/search -type f -name "*.txt" -exec chmod 644 {} \;
      
  5. 在特定深度范围内搜索

    • 只在当前目录及其子目录中搜索:

      find . -maxdepth 1 -type f -name "*.txt"
      
    • 搜索深度为 2 的目录中的文件:

      find /path/to/search -mindepth 2 -maxdepth 2 -type f
      
  6. 查找特定用户的文件

    • 查找 /home目录下所有属于 user1用户的文件:

      
      find /home -type f -user user1
      

这些案例只是 find 命令在实际工作中的一些用法示例,你可以根据具体的需求和场景进一步调整和组合命令选项。

dd命令

dd 命令是一个强大的 Unix/Linux 工具,用于复制和转换文件。它通常用于复制磁盘、创建镜像、备份和恢复数据等任务。dd 命令的基本用法如下:

dd if=input_file of=output_file [options]

其中:

  • if=input_file: 指定输入文件的路径或者设备名。
  • of=output_file: 指定输出文件的路径或者设备名。
  • [options]: 可选参数,用于指定复制过程中的一些选项。

以下是一些常用的 dd 命令选项和用法示例:

  1. 复制文件

    
    dd if=input_file of=output_file
    

    这将从 input_file 复制数据到 output_file

  2. 复制设备

     dd if=/dev/sda of=/dev/sdb
    

    这将从 /dev/sda 设备复制数据到 /dev/sdb 设备,通常用于硬盘克隆或备份。

  3. 指定块大小

    
    dd if=input_file of=output_file bs=4K
    

    这将指定块大小为 4KB,即每次复制 4KB 的数据。

  4. 指定复制大小

    
    dd if=input_file of=output_file count=100
    

    这将指定只复制文件的前 100 个块。

  5. 显示进度

    
    dd if=input_file of=output_file status=progress
    

    这将显示复制过程的进度信息。

  6. 跳过输入文件的头部数据

    
    dd if=input_file of=output_file skip=10
    

    这将跳过输入文件的前 10 个块。

  7. 直到结束符为止复制

    
    dd if=input_file of=output_file until=end_marker
    

    这将复制输入文件直到遇到指定的结束标志符。

  8. 修改数据

    
    dd if=input_file of=output_file conv=ucase
    

    这将将输出文件中的所有字符转换为大写。

  9. 创建随机数据

    
    dd if=/dev/urandom of=random_file bs=1M count=10
    

    这将创建一个大小为 10MB 的随机数据文件。

dd 命令非常强大,但同时也很危险,因为它允许直接访问设备,并且没有很多安全检查。在使用 dd 命令时,请务必谨慎,并确保你了解命令选项的含义以及操作的后果。错误的使用可能会导致数据丢失或系统损坏。

tree命令

tree 命令用于以树状结构显示目录和文件的层次结构。它是一个非常有用的工具,可以帮助用户快速了解目录结构,并可选地显示文件的属性信息。以下是 tree 命令的基本用法和一些常用选项:

cssCopy code
tree [options] [directory]

其中 [options] 是可选参数,[directory] 是要显示树状结构的目录。如果未指定目录,则默认为当前目录。

一些常用的 tree 命令选项包括:

  • -a:显示所有文件和目录,包括隐藏的文件。
  • -d:只显示目录,不显示文件。
  • -f:以完整路径的方式显示文件名。
  • -L level:指定要显示的目录层级深度。
  • -l:显示文件和目录的权限、用户、组和修改日期等详细信息。
  • -h:使用人类可读的格式显示文件大小。
  • -p:以文件类型为基础进行排序。
  • -u:按文件访问时间(atime)排序而不是修改时间(mtime)排序。
  • -r:反向排序。
  • -I pattern:排除与指定模式匹配的文件或目录。

下面是一些常用示例:

  1. 显示当前目录的树状结构

    
    tree
    
  2. 显示指定目录的树状结构

    
    tree /path/to/directory
    
  3. 只显示目录,不显示文件

    
    tree -d
    
  4. 显示指定目录下的目录层级结构

    
    tree -L 2 /path/to/directory
    
  5. 显示文件和目录的详细信息

    
    tree -l
    
  6. 使用人类可读的格式显示文件大小

    
    tree -h
    
  7. 排除指定模式的文件或目录

    
    tree -I "*.txt"
    

tree 命令是一个非常方便的工具,可以用于快速浏览文件系统的结构,特别是对于大型目录结构,它能够提供清晰的展示。

scp命令

image-20240323145355587

下载

image-20240323145408231

A
B
机器之间的通信情况

能首发数据 前提是 网络通信ok

本地练习

A  ,B 机器,在一个局域网下,互相首发数据。

# 腾讯云服务器给各位演示

于超老师的个人电脑(家庭宽带,电信,公网IP)  ------(公网IP 49.232.220.205 ) 腾讯云服务器

scp(Secure Copy Protocol)命令用于在本地系统和远程系统之间进行安全的文件传输。它基于SSH协议,通过加密的方式传输文件,因此非常适合在不同主机之间安全地复制文件和目录。以下是 scp 命令的基本用法和一些常用选项:


scp [options] source destination


# 语法,案例
scp 参数  源文件  目标文件

# 拉取腾讯云服务器的 yuchao.txt文件到 本地桌面

# git bash这个终端操作

# 前提是有一个可以基于ssh登录的账户  ubuntu账户
# root用户去测试,

# 拉取远程主机的文件,到本地目录
scp  ubuntu@49.232.220.205:/home/ubuntu/yuchao.txt ./Desktop/                   

# 发送本地文件,到远程主机,上传到服务器,不改名字

scp 参数  源文件  目标文件

$ scp ~/Desktop/yuchao.txt ubuntu@49.232.220.205:/home/ubuntu/yuchao-2.txt                                          [11:14:50]
ubuntu@49.232.220.205's password:
yuchao.txt


# 拷贝文件夹,递归拷贝,本地的一个文件夹,全部发送给远程主机
scp -r ~/Desktop/lol ubuntu@49.232.220.205:/home/ubuntu

其中 [options] 是可选参数,source 是源文件或目录,destination 是目标路径。sourcedestination 可以是本地路径或远程路径(格式为user@host:path)。

一些常用的 scp 命令选项包括:

  • -r:递归复制整个目录树。
  • -P port:指定远程主机的端口,默认为 22。
  • -p:保持源文件的修改时间、权限和访问时间。
  • -q:安静模式,不显示传输过程中的信息。
  • -v:详细模式,显示传输过程中的详细信息。
  • -C:启用压缩传输,可以加快传输速度。
  • -i identity_file:指定身份文件(私钥文件)。
  • -B:使用批处理模式(不提示输入密码或密钥短语)。
  • -l limit:限制传输带宽。

下面是一些常用示例:

  1. 从本地系统复制文件到远程系统

    
    scp local_file remote_user@remote_host:/remote/path
    
  2. 从远程系统复制文件到本地系统

    
    scp remote_user@remote_host:/remote/file /local/path
    
  3. 递归复制整个目录树

    
    scp -r local_dir remote_user@remote_host:/remote/path
    
  4. 指定远程主机的端口

    
    scp -P 2222 local_file remote_user@remote_host:/remote/path
    
  5. 保持源文件的修改时间、权限和访问时间

    
    scp -p local_file remote_user@remote_host:/remote/path
    
  6. 启用压缩传输

    
    scp -C local_file remote_user@remote_host:/remote/path
    
  7. 指定身份文件(私钥文件)

    
    scp -i /path/to/private_key local_file remote_user@remote_host:/remote/path
    

scp 命令非常实用,特别适用于需要在本地系统和远程系统之间安全传输文件的场景。

crontab

crontab 是一个用于在 Linux 和类 Unix 系统上设置定时任务的命令。它允许用户在指定的时间执行命令、脚本或程序,非常适合自动化重复性的任务。以下是 crontab 命令的基本用法和一些常用选项:

基本用法:

  1. 编辑当前用户的定时任务列表

    
    crontab -e
    
  2. 列出当前用户的定时任务列表

    
    crontab -l
    
  3. 删除当前用户的定时任务列表

    
    crontab -r
    

定时任务的格式:

一个典型的 crontab 记录由以下几个字段组成,用空格或制表符分隔:


* * * * * command

这五个星号表示了任务执行的时间间隔和时间点:

  • 第一个星号代表分钟 (0 - 59)
  • 第二个星号代表小时 (0 - 23)
  • 第三个星号代表日期 (1 - 31)
  • 第四个星号代表月份 (1 - 12)
  • 第五个星号代表星期几 (0 - 7,0 和 7 都表示周日)

选项和示例:

  1. 每分钟执行一次命令

    
    * * * * * command
    
  2. 每小时的第 30 分钟执行一次命令

    
    30 * * * * command
    
  3. 每天的凌晨执行一次命令

    
    0 0 * * * command
    
  4. 每周一的凌晨执行一次命令

    
    0 0 * * 1 command
    
  5. 每月的第一天凌晨执行一次命令

    
    0 0 1 * * command
    
  6. 每天的上午 8 点到下午 5 点,每隔半小时执行一次命令

    
    */30 8-17 * * * command
    
  7. 指定日志输出

    
    * * * * * command >> /path/to/logfile 2>&1
    
  8. 在特定时间运行命令

    
    0 20 * * 1-5 command   # 每周一至周五的晚上 8 点执行命令
    
  9. 每 10 分钟运行一次命令

    
    */10 * * * * command
    
  10. 定时任务的特殊字符

    • *:代表所有可能的值。
    • ,:用于指定多个值,如 1,3,5 表示 1、3 和 5。
    • -:用于指定范围,如 1-5 表示 1 到 5。
    • /:用于指定步长,如 */10 表示每隔 10。
    • @reboot:在系统启动时执行。

注意:crontab 使用的时间是系统时间,而不是本地时间。因此,要确保系统时间设置正确。

crontab 是一个非常强大的工具,可用于执行各种定时任务,如备份、日志清理、定期数据处理等。使用时需谨慎,确保定时任务不会对系统产生负面影响。

时间日期命令

在 Ubuntu 中,你可以使用以下命令来管理时间和日期:

  1. datedate 命令用于显示当前系统日期和时间,或者根据指定格式显示日期和时间。

    
    date
    
  2. timedatectltimedatectl 命令用于控制系统时间和日期,以及时区设置。

    • 显示系统时间和日期:

      
      timedatectl
      
    • 显示系统时区:

      
      timedatectl | grep Timezone
      
    • 设置时区:

      
      sudo timedatectl set-timezone your_time_zone
      

    其中 your_time_zone 是你希望设置的时区名称,例如 Asia/Shanghai

  3. hwclockhwclock 命令用于显示或设置硬件时钟(即 BIOS 中的时钟)的时间。

    • 显示硬件时钟时间:

      
      sudo hwclock
      
    • 将系统时间写入硬件时钟:

      
      sudo hwclock --systohc
      
  4. ntpdatentpdate 命令用于通过 NTP 协议从 NTP 服务器同步系统时间。

    • 同步系统时间:

      
      sudo ntpdate ntp_server
      

    其中 ntp_server 是你希望同步时间的 NTP 服务器地址。

  5. tzselecttzselect 命令用于交互式地选择时区。

    
    tzselect
    
  6. date命令的格式化选项date 命令支持许多格式选项,例如:

    • %Y:四位数年份。
    • %m:月份(01-12)。
    • %d:月中的第几天(01-31)。
    • %H:小时(00-23)。
    • %M:分钟(00-59)。
    • %S:秒(00-59)。 你可以结合这些选项以自定义日期和时间的格式,例如:
    
    date +"%Y-%m-%d %H:%M:%S"
    

这些命令可以帮助你在 Ubuntu 系统上管理时间和日期。

源码编译

很简单

源码编译是将软件源代码转换成可执行程序的过程。

一堆代码文件,英文字母
得通过程序,软件转换过程
转换为计算机,cpu能认识010101010
就有了作用,就可以执行了。

通常情况下,你会在 Linux 系统上遇到需要从源代码编译安装软件的情况,这可能是因为你需要定制特定的功能、优化性能,或者是某些软件包在官方仓库中不可用。下面是源码编译的基本步骤和详细解释:

基本步骤:

  1. 获取源代码

    • 下载源代码压缩包,通常以 .tar.gz.tar.bz2.tar.xz 等格式提供。
    • 从版本控制系统(如 Git、SVN)中获取源代码。
  2. 解压源代码

    
    tar -xf source_code.tar.gz
    
  3. 进入源代码目录

    
    cd source_code_directory
    
  4. 配置编译选项: 通常需要运行 ./configure 脚本来配置软件的编译选项,该脚本会检查系统环境并生成Makefile

    # 程序员,sh脚本 ,直接运行它
    # 配置,定义软件该如何编译,以及给软件拓展一些功能
    ./configure [options]
    
  5. 编译: 运行 make 命令来编译源代码。

    
    make
    
    # 自动读取makefile,调用系统,gcc编译器,linux中编译软件,大多数是指c程序
    # jar包,java系统
    # golang 编译
    
  6. 安装(可选): 如果需要,可以运行 make install 命令将编译好的程序安装到系统中。

    
    sudo make install
    

详细解释:

  • 配置编译选项
    • ./configure 脚本通常会检查系统环境和依赖关系,并根据检测结果生成 Makefile。它可以接受一些选项来定制编译过程,例如指定安装目录、启用或禁用某些功能等。
    • web server软件,系统有ssl perl zlib库
    • 常见的选项包括:
      • --prefix=PREFIX:指定安装目录。
      • --enable-feature:启用某个功能。
      • --disable-feature:禁用某个功能。
      • 更多选项可以通过运行 ./configure --help 查看。
  • 编译
    • make 命令根据 Makefile 文件编译源代码,它会执行 Makefile 中定义的编译规则来生成目标文件和可执行文件。
  • 安装
    • make install 命令将编译好的程序、库文件以及其他必要的文件复制到系统中。需要注意的是,运行 make install 需要超级用户权限,因此通常需要使用 sudo 命令来执行。

这些是源码编译的基本步骤和详细解释。在进行源码编译时,需要留意软件的文档或官方网站上提供的指导,以确保正确配置和编译软件。

编译相关工具

在 Ubuntu 中进行源码编译时,你通常需要安装一些基本的开发工具和依赖项,以确保源码可以成功编译。以下是一些常见的依赖项:

  1. 编译工具

    • build-essential:包含了一些基本的编译工具,如编译器(gcc、g++)、make 工具等。

       sudo apt update
      sudo apt install build-essential
      
  2. 自动配置工具

    • autoconf:用于自动生成软件的配置脚本。

      
      sudo apt install autoconf
      
    • automake:用于自动生成 Makefile。

      
      sudo apt install automake
      
    • libtool:用于管理动态库的工具。

      
      sudo apt install libtool
      
  3. 其他常见依赖项

    • pkg-config:用于检查已安装的库的版本信息。

      
      sudo apt install pkg-config
      
    • cmake:用于跨平台的构建系统,通常用于替代 autoconf 和 automake。

      
      sudo apt install cmake
      
  4. 特定软件包的依赖项

    • 某些软件包可能需要特定的依赖项,例如开发库、头文件等。你可以查看软件包的文档或官方网站来获取详细的依赖项信息,并根据需要安装这些依赖项。

在安装完上述基本依赖项后,你应该能够进行大多数常见的源码编译工作了。但请注意,具体的依赖项可能因不同的软件而有所不同,因此在编译特定软件之前,最好先查阅该软件的文档或官方网站,以了解其详细的编译依赖项。

apt install autoconf automake libtool pkg-config cmake -y

源码编译屏保程序

nginx,python3,xxx

骇客帝国,c程序开发屏保程序

libncurses-dev 是针对 ncurses 库的开发包,在 Ubuntu 中它提供了用于开发 ncurses 应用程序的头文件和静态库。ncurses 是一个用于控制终端的库,允许程序创建复杂的文本用户界面(TUI)。它提供了一系列函数和数据结构,使程序能够在终端上进行光标移动、颜色控制、屏幕刷新等操作,从而创建出像图形界面一样的用户交互体验。

在开发需要使用 ncurses 库的程序时,通常需要包含 ncurses.h 头文件,并链接 libncurses 静态库。安装 libncurses-dev 包可以方便地获取这些开发所需的文件,使得编写和编译 ncurses 应用程序更加便捷。

# 安装一些前置底层工具
# 这些经验哪来的,都是前人踩坑,遇见报错,google查资料解决,找到的办法
apt install build-essential autoconf automake libtool pkg-config cmake 
libncurses-dev -y



apt install wget -y

wget http://jaist.dl.sourceforge.net/project/cmatrix/cmatrix/1.2a/cmatrix-1.2a.tar.gz 

tar -xf cmatrix-1.2a.tar.gz 

cd /opt/cmatrix-1.2a
# 告诉编译器,我要吧软件安装到这个路径

root@yuchao-linux-2024:/opt/cmatrix-1.2a# ./configure --prefix=/opt/cmatrix/

# 如果编译报错,缺少
cmatrix.c:37:10: fatal error: curses.h: No such file or directory
# 只需要安装如下命令即可
apt install libncurses-dev -y
# 再次make即可
make 

make install

# 进入你指定的安装路径,看看是否生成二进制命令

root@yuchao-linux-2024:/opt/cmatrix-1.2a# cd /opt/cmatrix/bin/
root@VM-8-7-ubuntu:/opt/cmatrix# ls
bin  man

# 至此源码编译成功
root@VM-8-7-ubuntu:/opt/cmatrix/bin# ls /opt/cmatrix/bin/cmatrix 
/opt/cmatrix/bin/cmatrix


# 基于如下源码文件生成的
root@VM-8-7-ubuntu:/opt/cmatrix/bin# ls /opt/cmatrix-1.2a
acconfig.h  cmatrix    cmatrix.spec     config.h       config.sub    INSTALL      Makefile.in    mkinstalldirs  stamp-h
aclocal.m4  cmatrix.1  cmatrix.spec.in  config.h.in    configure     install-sh   matrix.fnt     mtx.pcf        stamp-h.in
AUTHORS     cmatrix.c  config.cache     config.log     configure.in  Makefile     matrix.psf.gz  NEWS           TODO
ChangeLog   cmatrix.o  config.guess     config.status  COPYING       Makefile.am  missing        README
root@VM-8-7-ubuntu:/opt/cmatrix/bin#

image-20240323150454309

环境变量PATH

环境变量 PATH 是一个在 Unix 和类 Unix 系统中非常重要的环境变量,它指定了系统在搜索可执行文件时应该查找的路径列表。当你在命令行中输入一个命令时,系统会按照 PATH 中指定的顺序在这些路径中搜索对应的可执行文件,并执行找到的第一个匹配项。

root@VM-8-7-ubuntu:/opt/cmatrix/bin# name="超哥牛皮"
root@VM-8-7-ubuntu:/opt/cmatrix/bin# 
root@VM-8-7-ubuntu:/opt/cmatrix/bin# 
root@VM-8-7-ubuntu:/opt/cmatrix/bin# echo ${name}
超哥牛皮
root@VM-8-7-ubuntu:/opt/cmatrix/bin# 
root@VM-8-7-ubuntu:/opt/cmatrix/bin# 
root@VM-8-7-ubuntu:/opt/cmatrix/bin# name="超哥牛啥呀牛 你个小子"
root@VM-8-7-ubuntu:/opt/cmatrix/bin# 
root@VM-8-7-ubuntu:/opt/cmatrix/bin# echo ${name}
超哥牛啥呀牛 你个小子

PATH 的结构:

  • PATH 是一个由冒号 : 分隔的路径列表,每个路径对应一个目录。
  • 通常情况下,PATH 的值以 /bin/usr/bin/usr/local/bin 等标准系统路径开始。
  • 你也可以将自定义的路径添加到 PATH 中,以便系统可以在这些路径中搜索你自己安装的可执行文件。

PATH 的作用:

  • 当你在命令行中输入一个命令时,系统会从 PATH 中列出的每个目录中依次查找这个命令对应的可执行文件,直到找到第一个匹配的文件为止。
  • 如果找不到对应的可执行文件,系统会提示“命令未找到”的错误。

修改 PATH

  • 你可以通过直接修改环境变量的方式来修改 PATH

  • 在 Bash shell 中,可以使用 export命令来设置 PATH,例如:

    export PATH="/custom/directory:$PATH"
    

    这样会将 /custom/directory 添加到 PATH

    的开头,使得系统优先搜索该目录中的可执行文件。

为什么 PATH 很重要?

  • PATH 的设置直接影响了系统中可执行文件的搜索顺序,从而决定了你在命令行中输入命令时系统会执行哪个程序。
  • 通过合理设置 PATH,你可以方便地管理系统中的可执行文件,使得你的自定义程序和系统自带程序能够被方便地找到和执行。

总之,PATH 是一个非常重要的环境变量,在使用命令行进行操作时起着至关重要的作用。因此,合理设置和管理 PATH 是系统管理和开发工作中的基本操作之一。

永久修改添加cmatrix环境变量

root@yuchao-linux-2024:/opt/cmatrix/bin# tail -1 ~/.bashrc 
export PATH=$PATH:/opt/cmatrix/bin
root@yuchao-linux-2024:/opt/cmatrix/bin# 
root@yuchao-linux-2024:/opt/cmatrix/bin# source ~/.bashrc 
root@yuchao-linux-2024:/opt/cmatrix/bin# 
root@yuchao-linux-2024:/opt/cmatrix/bin# cd
root@yuchao-linux-2024:~# 
root@yuchao-linux-2024:~# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/opt/cmatrix/bin
root@yuchao-linux-2024:~# 
root@yuchao-linux-2024:~# 
root@yuchao-linux-2024:~# which cmatrix
/usr/bin/cmatrix
root@yuchao-linux-2024:~#

卸载源码编译

要卸载通过源码编译安装的软件,通常需要手动删除已安装的文件和目录,因为源码安装通常不会创建包管理器可识别的安装记录。以下是一般的卸载步骤:

  1. 找到安装目录: 首先,你需要找到源码编译安装的软件所在的安装目录。通常情况下,这个目录会由你在编译时指定的 --prefix 选项决定,默认情况下可能是 /usr/local 或者 /opt 目录下的子目录。

  2. 删除安装目录: 使用 rm -rf 命令删除安装目录及其子目录和文件。

    sudo rm -rf /path/to/installation_directory
    
  3. 删除可能存在的其他文件: 如果在安装过程中创建了其他文件或目录,也需要一并删除。

  4. 清理环境变量(可选): 如果在安装过程中添加了环境变量,例如 PATH,可能需要手动删除或修改这些环境变量的设置。

  5. 卸载相关软件包(可选): 如果你在编译安装前安装了相关的开发工具或库,可以使用包管理器卸载这些软件包。这可以确保你的系统保持干净。

需要注意的是,这种方法可能不是最优雅和最安全的,因为它直接删除了文件和目录而没有记录。如果你还记得编译安装时所用的 Makefile,你也可以尝试运行 make uninstall 命令,这样会尝试删除安装过程中创建的文件和目录。但并不是所有的软件都提供了这个功能,所以这个方法并不总是可行的。

如果你担心删除过程中会删除到其他重要文件,建议提前备份重要数据或者确认安装目录下只包含你想删除的软件。

作业:编译安装Python3

2024年,ai热火,C C++

Python 二次开发

开发语言,自动化,运维,测开,AI类接口开发,python3 环境

有几种情况下可能会选择编译安装 Python 3:

  1. 最新版本需求:Linux 发行版通常会提供稳定版本的 Python,但可能不会及时更新到最新版本。如果你需要使用 Python 的最新功能或修复了的 bug,可能会选择编译安装最新版本的 Python。
  2. 特定配置需求:某些场景下,你可能需要自定义 Python 的配置选项,例如启用或禁用某些模块、调整编译参数等。通过编译安装,你可以自由地配置 Python。
  3. 虚拟环境需求:如果你希望在用户级别而不是系统级别上安装 Python,可以编译安装到用户的主目录下,或者使用虚拟环境管理多个 Python 版本。
  4. 依赖管理:有时,特定的应用程序或库可能需要特定版本的 Python,而不是系统中默认的版本。在这种情况下,编译安装可以让你安装所需的 Python 版本,并在不影响系统的情况下管理这些依赖关系。
  5. 自定义路径:默认情况下,系统包管理器安装的 Python 可能会将可执行文件安装到标准路径下,而你可能希望将 Python 安装到其他路径,或者配置其他路径作为 Python 的安装路径。通过编译安装,你可以自由选择安装路径。

总之,编译安装 Python 主要是为了获得更大的灵活性和控制权,以满足特定的需求和配置。虽然编译安装需要一些额外的工作和管理,但它为用户提供了更多的选择和定制的可能性。

root@yuchao-linux-2024:~# python3
python3            python3.10         python3.10-config  python3-config     
root@yuchao-linux-2024:~# python3 -V
Python 3.10.12

要求,安装python3.12.2版本,且配置好PATH环境变量。

wget https://www.python.org/ftp/python/3.12.2/Python-3.12.2.tar.xz
wget https://www.python.org/ftp/python/3.12.2/Python-3.12.2.tgz



# 注意校验文件完整性
root@yuchao-linux-2024:/opt# md5sum Python-3.12.2.tar.xz 
69b6dbd4672b4666a6073628e474a65a  Python-3.12.2.tar.xz

make命令

makemake install 是在编译和安装软件时使用的两个常见命令。

  1. make:
    • make 是一个用于自动化构建的命令,在编译源代码时特别有用。
    • 当你运行 make 命令时,它会检查当前目录中的 Makefile 文件,并按照其中的规则来执行编译任务。Makefile 中包含了构建软件所需的命令和依赖关系。
    • make 命令会执行 Makefile 中默认的目标(通常是编译源代码),但你也可以指定其他目标来执行特定的任务。
  2. make install:
    • make install 命令用于将已经编译好的软件安装到系统中。
    • 它会将编译后的文件复制到指定位置,通常是系统的标准路径中(例如 /usr/local/bin)。
    • make install 通常会根据 Makefile 中指定的安装路径将文件复制到合适的位置,但有时也可以通过命令行参数来指定安装路径。

综上所述,运行 make && make install 将首先编译源代码,然后将编译好的软件安装到系统中。

tar -xf Python-3.12.2.tar.xz 
./configure --prefix=/usr/local/python3.12
make && make install 

root@yuchao-linux-2024:~# tail -1 ~/.bashrc 
export PATH=$PATH:/opt/cmatrix/bin:/usr/local/python3.12/bin


root@yuchao-linux-2024:~# source ~/.bashrc 

root@yuchao-linux-2024:~# python3
python3            python3.10         python3.10-config  python3.12         python3.12-config  python3-config     
root@yuchao-linux-2024:~# python3.12
Python 3.12.2 (main, Mar 23 2024, 15:20:15) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 

root@yuchao-linux-2024:~# python3.12
Python 3.12.2 (main, Mar 23 2024, 15:20:15) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> asdasd^[[C^[[D^[[C^[[C^[[A^H^H^[[1;5D^[[1;5D^[[1;5C^[[1;5C^C
KeyboardInterrupt
>>> import readline
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'readline'
>>>

上述步骤,你已经成功编译安装好了python3.12.2

接下来是给各位演示一个生产下常见需求,如解释器,缺少某驱动,需要你重新安装。

编译的软件,如缺少功能

  • 删除旧软件
  • 安装系统所需底层库,redline驱动
  • 重新编译安装python3,自动configure检查环境,添加新功能
  • 成功修复。python3.12.2

修复libreadline-dev驱动

libreadline-dev 是用于开发的 GNU Readline 库的 Debian/Ubuntu 包。这个包提供了 GNU Readline 库的头文件和静态库,使开发者能够编写依赖于 Readline 功能的程序。

以下是 libreadline-dev 包中包含的主要内容:

  1. Readline 头文件:包含了编程时需要包含的头文件,通常是 readline/readline.hreadline/history.h。这些头文件包含了对 Readline 库功能的声明和定义。
  2. Readline 静态库:静态库文件 (libreadline.a) 包含了编译链接到你的程序中的 GNU Readline 库的实现。当你需要在程序编译期间链接 Readline 库时,你会使用这个静态库。

通过安装 libreadline-dev,开发者可以利用 GNU Readline 库的功能,如命令行编辑、自动补全和历史记录管理等,来增强他们的命令行程序。

这个库特别适用于开发需要用户交互的命令行应用程序,例如 Shell、交互式解释器或任何需要命令行界面的程序。

总之,libreadline-dev 是一个方便的开发工具包,使开发者能够轻松地利用 GNU Readline 库的功能,并在他们的应用程序中实现强大的命令行编辑和历史记录管理功能。

root@yuchao-linux-2024:~# rm -rf /usr/local/python3.12/
root@yuchao-linux-2024:~# 

root@yuchao-linux-2024:~# sudo apt install libreadline-dev -y

如果你使用 /usr/local/python3.12/ 编译并安装了 Python 3.12,但发现缺少了 readline 模块,你可以按照以下步骤解决:

  1. 安装 readline 库的开发包:首先,你需要确保你的系统上安装了 readline 库的开发包,因为 Python 的 readline 模块依赖于 readline 库。你可以使用以下命令安装:
sudo apt install libreadline-dev
  1. 重新编译 Python:接下来,你需要重新编译 Python,但这次需要确保在编译之前正确配置。在编译之前,进入 Python 的源代码目录,运行 configure 脚本并确保 readline 库的路径被正确检测到。你可以使用以下命令:
cd /path/to/Python/source
./configure --with-ensurepip=install --prefix=/usr/local/python3.12/
 --enable-optimizations

 make && make install



--with-ensurepip=install:这个选项告诉 Python 在编译时包含 ensurepip 模块,并在安装时安装 pip 包管理器。ensurepip 模块是一个标准库模块,用于确保 pip 在 Python 安装中可用。通过将此选项设置为 install,你可以确保在安装 Python 后,pip 会自动安装。

--enable-optimizations:这个选项启用了编译时的一些优化,以提高 Python 解释器的性能。
这些优化包括启用额外的 C 编译器标志,以及对解释器执行的一些优化。
启用此选项会使编译过程更慢,但最终的 Python 解释器性能会得到改善。



综上所述,运行 ./configure --with-ensurepip=install --enable-optimizations 这个命令告诉 Python 在编译时包含 ensurepip 模块,并在安装时安装 pip,同时也启用了一些编译时的优化,以提高 Python 解释器的性能。

确保在运行 configure 时,它能够检测到 readline 库。如果 readline 库位于非标准位置,你可能需要指定 --with-readline 选项并提供 readline 库的路径。

  1. 编译并安装 Python:运行 make 编译 Python,并运行 make install 安装它。这会将包括 readline 模块在内的所有标准库和模块安装到你的 /usr/local/python3.12/ 目录中。确保你有足够的权限来安装到 /usr/local 目录。
 make && make install
  1. 验证 readline 模块:完成安装后,验证 readline 模块是否正确安装。你可以运行 Python 解释器,并尝试导入 readline 模块:

/usr/local/python3.12/bin/python3.12

在 Python 解释器中执行:


import readline

如果没有错误,则表示 readline 模块已成功导入,现在可以在 Python 中使用了。

通过这些步骤,你应该能够正确编译并安装包括 readline 模块在内的 Python 3.12 版本。

不要修改默认python3命令

在某些情况下,你可以修改系统自带的Python 3,但这通常不是一个好主意。篡改系统自带的Python 3 可能会导致系统和其他软件的不稳定性或不可预测的行为。此外,如果你不小心篡改了Python 3 的关键部分,可能会导致系统无法正常工作。

相反,推荐的做法是在系统中安装另一个版本的Python,例如通过源代码编译的方式或使用包管理器(如apt、yum、pip等)。这样做可以避免破坏系统自带的Python,同时允许你在不影响系统稳定性的情况下使用其他Python版本。

如果你想要在系统中使用其他版本的Python,可以按照以下步骤操作:

  1. 安装你想要使用的Python版本到系统中。
  2. 使用适当的命令(例如python3.12)来调用新安装的Python版本,以区分系统自带的Python和新安装的版本。
  3. 避免修改系统自带的Python或其相关文件,以确保系统的稳定性和可维护性。

在使用新安装的Python版本时,请确保在使用之前进行充分测试,并注意可能出现的兼容性问题。

在Ubuntu系统中,许多系统软件和工具都依赖于Python 3。这些软件和工具可能使用Python 3来执行各种任务,例如配置管理、自动化、系统管理等。以下是一些通常依赖于系统默认的Python 3的软件和工具:

  1. apt/apt-get:Ubuntu的包管理器及其相关工具通常会使用Python脚本来执行包的安装、更新和卸载等操作。
  2. systemd:systemd服务管理器可能使用Python 3来执行一些服务配置和管理任务。
  3. GNOME桌面环境及其应用程序:许多GNOME桌面环境和应用程序(如Nautilus文件管理器)使用Python 3编写的插件和脚本。
  4. NetworkManager:Ubuntu中的网络管理器通常使用Python 3来执行网络配置和管理任务。
  5. Ubuntu系统配置工具:一些系统配置工具(例如系统设置)可能使用Python 3来执行配置任务。
  6. 系统脚本和工具:许多系统级别的脚本和工具可能使用Python 3来执行系统管理和配置任务。

这只是一些使用Python 3的示例,并不是全部。Python 3在Ubuntu系统中被广泛使用,因此有很多软件和工具都可能依赖于它。

root@yuchao-linux-2024:~# dpkg -l |grep python3 |head
ii  libpython3-dev:amd64                  3.10.4-0ubuntu2                         amd64        header files and a static library for Python (default)
ii  libpython3-stdlib:amd64               3.10.4-0ubuntu2                         amd64        interactive high-level object-oriented language (default python3 version)
ii  libpython3.10:amd64                   3.10.12-1~22.04.3                       amd64        Shared Python runtime library (version 3.10)
ii  libpython3.10-dev:amd64               3.10.12-1~22.04.3                       amd64        Header files and a static library for Python (v3.10)
ii  libpython3.10-minimal:amd64           3.10.12-1~22.04.3                       amd64        Minimal subset of the Python language (version 3.10)
ii  libpython3.10-stdlib:amd64            3.10.12-1~22.04.3                       amd64        Interactive high-level object-oriented language (standard library, version 3.10)
ii  python3                               3.10.4-0ubuntu2                         amd64        interactive high-level object-oriented language (default python3 version)
ii  python3-apport                        2.20.11-0ubuntu82.5                     all          Python 3 library for Apport crash report handling
ii  python3-apt                           2.3.0ubuntu2                            amd64        Python 3 interface to libapt-pkg
ii  python3-attr                          21.2.0-1                                all          Attributes without boilerplate (Python 3)
root@yuchao-linux-2024:~#

md5sum

md5sum 是一个用于计算文件 MD5 摘要的命令。MD5(Message-Digest Algorithm 5)是一种常用的哈希函数,它将任意长度的数据映射为固定长度的散列值,通常是一个 128 位的十六进制数字。

在使用 md5sum 命令时,它会读取指定文件的内容,并计算出该文件的 MD5 值。这个值通常被称为文件的 MD5 摘要或 MD5 校验和,它是由文件的内容决定的,即使文件名不同、路径不同,只要文件内容一致,其 MD5 值也应该一致。

在你提供的例子中,md5sum Python-3.12.2.tar.xz 表示计算名为 Python-3.12.2.tar.xz 的文件的 MD5 摘要。计算完成后,它会输出一个 128 位的十六进制数字作为结果。例如,你提供的结果 69b6dbd4672b4666a6073628e474a65a 就是该文件的 MD5 摘要。

MD5 摘要通常用于验证文件的完整性,例如在下载文件时,你可以计算文件的 MD5 摘要,并与官方提供的 MD5 摘要进行比较,以确保文件在传输过程中没有被篡改。

root@yuchao-linux-2024:/opt# md5sum Python-3.12.2.tar.xz 
e7c178b97bf8f7ccd677b94d614f7b3c  Python-3.12.2.tar.xz

root@yuchao-linux-2024:/opt# ll -h Python-3.12.2.tar.xz 
-rw-r--r-- 1 root root 20M Mar 23 15:14 Python-3.12.2.tar.xz

image-20240323151635455

Copyright © www.yuchaoit.cn 2024 all right reserved,powered by Gitbook作者:猿来教育 2024-05-11 17:53:30

results matching ""

    No results matching ""