Linux笔记

本文记录Linux入门过程中接触到的知识及遇到的一些问题(主要还是做自己的笔记用)

1.启动过程

链接: Linux启动过程详解
链接: 查看Linux系统日志

2.常用命令

链接: Linux操作系统里一个进程最多可以创建多少个线程?
链接: Linux – 将自己的shell脚本设置成命令
链接: linux修改临时ip地址命令
链接: Linux 下查看内存使用情况方法总结
链接: 永久修改linux系统时间
链接: Shell | 查询系统及CPU、硬盘、内存等硬件信息
链接: Linux命令三剑客之awk的使用(一)
链接: cat/grep命令查看文件指定行数
链接: Linux下查看内存信息和查找DIMM型号的方法
链接: Linux 基本操作命令 - Linux 三剑客之grep
链接: linux常用命令之cut

时间

查看时间

ls --full-time

在这里插入图片描述

stat filename

在这里插入图片描述
在这里插入图片描述

修改时间

root使用date指令:date -s
1、只修改日期,不修改时间,输入:
date -s 2007-08-03

2、只修改时间,输入:
date -s 14:15:00

3、同时修改日期时间,注意要加双引号,日期与时间之间有一空格,输入:
date -s "2007-08-03 14:15:00"

4、修改完后,记得输入:
clock -w

把系统时间写入CMOS

链接: 12117 报时服务

进程

杀死进程

链接: https://blog.csdn.net/weixin_41010198/article/details/122370405
根据进程号(PID)杀死进程:第二列显示的就是进程号:

kill PID

强制杀死进程,有些进程可能杀不死,就加个-9参数,强制让它死掉!
kill -9 PID(后边还可以跟多个进程 PID)
pkill:根据进程名杀死进程
kill:
方法的缺陷是,当我们有很多进程要杀死,不可能全部一个一个手动输进程号,因此能够根据进程名称中的关键字去杀进程,这样就可以批量杀死了,如下:
pkill 批量杀死进程

pkill -9 python

进程时间

time sudo ./xxxx.o

要查看某个进程在 Linux 上运行了多长时间,可以使用 ps 命令结合进程的 PID(进程标识符)来实现。

通过以下方式来获取进程运行时间:

  1. 首先,使用 ps -eo pid,etime,cmd 命令来列出所有进程的 PID、运行时间和命令信息。
ps -eo pid,etime,cmd
  1. 如果你知道目标进程的 PID,可以使用 grep 命令过滤并只显示目标进程的信息。假设目标进程的 PID 是 12345
ps -eo pid,etime,cmd | grep 12345

这将显示目标进程的 PID、运行时间和命令信息。

在运行结果中,etime 列显示的是运行时间,格式为 [[dd-]hh:]mm:ss。即天数-小时:分钟:秒数。

后台运行进程

在命令后边添加&

./xxx.o &

复制

cp -r 文件夹1 路径将文件夹1及以下所有文件复制到指定路径下

查看

查看所在行号grep -n 'configuration' test.txt

查看内存

vmstat -t l

在这里插入图片描述
procs:
r: 等待运行的可运行进程数(在运行队列中)。
b: 处于不可中断睡眠状态的进程数(等待I/O操作完成)。
memory:
swpd: 使用的交换空间量(以KB为单位)。
free: 空闲的物理内存量(以KB为单位)。
buff: 用作缓冲区的内存量(通常用于块设备I/O)。
cache: 用作缓存的内存量(用于文件和其他页缓存)。
swap:
si: 从交换空间换入到物理内存的数据量(以KB/s为单位)。
so: 从物理内存换出到交换空间的数据量(以KB/s为单位)。
io:
bi: 从块设备接收的块数(以块/s为单位,通常指读取操作)。
bo: 发送到块设备的块数(以块/s为单位,通常指写入操作)。
system:
in: 每秒中断次数,包括时钟中断。
cs: 每秒上下文切换次数。
cpu:
us: 用户模式使用的CPU时间百分比。
sy: 系统(内核)模式使用的CPU时间百分比。
id: 空闲的CPU时间百分比。
wa: 等待I/O完成的CPU时间百分比。
st: 被虚拟机管理器(如KVM)偷走的CPU时间百分比(不是所有系统都显示这一列)。
timestamp: 显示vmstat命令输出时的UTC时间戳。
从给出的数据看,系统看起来相当空闲,有大量的空闲内存(free列),并且CPU主要处于空闲状态(id列显示80%以上的空闲时间)。同时,系统没有进行大量的I/O操作(bi和bo列的值很低),并且没有使用交换空间(swpd为0)。

