Linux学习笔记

在这里插入图片描述

目录

前言

经验

1.运行级别:

0:关机
1:单用户

  1. 多用户无网络服务
  2. 多用户有网络服务
  3. 系统未使用,保留给用户
  4. 图形界面
  5. 系统重启。

通过init [0-6]来进行切换

  1. :输出重定向 >>:追加

  2. 链接指令:ln -s /root /home/myroot 在home目录下创建一个myroot链接,链接到root目录
    删除软链接: rm /home/myroot
  3. date :显示当前时间
    date +%Y:显示当前年份
    date+%m:显示当前月份
    date+%d:显示当前日期
    date -s:字符串日期
  4. 按文件名查找:find /home -name hello.txt
    按拥有者查找:find /opt -user jack:在opt下面查找用户名称为jack的文件。
    按文件大小查找:find / -size +200M:在/下查找文件大于200M的文件
  5. locate:locate指令是利用事先建立的系统中所有文件名称及路径的locate数据库事先快速定位的文件。
  6. 查看某个指令在哪个目录下:which ls:查看ls在哪个目录下.
  7. grep :过滤查找
  8. |:管道符,表示将前一个命令的处理结果输出传递给后面的命令处理。
  9. grep -n “yes” /home/hello.txt
  10. gzip /home/hello.txt :将hello.txt进行压缩。
  11. gunzip /home/hello.zip:将/home下面的hello.zip进行解压缩。
  12. zip -r myhome.zip /home:将home目录下面的所有文件及文件夹都压缩成myhome.zip
  13. unzip -d /opt/tmp /home/myhome.zip:将myhome.zip解压到/opt/tmp.
  14. tar -zcvf px.tar.gz /home/pig.txt /home/cat.txt:打包多个文件
  15. tar -zxvf /home/px.tar.gz -C /opt/tmp:将/home下的px.tar.gz解压到/opt/tmp下
  16. 修改文件所有者:chown tom apple.txt:将root创建的apple.txt的所有者更改为tom.
  17. 创建一个用户fox,放入monster组中:groupadd monster useradd -g monster fox
  18. 改变用户所在组:usermod -g wudang zwz :将zwz这个用户从原来的组移到现在的wudang组。
  19. 将/home/cat.txt文件的所在组修改成shaolin:chgrp shaolin /home/cat.txt
  20. crontab任务调度:

crontab -e:编译crontab定时任务
crontab -l:查询crontab定时任务
crontab -r:删除该用户所有的定时任何。

  1. service crond restart

  2. lsblk 或lsblk -f:查看硬盘的挂载情况。

  3. ps -ef :是以全格式显示显示当前所有的进程。

  4. pstree -p:显示进程的PID
    pstree -u:显示进程的所属用户。

  5. 动态监控进程:top——实时显示系统中各个进程的资源占用状态。类似于windows的资源管理器。

    1. top -d:制定top命令每隔几秒更新,默认是3秒
    2. top -i:使top不适用任何闲置或僵死的进程。
    3. top -p:使用指定监控进程ID,来监控某个进程的状态。
  6. 查看网络状态:netstat:

>1. netstat -an:按一定顺序排列输出。
>2. netstat -p :显示哪个进程在调用
>3. netstat -a :列出所有端口

举例:netstat -anp |grep sshd

  1. shell脚本

    1.shell脚本的开头:#!/bin/bash开头
    2.输出变量需要加上$。
    3.输出静态变量需要加上readonly B = 2

  2. shell脚本的规则:

    1. 变量名称可以由字母,数字,下划线组成,但不能以数字开头。
    2. 等号两侧不能有空格。
    3. 变量名称一般习惯为大写,
  3. 使用shell设置环境变量:

    1. export 变量名=变量值(将shell变量输出为环境变量/全局变量)
    2. source 配置文件(让修改后的配置信息立即生效。)
    3. echo $变量名(查询环境变量的值)
  4. 预定义变量:

    1. $$:当前进程的进程号
    2. $!:后台运行的最后一个进程的进程号。
    3. $?:最后一次执行的命令的返回状态。如果这个变量的值为0,则证明该命令成功执行,否则则是执行不正确。
  5. ulimit命令

