本文记录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(进程标识符)来实现。
通过以下方式来获取进程运行时间:
- 首先,使用
ps -eo pid,etime,cmd
命令来列出所有进程的 PID、运行时间和命令信息。
ps -eo pid,etime,cmd
- 如果你知道目标进程的 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下载文件的基本示例:
- 下载文件
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-server
和port
替换为你的代理服务器的地址和端口。
请注意,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分区",你可以通过以下几个步骤来读取这个分区的内容:
-
首先,确定你的U盘设备文件。通常情况下,它可能是
/dev/sdb
、/dev/sdc
等等,具体取决于系统中其他已连接的磁盘。你可以使用lsblk
或fdisk -l
命令来查看所有磁盘及其分区信息。 -
确认GPT分区布局和MSR分区的位置和大小。你可以使用
gdisk
、parted
或fdisk
这样的工具(对于带有GPT分区表的磁盘,推荐使用gdisk
)。sudo gdisk -l /dev/sdX
将
/dev/sdX
替换为你的U盘设备文件。查找属于Microsoft Reserved的分区,并记下它的起始和结束扇区。
-
使用
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
卸载程序
查找(关键字和命令路径)
在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.通信
串口
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自启动配置
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
#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命令对拷
还没有做验证