下载及下载源

在Linux中下载文件,最常用和灵活的命令之一是wget。wget是一个从网络上自动下载文件的命令行工具,支持HTTP、HTTPS和FTP协议。如果你还没有安装wget,你可以通过你的Linux发行版的包管理器来安装它。
以下是一些使用wget下载文件的基本示例:

  1. 下载文件
wget http://example.com/file.zip

这个命令会下载http://example.com/file.zip到当前目录下。
2. 指定下载文件的保存名称

wget -O newname.zip http://example.com/file.zip

使用-O选项,你可以指定下载文件保存时的名称。在这个例子中,下载的文件将被保存为newname.zip。
3. 在后台下载

wget -b http://example.com/largefile.zip

-b或–background选项会让wget在后台运行。这对于下载大文件非常有用,因为你可以继续在同一个终端会话中工作,而不需要等待下载完成。
4. 限制下载速度

wget --limit-rate=200k http://example.com/largefile.zip

如果你不希望wget占用过多的带宽,可以使用–limit-rate选项来限制下载速度。上面的例子中,下载速度被限制在200KB/s。
5. 断点续传
如果下载过程中被中断,wget支持断点续传。你只需要再次运行相同的命令即可。
6. 下载整个网站

wget -m http://example.com/

使用-m或–mirror选项,wget会尝试下载指定网站的所有内容,创建本地镜像。请注意,这可能会消耗大量的带宽和磁盘空间,并且可能违反某些网站的使用条款。
7. 使用代理下载
如果你需要通过代理服务器下载文件,可以使用–proxy选项。

wget --proxy=http://proxy-server:port http://example.com/file.zip

proxy-serverport替换为你的代理服务器的地址和端口。

请注意,wget的功能非常强大,上述只是其中的一部分常用选项。你可以通过man wget或wget --help命令查看更多选项和用法。

定时执行一个命令

如果你需要指定间隔(比如确保是2秒),可以这样做:

watch -n 2 your_command

通过一行while实现

while true; do your_command; sleep 2; done

查找文件路径

whereis只能搜索系统命令,不能搜索普通文件,可以列出命令、源文件和帮助文档的位置
在这里插入图片描述
参考链接: https://blog.csdn.net/qq_53332962/article/details/124385915
which也是搜索系统命令的命令,只能列出命令的位置
locate可以根据文件名查找文件位置,命令是将一些常用的目录做成索引库文件,第一次使用时要使用updatedb命令来生成索引数据库
find
find命令用于按照指定条件来查找文件
格式为 find [查找路径] 寻找条件 操作

ethtool

链接: linux网卡操作命令 ,查看Linux下网卡连接状态(up还是down)?
链接: Linux基础 | ethtool 网络命令,检查网卡速率等信息
链接: linux查看网卡信息的几种方法(命令)

ping指定网卡名称ping

ping -I 网卡名称 目标地址
在这里插入图片描述

查看第二个网卡的IP

ifconfig  | head -n 14 | tail -n +3 | grep "inet"  | head -n 1 | awk '{print $2}'

在这里插入图片描述

解压压缩

解压 unzip serial.zip -d serial
tar -xzvf etc.tar.gz
压缩 zip -r data.zip data
tar -czvf etc.tar.gz /etc/
参考链接: zip命令使用
参考链接: tar命令使用

mount挂载

链接: linux挂载U盘mount压缩tar
ls-l、用户密码设置、