作用:查看系统当前允许用户进程打开的文件数量。
若要对于想支持更高数量的TCP并发连接的通讯处理程序。就必须修改Linux对当前用户的进程同时打开的文件数量的软限制(soft limit)和硬限制(hard limit)。其中软限制是指Linux在当前系统能够承受的范围内进一步限制用户同时打开的文件数;硬限制则是根据系统 硬件资源状况(主要是系统内存)计算出来的系统最多可同时打开的文件数量。通常软限制小于或等于硬限制。
使用ulimit命令直接进行修改:ulimit -n <file_num>

  1. free 命令

free 命令显示系统内存的使用情况,包括物理内存、交换内存(swap)和内核缓冲区内存。

  1. linux -sed命令
  1. 利用脚本来处理文本文件
  2. 可依照脚本的指令来处理,编辑文本文件
  3. 主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序。
  1. Linux 如何实现文本去重?

sort file| uniq -i >newfile//sort命令先把文本进行排序,之后uniq把相邻文本去重只留唯一,-i是在去重的时候不区分大小写,>newfile去重后写入新的文件。

正文

1. 将虚拟机的磁盘挂载到开发板的Linux系统中

首先,我们明确挂载的作用。通过挂载,我们可以在开发板的Linux系统中去使用虚拟机中的文件。你可以把虚拟机的磁盘当做一个U盘插入到开发板中,这样,我们在u盘中的操作也就是在开发板中进行操作了。所以,这就是挂载的意义。
接下来,稍微讲一下挂载的步骤。

  1. 首先,如果你使用的网络连接方式是桥接模式的话,你需要把你的笔记本电脑和虚拟机都弄成固定IP。注意,要在同一网段,比如:虚拟机:192.168.0.65 笔记本电脑:192.168.0.69. 开发板的固定IP:192.168.0.121.
  2. 接下来,就是挂载了。在开发板上面使用这个指令:
mount -t nfs4 192.168.0.65:/home/micromatch/works /mnt -v -o nfsvers=3,vers=3

这个指令的意思就是将虚拟机的/home/micromatch/works 这个磁盘挂载到 /mnt的下面。

  1. 使用df -h。查看当前的挂载情况。
  2. 用ps -aux可以查看进程ID.

2. 挂载错误(access denied by server while mounting 192.168.0.65:/home/micromatch)

你可以发现,你可以挂载到虚拟机的/home/micromatch/works上面,但是却不能挂载/home/micromatch上面就很奇怪,所以问题出在/etc/exports没有进行文件的修改。
你打开/ect/exports就可以看到:
在这里插入图片描述
你可以在这上面按照这个格式加上你要挂载的目录进行挂载。

3. 如何在ubuntu上安装搜狗输入法

参考如下:

  1. Ubuntu18.04安装搜狗输入法——小白Linux学习
  2. 官方指南去操作

4. Linux下Qt5使用搜狗输入法输入中文

参考这篇文章:Linux下Qt5使用搜狗输入法输入中文
一、搭建环境
Win10 + VMware15 + Ubuntu16.04(64位) + Qt5.9.1

二、提出问题
Ubuntu中已经安装了 Qt5.9.1 以及 搜狗输入法,也能正常使用,但是在 Ubuntu 中打开 Qt5 ,然后使用 搜狗输入法无法输入中文。因此本篇文章主要是留个笔记。

三、解决问题
1)安装 fcitx-libs-qt5

sudo apt-get install fcitx-libs-qt5
2)拷贝 fcitx 的库文件到 Qt 的安装目录下

在这里插入图片描述1. 当前我的 Qt 安装在 /opt/Qt5.9.1 目录下,需要找到 platforminputcontexts 目录,具体如上图所示。
cd /opt/Qt5.9.1/Tools/QtCreator/lib/Qt/plugins/platforminputcontexts
拷贝之前安装的 fcitx 库文件

cp /usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so /opt/Qt5.12.8/Tools/QtCreator/lib/Qt/plugins/platforminputcontexts/

之后重启 Qt 即可在 Qt 中使用搜狗输入法输入中文O(∩_∩)O哈哈~。
也参考参考下面这两篇文章:

  1. https://blog.csdn.net/Ryanpinwei/article/details/78497685
    2.https://www.cnblogs.com/likeatree/p/5369633.html