dd命令应用

备份

要使用 dd 命令将 /dev/sda 备份到 /dpath/ss.iso,可以执行以下命令:

sudo dd if=/dev/sda of=/dpath/ss.iso bs=4M

如果你想要使用dd命令来读取整个/dev/sda硬盘(假设它是你的目标硬盘),并且每次读取1MB的数据,然后将这些数据丢弃到/dev/null中,你可以使用以下命令:

bash
dd if=/dev/sda of=/dev/null bs=1M status=progress
在这个命令中:

if=/dev/sda 指定输入文件(或设备)为/dev/sda。
of=/dev/null 指定输出文件为/dev/null,这样所有读取的数据都会被丢弃。
bs=1M 设置块大小为1MB,这意味着dd每次读取和写入(尽管这里输出到/dev/null)1MB的数据。
status=progress (在一些dd的实现中可用)会在复制过程中显示进度信息。这可以帮助你了解dd命令的执行进度,但不会显示每个块的详细信息。
警告:

请确保你知道自己在做什么,不要在生产环境的系统盘上执行这样的操作,除非你确切地知道后果。
这个命令将会尝试读取/dev/sda硬盘上的所有数据,包括分区表、文件系统和其他数据。这可能会花费很长时间,具体取决于硬盘的大小和速度。
读取整个硬盘到/dev/null是一个没有实际用处的操作,除非你正在测试硬盘的读取速度或查找读取错误。
如果你只是想测试硬盘的某个分区而不是整个硬盘,你应该将if参数更改为该分区的设备文件,例如/dev/sda1。

还原

将 ss.iso 文件还原到硬盘上,可以使用以下命令:

sudo dd if=/dpath/ss.iso of=/dev/sda bs=4M

这条命令的含义是将 ss.iso 文件的内容写入到 /dev/sda 设备中。请务必小心操作,因为这个命令会直接覆盖目标设备的数据,恢复操作前请务必备份重要数据。

读指定扇区

在Linux环境中,磁盘分区通常不会被称为"MSR分区"。“MSR分区"这一术语并非标准术语,在涉及存储介质(如U盘)时可能会产生混淆。一种可能性是你指的是"Microsoft Reserved Partition”,这是在使用GUID Partition Table(GPT)磁盘布局时Windows系统生成的一个特殊保留分区。它通常被标记为MSR,不包含文件系统,并且被用于某些Windows功能。

假定你需要访问的是这个类型的"MSR分区",你可以通过以下几个步骤来读取这个分区的内容:

  1. 首先,确定你的U盘设备文件。通常情况下,它可能是/dev/sdb/dev/sdc等等,具体取决于系统中其他已连接的磁盘。你可以使用lsblkfdisk -l命令来查看所有磁盘及其分区信息。

  2. 确认GPT分区布局和MSR分区的位置和大小。你可以使用gdiskpartedfdisk这样的工具(对于带有GPT分区表的磁盘,推荐使用gdisk)。

    sudo gdisk -l /dev/sdX
    

    /dev/sdX替换为你的U盘设备文件。

    查找属于Microsoft Reserved的分区,并记下它的起始和结束扇区。

  3. 使用dd来读取MSR分区的内容。请将下面命令中的参数替换为实际的分区位置、大小和输出文件路径:

    sudo dd if=/dev/sdX of=/path-to-output/msr.img skip=[start-sector] count=[number-of-sectors] bs=512
    
    • if=/dev/sdX 替换成你的U盘设备文件。
    • of=/path-to-output/msr.img 替换成你想存储分区内容的文件路径。
    • [start-sector] 替换成MSR分区的起始扇区。
    • [number-of-sectors] 替换成MSR分区的扇区总数(结束扇区 - 起始扇区 + 1)。
    • bs=512 表示每个扇区默认大小为512字节。

注意,读取磁盘分区内容需要以root用户权限执行。无论是读取还是写入,特别是对MSR这样的保留分区进行操作时,都应该非常小心,因为这可能导致数据损坏。

你需要进行的任何操作,都应该确保足够了解命令和操作的影响,以及如何安全地进行。如果是生产环境或者您不确定的情况下,请先在非关键数据上进行测试或咨询专业人员。

其中,if 参数指定输入文件(源设备),of 参数指定输出文件(目标 ISO 文件),bs 参数指定块大小。

请注意,执行该命令需要具有管理员权限,并且请谨慎使用 dd 命令,因为它是一个强大而危险的命令,错误使用可能导致数据丢失。在执行此命令之前,请确保备份重要数据,并确保输出路径有足够的磁盘空间来存储备份文件。

打印

你可以使用 xxd 命令来读取磁盘的第一个物理扇区,并以十六进制格式打印出来。以下是一个示例命令:

sudo dd if=/dev/sdX bs=512 count=1 skip=0 | xxd
  • /dev/sdX 替换为你要读取的磁盘设备路径(例如 /dev/sda)。

这个命令将会读取第一个扇区的内容,并使用 xxd 命令将其以十六进制格式打印出来。

注意:执行此命令需要使用 sudo 权限,因为访问磁盘设备通常需要管理员权限。确保你知道自己在做什么,并且只对你有访问权限的设备进行操作。

要在shell中打印U盘的第一个扇区内容,可以使用dd命令结合hexdump命令。下面是一个示例命令:

sudo dd if=/dev/sdX bs=512 count=1 2>/dev/null | hexdump -C

在这个命令中,if=/dev/sdX指定了输入文件为你的U盘设备路径,bs=512表示每次读取的字节数为512,count=1表示仅读取一个扇区。然后通过管道|将输出传递给hexdump -C,这样就可以以十六进制方式打印U盘第一个扇区的内容。

读取速度查看

dd  if=/path/file of=/dev/null bs=1M  

CPU运行状态查看

htop
top

MD5校验

sudo md5sum /dev/sda  

卸载程序

链接: insmod和modprobe命令卸载程序

查找(关键字和命令路径)

在Shell中,可以使用grep命令来在指定路径下查找包含关键字的文件。以下是一个示例命令:

grep -r "关键字" /路径

其中,关键字是要查找的关键字,/路径是要查找的路径。
如果你只想在当前路径下进行查找,可以使用.表示当前路径。示例命令如下所示:

grep -r "关键字" .

这将在当前路径下递归地查找包含关键字的文件,并输出匹配的行及其所属文件的路径。

在Linux系统下,可以使用find命令来查找包含指定关键字的文件名。以下是一个示例命令:

find /路径 -type f -name "*关键字*"

其中,/路径是要查找的路径,关键字是指定的关键字。这个命令将递归地查找/路径下所有文件名包含关键字的文件。
如果你只想在当前路径下进行查找,可以使用.表示当前路径。示例命令如下所示:

find . -type f -name "*关键字*"

这将在当前路径下递归地查找文件名包含关键字的文件,并列出它们的路径。

在Linux系统中,可以使用which、whereis或者command -v命令来检查某个命令是否存在。
which命令会搜索系统的环境变量$PATH中指定的目录,然后返回第一个找到的命令的路径。如果找到了对应命令,则会输出命令的完整路径;如果找不到命令,则不会有任何输出。

which 命令名

在这里插入图片描述

whereis命令会搜索一些特定的目录(如默认的二进制文件路径和所属的源代码路径),然后返回对应命令的路径和相关信息。

whereis 命令名

在这里插入图片描述

command -v命令会搜索系统的环境变量$PATH中指定的目录,然后返回找到的第一个命令的路径。如果找到了对应命令,则会输出命令的完整路径;如果找不到命令,则不会有任何输出。

command -v 命令名

在这里插入图片描述

你可以使用其中的任意一种方式来检查命令是否存在。

删除回车空格符

删除’\r’

sed -i 's/\r//' filename

链接: 删除指定字符

3.通信

串口

链接: echo和cat测试串口回环异常问题

stty -F /dev/ttyS1 -echo -onlcr