5. Linux设备驱动之字符设备驱动

  1. linux系统将设备分为3类:字符设备、块设备、网络设备。

字符设备:是指只能一个字节一个字节读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后数据。字符设备是面向流的设备,常见的字符设备有鼠标、键盘、串口、控制台和LED设备等。
块设备:是指可以从设备的任意位置读取一定长度数据的设备。块设备包括硬盘、磁盘、U盘和SD卡等。

每一个字符设备或块设备都在/dev目录下对应一个设备文件。linux用户程序通过设备文件(或称设备节点)来使用驱动程序操作字符设备和块设备。

6. 外接micromatch7000相机的连接方式

  1. 将7000相机连接在交换机上。
  2. 将笔记本连接到交换机上。
  3. 获知7000相机连接上的ip地址为:192.168.0.122
  4. 设置虚拟机的ip地址为:192.168.0.65.
  5. 设置主机网口的ip地址为:192.168.0.69.
  6. 设置WALAN的wifi的ipv4的地址为自动分配。
    在这种情况下,7000相机就可以去将虚拟机挂载在7000相机上面。
    使用的命令为:
mount -t nfs4 192.168.0.65:/home/micromatch/works /mnt -v -o nfsvers=3,vers=3

在7000相机的unix上面执行这个程序。

7. IOCTL函数

  1. IOCTL函数,此函数专门向驱动层发送或者接收指令。
  2. ioctl(m_iSpiFd,SPI_IOC_MESSAGE(1), &tr);
  1. 文件结构体指针
  2. 指令
  3. 应用层传递给驱动层的数据或者是接收数据用到的缓存地址。

8. Linux之V4L2基础编程

  1. V4L2(Video For Linux Two) 是内核提供给应用程序访问音、视频驱动的统一接口。
  2. 工作流程:打开设备-> 检查和设置设备属性-> 设置帧格式-> 设置一种输入输出方法(缓冲 区管理)-> 循环获取数据-> 关闭设备。
  3. V4L2_CAP_VIDEO_CAPTURE // 是否支持图像获取。
    ioctl(fd,VIDIOC_QUERYCAP,&cap);
  4. 查询并显示所有支持的格式:VIDIOC_ENUM_FMT
  5. 查看或设置当前格式: VIDIOC_G_FMT, VIDIOC_S_FMT
  6. 图像的缩放 VIDIOC_CROPCAP
  7. 在这里插入图片描述

在这里插入图片描述

  1. 设置窗口取景参数 VIDIOC_G_CROP 和 VIDIOC_S_CROP

V4L2框架概述

9. IC,MCU,模块区别

  1. 集成电路(integrated circuit)简称IC:
    采用半导体制作工艺,在一块较小的单晶硅片上制作上许多晶体管及电阻器、电容器等元器件,并按照多层布线或遂道布线的方法将元器件组合成完整的电子电路。

  2. MCU:
    微控制单元,又称单片微型计算机或者单片机,是指随着大规模集成电路的出现及其发展,将计算机的CPU、RAM、ROM、定时计数器和多种I/O接口集成在一片芯片上,形成芯片级的计算机,为不同的应用场合做不同组合控制.固MCU是集成度较高的一种集成电路

  3. 模块:
    实现某种功能的元件集合体,电路中将分立元件组成的电路重新塑封称为模块,如电源模块.他和IC本质上没什么区别.只是一般模块适用于大功率电路,是"半集成电路"而且内面可能含有IC,而IC则是全集成电路

10. Linux平台编译Qt程序报错(cannot find -lon_platform_d)

这个报错,肯定就是这个的路径不太对,这个时候就去找找路径,可以在终端上找这个文件,方式为:
在这里插入图片描述

locate libon_platform_d
那就是缺少这个库

11. ubuntu18.04虚拟机突然不能上网问题解决办法

  1. 前段时间还正常上网,使用者突然无法联网。有可能是运行软件,爆内存了,没有死机,但造成网络中断。

尝试措施:

  1. 检查宿主主机,能正常联网
  2. linux的ifconfig显示,没有固定IP

$ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 3859 bytes 232955 (232.9 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3859 bytes 232955 (232.9 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ping 连接无法连接上
$ping www.baidu.com
ping: www.baidu.com: Name or service not known
原来为主机模式,更换为桥连模型,其他模式,也是无法联网。
2 解决方法

将模式调整为“主机模式”
输入以下代码
sudo service network-manager stop
sudo rm /var/lib/NetworkManager/NetworkManager.state
sudo service network-manager start
再次输入ifconfig ,之前的静态IP重新出现了。问题解决,可以联网了。
3.上面删除的内容,然后重启网络

$cat ~/software/NetworkManager.state
[main]
NetworkingEnabled=false
WirelessEnabled=true
WWANEnabled=true

  1. 出现这种情况也有可能是虚拟机IP地址重复导致的,修改一下IP地址。

12.Linux空间不够(Ubuntu Not enough free space to extract)

  1. 进行先清空一些回收站:sudo rm -rf ~/.local/share/Trash/*
  2. 首先df -h进行分析Linux磁盘分配的大小。然后确认是自己整个系统的空间位置不够,必须进行扩容。但扩容时遇到打不开gparted的情况,所以,删掉一些东西后,保持整个磁盘有8g的空间,解压成功。
  3. 磁盘扩容方法:Ubuntu 扩容方法

13. 7000相机单片机升级方式

  1. 这个是升级RK3399的。
    在这里插入图片描述
  2. 升级RK3288用的是这个命令:./updateStm32-711 2100-spi-io_20210325.hex

14. Linux下查找文件的方式:

find / -name libatomic.so.1

15.为何用root账户无法登陆进ubuntu

原来是默认不可用的
在这里插入图片描述

16.关于Ubuntu中Could not get lock /var/lib/dpkg/lock解决方案

  1. 第一种解决方法
    原来是apt-get这个软件上次执行的进程还没有结束,所以,出现上面的这个错误。
    在这里插入图片描述
  2. 第二种解决方法
zwz@zwz-virtual-machine:~$ sudo rm /var/lib/dpkg/lock-frontend
zwz@zwz-virtual-machine:~$ sudo rm /var/lib/dpkg/lock
zwz@zwz-virtual-machine:~$ sudo rm /var/cache/apt/archives/lock

17. 安装VMWareTools

VMware Tools (ubuntu系统)安装详细过程与使用

18. linux启动时出现报错提示“welcome to emergency mode”

出现这个问题的一个前提是:我想把我之前已经过过的一个系统复制一遍,再使用,发现,出现了这个问题,于是查询百度得到整个回答:
linux启动时出现报错提示“welcome to emergency mode”
我出现的问题是:因为是同一个虚拟机系统,所以在挂载的时候,挂在了同一个目录之下,导致出现了这样的问题,于是,我采取如下步骤:

  1. vi /etc/fstab这个文件。
  2. 然后注释掉有关挂载的语句,reboot就可以了。

19. 新安装的Ubuntu无法进行远程连接

问题原因:那应该就是没有安装ssh_server。
解决方法

  1. 输入命令:sudo apt-get install openssh-server
  2. 重启

20.sysroot的作用

–sysroot=dir 的作用
如果在编译时指定了-sysroot=dir 就是为编译时指定了逻辑目录。编译过程中需要引用的库,头文件,如果要到/usr/include目录下去找的情况下,则会在前面加上逻辑目录。
如此处我们指定 -sysroot=/home/shell.albert/tools/toolschain_arm/4.4.3/arm-none-linux-gnueabi/sys-root
将dir作为逻辑根目录(搜索头文件和库文件)。比如编译器通常会在 /usr/include 和 /usr/lib 中搜索头文件和库,使用这个选项后将在 dir/usr/include 和 dir/usr/lib 目录中搜索。如果使用这个选项的同时又使用了 -isysroot 选项,则此选项仅作用于库文件的搜索路径,而 -isysroot 选项将作用于头文件的搜索路径。这个选项与优化无关,但是在 CLFS 中有着神奇的作用。

21.RK3288环境的配置

  1. 下载rk-x11放到/opt目录之下。注意这个用的版本是这个。
  2. 在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

22. RK3288和RK3399单片机的升级方式

RK3288

./updateStm32-711 2100-spi-io_20210325.hex

RK3399:

./test-spi-io-update update 2100-spi-io_20210325.hex

23. Ubuntu 18.04网络间歇性中断时:

  1. sudo vim /etc/NetworkManager/NetworkManager.conf
  2. sudo service network-manager restart

24. 如何让VMWare上的程序默认挂载Windows上的路径

  1. 打开/etc/fstab这个文件。
  2. 将用户切换成root用户。
  3. 在最下面添加这句话:.host:/ /mnt/hgfs fuse.vmhgfs-fuse allow_other 0 0
  4. 然后reboot。

25. 如何在没有App的情况下更改7000相机的静态IP

  1. 用vi 修改/etc/dhcpcd.conf这个文件,在底下有一个可以修改的地方。
  2. 然后用sync将内存中的值写磁盘中。
  3. reboot。

26.Linux编程之select

select系统调用的的用途是:在一段指定的时间内,监听用户感兴趣的文件描述符上可读、可写和异常等事件。
在这里插入图片描述
在这里插入图片描述

27.RK3399编译c程序的搭建

  1. 每次启动平台的时候,都应设置一下环境:source /opt/rk3399Qt5.12/environment-setup
  2. 接下来,就是进入到那个main.c的路径之下,下面一定有一个MakeFile文件,接下来,执行make命令。
  3. 就会生成可执行文件。

28.ubuntu18.04虚拟机突然不能上网问题解决办法

前段时间还正常上网,使用者突然无法联网。有可能是运行软件,爆内存了,没有死机,但造成网络中断。

尝试措施:

  1. 检查宿主主机,能正常联网
  2. linux的ifconfig显示,没有固定IP

$ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 3859 bytes 232955 (232.9 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3859 bytes 232955 (232.9 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ping 连接无法连接上
$ping www.baidu.com
ping: www.baidu.com: Name or service not known
原来为主机模式,更换为桥连模型,其他模式,也是无法联网。
2 解决方法

将模式调整为“主机模式”
输入以下代码
sudo service network-manager stop
sudo rm /var/lib/NetworkManager/NetworkManager.state
sudo service network-manager start
再次输入ifconfig ,之前的静态IP重新出现了。问题解决,可以联网了。
3.上面删除的内容,然后重启网络

$cat ~/software/NetworkManager.state
[main]
NetworkingEnabled=false
WirelessEnabled=true
WWANEnabled=true

29.Linux挂载

  1. 参考:Linux学习笔记(二):什么是挂载?mount的用处在哪?.
    相当于我现在如果要将我笔记本电脑的虚拟机挂载到RK3399上面的话。就是等于我这个虚拟机是一个u盘,将u盘插入这个rk3399.这样,每次,我直接执行我虚拟机中的/home/micromatch就等于是在rk3399中执行了这个程序了。

30.CAN,I2C,SPI 三种总线通讯协议

  1. 片外总线,是CPU与内存RAM、ROM和输入/输出设备接口之间进行通讯的通路,也称系统总线.
  2. 漏极开路(Open Drain)即高阻状态,适用于输入/输出,其可独立输入/输出低电平和高阻状态,若需要产生高电平,则需使用外部上拉电阻或使用如LCX245等电平转换芯片。同时具有很大的驱动能力,可以作为缓冲器使用。

30_1.CAN总线协议

  1. 明确CAN总线的样貌:
    在这里插入图片描述
  2. CAN信号传送的方式:
    在这里插入图片描述
  3. CAN总线上的所有节点没有主从之分,反应在数据传输上是:在总线空闲状态下,任意节点都可以向总线上发送信息。另外:最先向总线发送信息的节点获得总线的发送权;当多个节点同时向总线发送消息时,所发送消息的优先权高的那个节点获得总线的发送权。
  4. 在这里插入图片描述
  5. 当两个节点同事发送时,该如何抉择呢,这就需要非破坏式仲裁机制:
    在这里插入图片描述

30_2.SPI总线协议

  1. 在这里插入图片描述

  2. SPI是[单主设备( single-master )]通信协议,这意味着总线中的只有一支中心设备能发起通信。当SPI主设备想读/写[从设备]时,它首先拉低[从设备]对应的SS线(SS是低电平有效),接着开始发送工作脉冲到时钟线上,在相应的脉冲时间上,[主设备]把信号发到MOSI实现“写”,同时可对MISO采样而实现“读。

  3. 注意,SPI还有四种工作模式,主要就是CPOL,CPHA这两个值为0还是1 。来决断定义了在时钟脉冲的哪条边沿转换(toggles)输出信号,哪条边沿采样输入信号。
    在这里插入图片描述

  4. [主从设备]必须使用相同的工作参数——SCLK、CPOL 和 CPHA,才能正常工作。

30_3. I2C总线协议

  1. IIC 是多主设备的总线。

第一,每一支IIC设备都有一个唯一的七位设备地址;
第二,数据帧大小为8位的字节;
第三,数据(帧)中的某些数据位用于控制通信的开始、停止、方向(读写)和应答机制。

  1. 整个通信过程
  1. 主设备发一个START信号.
    2 . 主设备发送一个7位设备地址加一位的读写操作的数据帧
  2. 当从设备接收数据后,比对地址自己是否目标设备。如果比对不符,设备进入等待状态,等待STOP信号的来临;如果比对相符,设备会发送一个应答信号——ACKNOWLEDGE作回应。
  3. 当主设备收到应答后便开始传送或接收数据。数据帧大小为8位,尾随一位的应答信号。
  4. IIC总线标准规定SDA线的数据转换必须在SCL线的低电平期,在SCL线的高电平期,SDA线的上数据是稳定的。

31. MIPI协议

31_1.MIPI协议

  1. MIPI(移动行业处理器接口)是 Mobile Industry Processor Interface 的缩写。
  2. 目的是把手机内部的接口如摄像头、显示屏接口、射频/基带接口等标准化,从而减少手机设计的复杂程度和增加设计灵活性。

摄像头接口CSI(Camera Serial Interface)定义了一个位于处理器和摄像模组之间的高速串行接口。
显示接口DSI(Display Serial Interface) 定义了一个位于处理器和显示模组之间的高速串行接口。

  1. CSI协议分为三层:

1.应用层(ApplicationLayer),主要描述了上层数据流中的数据编码和解析。CSI-2 规范中规定了像素数据到字节的映射(Mappingof pixel values to bytes)。

2.协议层(Protocol Layer),包含了几个不同的子层,每个子层都有各自的明确职责。主要包括,像素/字节打包/解包层(Pixel/Byte Packing/UnpackingLayer),Low Level Protocol Layer(LLP),通道管理(LaneManagement)层。

3.物理层(PHYLayer),定义了传输介质 (electrical conductors,导体),输入/输出电路信号的电气特性(electricalparameters)和时钟机制(时序)。即如何从串行位流(Bit Stream)中获取“0”和“1”信号。规范中的这一部分记录了传输介质的特性,并依据时钟和数据通道之间发信号和产生时钟的关系规定了电学参数

  1. DSI有成本低,高速率的优势。
    DSI分四层,对应D-PHY、DSI、DCS规范、分层结构图如下:

PHY 定义了传输媒介,输入/输出电路和和时钟和信号机制。
Lane Management层:发送和收集数据流到每条lane。
Low Level Protocol层:定义了如何组帧和解析以及错误检测等。
Application层:描述高层编码和解析数据流。

Command Mode

  1. Video Mode:Video mode表示无论当前显示是否有数据更新,DSI host端一直送数据给panel显示。
  2. Command mode表示只要当数据画面有变化时,DSI host端才送数据给panel显示。

31_2.黑平衡

黑平衡就是给摄影机盖机身盖儿(或者装镜头时,给镜头盖盖儿)然后校准黑平衡。我觉得黑平衡的目的就是为了让传感器分析噪点趋势,然后统一消除。

32. ioctl

ioctl 是设备驱动程序中设备控制接口函数,一个字符设备驱动通常会实现设备打开、关闭、读、写等功能,在一些需要细分的情境下,如果需要扩展新的功能,通常以增设 ioctl() 命令的方式实现。
int ioctl(int fd, ind cmd, …);

其中fd是用户程序打开设备时使用open函数返回的文件标示符,cmd是用户程序对设备的控制命令,至于后面的省略号,那是一些补充参数,一般最多一个,这个参数的有无和cmd的意义相关。
ioctl函数是文件结构中的一个属性分量,就是说如果你的驱动程序提供了对ioctl的支持,用户就可以在用户程序中使用ioctl函数来控制设备的I/O通道。

33. 有哪些进程无法杀死?

  1. 僵尸进程无法杀死:
    僵尸进程的查看方法:利用命令ps,可以看到有标记为Z-“Zombie”的进程就是僵尸进程。zombie”进程要等到下次重启时才会消失,但它的存在不会影响系统性能。
    杀死的方法:

a. 重启服务器,相当于清理内存了.
b. 杀掉该僵尸进程的父进程。那么该子线程也就自然而然的被杀死了。

  1. 该进程处于”kernel mode”(核心态)且在等待不可获得的资源。处于核心态的进程忽略所有信号处理,因此对于这些一直处于核心态的进程只能通过重启系统实现。进程在AIX 中会处于两种状态,即用户态和核心态。只有处于用户态的进程才可以用“kill”命令将其终止。

34. Linux如何为普通用户提供root权限

  1. 以root用户查看 /etc/sudoers
    在这里插入图片描述

  2. 这个文件本来是只读模式,现在修改为可编辑模式。
    在这里插入图片描述

  3. 添加内容到文件中:
    在这里插入图片描述

  4. 再将root文件改为只读
    在这里插入图片描述

  5. 切换普通用户,就可以用sudo命令了
    在这里插入图片描述

a. 参考

35. fork的流程

  1. 用户空间调用fork()方法;
  2. 经过syscall陷入内核空间, 内核根据系统调用号找到相应的sys_fork系统调用;
  3. sys_fork()过程会在调用do_fork(), 该方法参数有一个flags很重要, 代表的是父子进程之间需要共享的资源; 对于进程创建flags=SIGCHLD, >4. 即当子进程退出时向父进程发送SIGCHLD信号;
  4. do_fork(),会进行一些check过程,之后便是进入核心方法copy_process.

36. su root :认证失败

有可能是没有设置root密码,导致的失败,所以,尝试设置一个密码即可。
sudo passwd root
然后设置密码即可。

37. Ubuntu18.04 有线连接消失

在这里插入图片描述

  1. 第一步查看interfaces文件,该文件内容正常,未被修改
    sudo vim /etc/network/interfaces

  2. 第二步修改NetworkManager.conf配置文件,将managed=false更改为managed=true,保存退出
    sudo vim /etc/NetworkManager/NetworkManager.conf

  3. 第三步修改10-globally-managed-devices.conf配置文件,添加有线设备,添加内容如下
    sudo vim /usr/lib/NetworkManager/conf.d/10-globally-managed-devices.conf
    在这里插入图片描述

  4. 最重要的一步重启:reboot

  5. 若还是不行:删除临时文件

xxx@xx:~$ sudo service network-manager stop
xxx@xx:~$ sudo rm /var/lib/NetworkManager/NetworkManager.state
xxx@xx:~$ sudo service network-manager start

参考

38. Ubuntu18.04 永久修改分辨率

Ubuntu18.4 永久修改分辨率(虚拟机)

  1. 打开终端(快捷键Ctrl+Alt+T)
  2. 查看修改分辨率的信息(1920*1080)
    ~$ cvt 1920 1080
    # 1920x1080 59.96 Hz (CVT 2.07M9) hsync: 67.16 kHz; pclk: 173.00 MHz
    Modeline "1920x1080_60.00"  173.00  1920 2048 2248 2576  1080 1083 1088 1120 -hsync +vsync
  1. 查看显示器名称
Screen 0: minimum 1 x 1, current 1920 x 1080, maximum 8192 x 8192
Virtual1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 0mm x 0mm

Virtual1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 0mm x 0mm

其中加粗的Vitual1就是当前使用的显示器的名称。

  1. 永久修改分辨率
    直接用命令行更改分辨率,在下次重启之后所有设置都会失效,所以需要修改profile文件,才能永久保存。用以下命令打开profile文件。
    ~$ sudo vim /etc/profile
    按“I”进入insert模式,在文件的最后加入以下两行代码
    xrandr --newmode "1920x1080_60.00" 173.00 1920 2048 2248 2576 1080 1083 1088 1120 -hsync +vsync
    xrandr --addmode Virtual1 "1920x1080_60.00"

然后按ESC退出insert模式,输入:wq保存,并退出。

这里要注意第一行中的newmode是输入cvt命令之后得到的信息,第二行中的Virtual1是输入xrandr之后得到的显示器名称,要根据实际情况来修改,否则会报错。

  1. 然后在命令行中输入
    ~$ source /etc/profile

  2. 此时就可以在settings->displays->resolution中找到刚才添加的分辨率了,见下图:修改之后选择apply,分辨率就可以永久改成1920*1080了。
    参考

39.fatal error: mysql.h:没有那个文件或目录

原因:
没有安装mysql的相关链接库
解决

sudo apt-get install libmysqlclient-dev

40. E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)

方案1:
用这个命令查看一下apt的相关进程:

ps -e | grep apt

然后,我们将相关进程杀死即可:

sudo kill 830
sudo kill 947
sudo kill 2415

方案2:
1.

sudo rm /var/cache/apt/archives/lock 
sudo rm /var/lib/dpkg/lock
  1. 然后我们重启终端就可以啦。

41. Win10 SSH连接VirtualBox虚拟机中的Ubuntu的方法

sudo apt-get install ssh

42. 更改swap分区大小

第一步:查看是否有swap分区文件
sudo swapon -s
第二步:禁用存在的swapfile文件
sudo swapoff /swapfile
第三步:修改swap分区大小(8192/1024=8个G,自己设定要更改的大小,注意是1024的整数倍)
sudo dd if=/dev/zero of=/swapfile bs=1M count=8192
第四步:设置文件为swapfile类型
sudo mkswap /swapfile
第五步:启用swapfile
sudo swapon /swapfile

原文链接:https://blog.csdn.net/m0_45478865/article/details/109068540

43. ubuntu18.04出现网络链接激活失败的解决办法

在这里插入图片描述

44. 如何重新安装VMwareTools

  1. 点击重新安装VMwareTools

  2. 将VMware-tools.tar.gz放到/tmp中解压。

  3. 然后,执行: sudo ./vmware-tools

  4. 然后,重启虚拟机
    参考

45. Linux命令经典面试题1

  1. 统计文件中出现次数最多的前10个单词
    cat words.txt|sort|uniq -c |sort -k1,1nr|head -10

sort: 对单词进行排序

uniq -c: 显示唯一的行,并在每行行首加上本行在文件中出现的次数

sort -k1,1nr: 按照第一个字段,数值排序,且为逆序

head -10: 取前10行数据

2、linux文件搜索关键字并显示前后10行
cat test.log|grep 'XXX’ -C 10

3、cat、grep、sed查看文件任意几行的数据
grep -C 5 foo file:显示file文件里匹配那行以及上下5行
grep -B 5 foo file:显示foo 及前5行
grep -A 5 foo file:显示foo及后5行

cat fileName|tail -n 1000:查看最后1000行的数据

cat filename|head -n 3000|tail -n +1000:查看1000到3000行的数据

sed:sed -n “开始行,结束行p” 文件名

sed -n “1000,3000p” filename:显示1000到3000行的数据

46. 如何测试网络环境的网速?

服务端命令:iperf -s
客户端命令: iperf -c 192.168.1.100 -i 1 -t 10 -b 2M #指定2M带宽向对端发送数据

47. ubuntu 所有的窗口都没有最大化,最小化按钮了

执行: metacity --replace
如果开机启动后,还是会没掉的话,则将这句话放在~/.bashrc里面,然后source ~/.bashrc

48. Qt creator upload file fail The server said fail

其实就是Linux嵌入式设备中对应的该程序没有关闭。
直接kill 掉那个程序以及对应的守护进程。

49. 访问映射网络驱动器提示 本地设备名已在使用中,此连接尚未还原

解决办法:打开windows PowerShell (若提示重启,则需重启电脑)

命令行:wsl --shutdown
命令行:netsh winsock reset
命令行:netsh int ip reset all
命令行:netsh winhttp reset proxy
命令行:ipconfig /flushdns

参考

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值