禁用“echo”可防止无限循环的消息,禁用“onlcr”可防止串行设备在输出时将LF转换为CRLF

查看波特率

stty -a -F /dev/ttyS

链接: centos下 新添加串口方法
链接: linux下查看与设置串口(或串口终端)信息和属性

I2C

链接: 嵌入式工程师必备技能–如何使用示波器查看IIC波形
链接: I2C基础知识学习
链接: linux shell通过i2cget命令获取I2C器件寄存器的值
链接: 使用 Shell 调试 I2C 设备

网卡网速配置

链接: linux设置网卡速率
链接: linux设置网卡速率

网关255

kali为什么自动把网关后面改成255,重启什么都没用,ping得通IP,ping不通网关
在这里插入图片描述
在这里插入图片描述
查看网关使用route -n,你在ifconfig看到的那个255是广播地址,并不是网关

route -n

静态ip

配置静态IP主要应用在局域网远程访问,ping命令除了可以看能不能ping通,还可以设置包大小、计算丢包率。
route使用
链接: ubuntu16.04 设置动态ip和静态ip及route命令的使用
链接: Linux 下用route命令修改默认网关,不用重启网络
链接: Linux 下用route命令修改默认网关,不用重启网络
ifconfig可以临时修改ip信息
链接: linux修改ip地址详解

银河麒麟(Ubuntu)

vi /etc/network/interfaces

增加以下内容

auto ens32(ifconfig确认)
iface ens32 inet(修改) static
address 192.168.154.129
netmask 255.255.255.0
gateway 192.168.154.2

配置DNS

vi /etc/resolv.conf 
nameserver 192.168.154.2
nameserver 218.85.152.99
nameserver 218.85.157.99

重启网络服务,或者reboot重启

service networking restart

Ubuntu20:https://blog.csdn.net/weixin_45795497/article/details/123578691

中标麒麟(centos)

链接: Failed to restart network.service: Unit network.service not found

cd /etc/sysconfig/network-scripts

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eno2
UUID=f72ee6fd-2973-4218-b752-257c98ad0998
DEVICE=eno2
ONBOOT=yes
IPADDR=192.168.31.101
GATEWAY=192.168.31.1
NETMASK=255.255.255.0
DNS1=144.144.144.144

防火墙的影响

修改完静态IP后ping不通,大概率是防火墙原因。关闭防火墙后即可

中标麒麟提示激活

chmod 600 /usr/libexec/sysnotify
pkill -9 sysnotify

4.远程工具

能ping通但是无法建立SSH远程连接链接: 22是什么端口?
链接: 统信系统启动SSH

MobaXterm

链接:https://pan.baidu.com/s/1ZN1d58ZRoNZQjycI5qCVIA
提取码:zezv

VM

在这里插入图片描述# VSCODE
链接: 下载地址
链接: 参考教程
对于Ubuntu,则选择.deb版本,下载code_1.67.0-1651667246_amd64.deb,

在ubuntu 系统下,执行以下命令:

sudo apt install ./code_1.67.0-1651667246_amd64.deb

然后执行更新包缓存:update the package cache ,

sudo apt update

5.自动启动

一种不影响开机时间的开机自启动脚本方法

原文链接: Linux配置开机启动执行脚本
第(1)步:编写sh运行脚本,比如autostart.sh

#! /bin/sh
# chkconfig: 345 99 10
case "$1" in
  start)
    # 在这里自定义我们执行的脚本逻辑
    
    cd /myauto/sh
    sudo sh START_ALL.sh
    ;;
  *)
    ;;
esac
exit 0

在脚本中,请加上前两行的内容,即:

#! /bin/sh
# chkconfig: 345 99 10

当Linux开机启动后,将执行我们自定义的脚本命令,即进入到/myauto/sh目录下,再执行START_ALL.sh脚本。(我们运行启动项目的命令写在了START_ALL.sh脚本中,其实可以将命令直接写到autostart.sh中的)
第(2)步:将脚本autostart.sh文件放到/etc/init.d目录下

cd /etc/init.d
vi autostart.sh

第(3)步:给autostart.sh添加可执行权限

 chmod +x autostart.sh

第(4)步:注册我们的脚本

chkconfig --add autostart.sh

若在autostart.sh中没有书写**# chkconfig:**的内容,执行上面的命令将会出错。
第(5)步:重启Linux服务测试结果

sudo reboot

链接: linux启动脚本讲解+示例 (chkconfig)

rc.local自启动配置

链接: rc.local文件没有时解决办法

6.文件目录

7.文件属性

用户权限

8.用户管理

9.脚本

参考链接: https://blog.csdn.net/weixin_38849487/article/details/125441348?spm=1001.2014.3001.5502

vim编辑器

vi显示行数命令和跳转到指定行:vi中显示行数命令:set number跳转到指定行:xx

1. 暂时显示/取消行号:
使用Vim打开文件后,在Normal模式下输入
:set number(或 :set nu)显示行号
::set nu! 或者 set nonumber (或 :set nonu)取消行号 
2. 永久显示行号
查找Vim设定文件
sudo find / -name vimrc
修改Vim设定文件 /etc/vimrc ,末尾添加
set number (或 set nu)
保存即可。

C语言开发

简单的.c示例

1.新建一个c文件touch hello.c
2.编译:gcc hello.c回车,然后会生成一个名叫a.out 的执行文件
生成指定名字的.out文件gcc hello.c -o hello.out
3.运行:./a.out回车
如果用gcc编译使用了POSIX thread的程序时,通常需要加额外的选项,以便使用thread-safe的库及头文件,一些老的书里说直接增加链接选项 -lpthread 就可以了。
而gcc手册里则指出应该在编译和链接时都增加 -pthread 选项。

#include<stdio.h>
#include<unistd.h>//延时函数引用头文件
int main(void)
{
  printf("hello word\n");
  sleep(3);//延时函数秒单位
   printf("hello word\n");
  return 0;
}

多个.c文件编译生成一个.o文件

在这里插入图片描述
编译:gcc main.c hello.c -o main.out
被引用的.c要往前放
在这里插入图片描述
在这里插入图片描述

运行out文件./main.out
注意:引用自定义的头文件用""
hello.c文件内容:

#include <stdio.h>
#include "hello.h"

void p()
{
 printf("hello word \n");
 return;
}

hello.h文件内容

#ifndef _HELLO_H_
#define _HELLO_H_

void p();

#endif

main.c文件内容

#include <stdio.h>
#include "hello.h"

void main()
{
 p();
 return;
}

带有输入参数的main

链接: https://blog.csdn.net/lengyuefeng212/article/details/113678558?spm=1001.2101.3001.6650.4&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-4-113678558-blog-116715191.pc_relevant_aa_2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-4-113678558-blog-116715191.pc_relevant_aa_2&utm_relevant_index=8

#include<stdio.h> 
#include<string.h>

//argument count变元计数
//argument value变元值
int main(int argc,char *argv[])
{
	int i,j;
	i = atoi(argv[1]);
	j = atoi(argv[2]);
	
	printf("the Program name is %s\n",argv[0]);
	
	printf("The command line has %d argument:\n",argc-1);
	
	printf("%d,%d\n",i,j);
	
	return 0;
}

在这里插入图片描述

make方式编译

卸载make uninstall

shell脚本

新建脚本

新建shell脚本touch hello.sh
权限修改chmod 777 hello.sh

#!/bin/bash
echo "hello world my shell"

由于Windows编译器带来的回车换行符导致错误:报错:bash: ./xxx.sh: /bin/bash^M: 解释器错误: 没有那个文件或目录。

sed -i 's/\r$//' xxx.sh

或者设置Windows环境的编码方式
在这里插入图片描述

截取指令

在这里插入图片描述
链接: sed命令和awk命令

python应用

性能检测工具

链接: 检测工具安装详细步骤

再升龙

链接: 亲测使用过程

dd命令对拷

还没有做验证

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值