文章目录
- 1.VMware/CRT:netstat -nal | grep 22
- 2.linux命令:tcpdump数据包获取,nc网络调试,vmstat进程信息和内存使用
- 2.1 用户管理及权限:p是指管道文件,chmod 777
- 2.2 find:找文件
- 2.3 grep:找文件中内容
- 2.4 cat/more:查看文件全部内容
- 2.5 head/tail:查看文件部分内容
- 2.6 iNode:磁盘中块和扇区
- 2.7 打包和解压:tar命令必须和-f命令连用, 选项f后的文件档名.tar,如果加z选项,则以.tar.gz或.tgz
- 2.8 正则:\d,?* +这些是[a-z]{m,n}这些的简写
- 2.9 sed:管道过滤(替换,删除),sed -i 's/\r//g' 文件(删除从txt复制来代码的换行符)
- 2.10 awk:-F指定分隔符,-V设置变量,NF列数,$NF是一行数据最后一列的值,多用于对字段(像数据库中的字段)
- 3.Samba服务器:利用文件传输协议:ftp,http,SMB(Samba)
- 4.pip/office/pi:su直接切换root,需输入root密码。sudo su/-i:当前用户暂时申请root权限,需输入当前用户密码
- 4.1 pip换源:curl ipinfo.io 查公网出口ip,ctrl + H 显示隐藏文件
- 4.2 shapely:https://www.lfd.uci.edu/~gohlke/pythonlibs/ 或pypi网
- 4.3 office:下载visio:http://www.itellyou.cn/用迅雷复制链接下载,https://smallpdf.com/pdf-to-jpg
- 4.4 双系统:Ubuntu镜像网站http://mirrors.ustc.edu.cn/ubuntu-releases/16.04/
- 4.5 版本:os-release.bb,classes/openbmc_version.bbclass(version = "...")
- 4.6 cdc模块:cycle cpu时,usb0设备会注册,如果去除cdc相关驱动,ifconfig usb0会有device not found 报错
- 8.设备树:dts=device,of_api读取dts中属性,参考include/linux/of.h
1.VMware/CRT:netstat -nal | grep 22
1.1 VMware:netstat -anp|grep ssh,vi /etc/ssh/sshd_config放开Port 22,service sshd restart,chkconfig可将sshd加入到系统服务中开机后sshd将自动启动:chkconfig sshd on
VMware15和CentOS6.9:
链接:https://pan.baidu.com/s/1HV6WqUTAwlOSjWkLXVrCRw ,提取码:1x8e 。直接下一步安装,右击图标属性 - 兼容性 - 更改所有用户的设置 - 勾上以管理员身份运行此程序。
CG392-4PX5J-H816Z-HYZNG-PQRG2
点击创建新的虚拟机
:自定义(高级)-
稍后安装操作系统-
linux-
版本centos6 64位-
D:\vm.\cent0s6-
使用仅主机模式网络-
将虚拟磁盘存储为单个文件(动态分配20G硬盘)。
编辑虚拟机设置
:选中网络适配器添加-
CD/DVD使用CentOS6的iso文件(开启此虚拟机出问题:控制面板-卸载程序-Microsoft Visual C++的两个x64和x86文件右击卸载,不点卸载,点修复再重启计算机)。
开启虚拟机安装操系
:默认第一个install,方向键选择红色的Skip(跳过)回车。两个网卡注意要配置网络
自动连接。使用所有空间-
将修改写入磁盘-
Basic Server。鼠标退出虚拟机用ctrl+alt,将一个小窗口移至虚拟机前就可以用QQ截图。
1.2 CRT:改注册信息要打开CRT客户端在最上端Help栏中Enter License Data
ssh客户端软件SecureCRT8.5
:链接:https://pan.baidu.com/s/1Y74YVz2ysQ3rFjGjnthb1Q ,提取码:l8gb 。解压后如下所示:
右击以管理员身份运行上图的scrt…exe文件,安装完后桌面出现图标先不要点击运行,将上图文件夹里的keygen.exe复制到下图默认安装路径文件夹中,并右击以管理员打开keygen.exe出现如下图黄色窗口。
如下不用去除中括号,写入SecureCRT.exe中去除,Patch连到SecureCRT.exe和LicenseHelper.exe。
第一次打开下图进行填写注册信息按照上图黄色窗口对应写入,上面patch到就是下面这个.exe文件。
配置会话的属性:在会话上点击属标右键,选择Properties的Terminal。每30秒向服务器发送一次心跳。SSH2。Hostname:192…。Port:22。Username:root。
https://www.usb-drivers.org/ft232r-usb-uart-driver.html。
2.linux命令:tcpdump数据包获取,nc网络调试,vmstat进程信息和内存使用
2.1 用户管理及权限:p是指管道文件,chmod 777
nohup java -jar a.jar & ( jobs命令查看这个后台任务的编号 )。 netstat -ntlp查看运行程序的端口。 kill -9 %1(这个1就是jobs命令的1编号)。 top -d/n 1 内存条:dmidecode |grep -P -A5 "Memory\s+Device"|grep Size|grep -v Range ps -ef | grep memtester | grep -v grep | cut -c 9-16 | xargs kill -9
2.2 find:找文件
过滤一下看文件大小:-print0将如上三行打印为1行并用null即‘\0’隔开,再用xargs -0即用‘\0’再分开(原因是默认管道到下一个里面空格会出错)。
如上/是整个系统搜索慢,如下是当前路径搜索快。
日志文件没清空非常大,要找到删除,如下找系统中大文件,超过10M。
如下查找文件夹,文件夹有相应名字或大小属性。
如下基于修改时间,time是天。-1
:今天一天之内。1
:1天前这一天。+1
:1天前。
如下指定最大文件深度。
如下是find指令总结。
2.3 grep:找文件中内容
如下*
可换成 * .txt
。
-r:递归子路径,-n:显示行号。-i:忽略大小写。
如下用于java日志文件非常大,要grep出某个异常如ioexception,且需要打印出exception下面几行看什么出了错。
如下.中的\是转义符,.168
这样重复3次(注意168前面有.
,不是168,而是数字)。
2.4 cat/more:查看文件全部内容
cat的文件非常大,非常占用cpu和内存,这时候可以每次读取一小部分。
如下通过空格往后翻页。
如下指定从第四行开始读。
如下查看前后10行。
2.5 head/tail:查看文件部分内容
如下打印文件最后两行,tail -f 阻塞监控。
df -h查看磁盘使用,占用率太高就需要使用前面find,grep指令并进行删除。
题目:输出当前路径及当前路径子路径下所有.txt文件,要求大小超过1M,并且按照从大到小
顺序进行排序输出前10个?
先通过find . -name '*.txt' -size +1M -type f
查看是否有大于1M的txt文件,没有的话就不用继续了。
再通过find . -name '*.txt' -size +1M -type f -print0|xargs -0 du -m|sort -nr|head -10
。
2.6 iNode:磁盘中块和扇区
linux文件系统中iNode用来存储文件原数据信息
,不存储文件内容
,原数据信息
包括:类型
:这个文件是个目录还是普通文件。拥有者
:这个文件是owner还是group owner。时间
:ctime
:上次inode变动时间。atime
:上次访问时间。mtime
:上次文件内容发生变动时间。连接数
:有多少文件名同时指向inode。一个文件名只对应一个inode
,但一个inode可能被多个文件名同时指向。文件内容所在的位置
:文件真正内容所在磁盘块的标号。
1.
文件系统fs在格式化好后,inode以什么样格式存储的呢?整个inode以数组形式存储,每个元素是一个inode
,每个inode大小根据当前文件系统以及整个磁盘大小,inode会有一个固定128或256字节
大小。
2.
除了inode数组,fs初始化好后还会生成一个Map映射关系表
(存储filename和inode index)。现在要读取/ect/1.txt,整个过程怎么样?
先根据文件名到Map中找到inode index,找到下标为假如是3的inode后拿出来如下图左边整个框。当前在读取/ect/1.txt,所以查看是否有读权限,如果有读权限就继续往下,找到文件内容
所在位置(磁盘上块的下标)。
文件内容在磁盘中存储区域如下:以块
进行分隔,每个块大小
也是根据当前fs和整个磁盘大小决定,并不是一个特定大小【扇区在磁盘生产时
有多少个扇区,每个大小是定的,早期扇区512byte,现在4k】。文件系统fs在文件访问过程中不可能直接使用扇区,扇区是硬件
的概念,所以抽象出一个概念:fs角度去看最小文件存储单元就是块
,一个块可以有一个或多个扇区组成(2的幂次方即1,2,4…个扇区)。
一个块采用多少扇区也是有权衡的,比如一个块有好几兆,存一个1k文件也要占一个文件块,造成磁盘空间浪费。块选择过小的话也不好,如果一个块大小1bit,导致一个文件假如是1kb,它所在的块由1千个块组成
,在inode中存储文件内容所在位置这个字段时候造成存1千个块信息(1千个块下标),一个inode(存1千个块下标)不可能128/256字节大小了
,一个inode会很大,进而导致inode数组会很大,整个inode区大,这样导致磁盘损耗大量空间存储inode信息,较少的空间存储真正文件内容。
即使进行权衡,目前存在问题,如经常听到inode用完了即inode数组初始化大小用完了
,声明完数组大小后不能增加或减少了。inode数组用完了即使磁盘还有额外空间也不能存储文件了,常见特别零碎文件数量又特别多占据磁盘大量inode导致整个inode用完。如早期docker采用overlay文件存储格式导致镜像的碎文件很多,导致inode用尽这样问题,后面采用overlay2文件存储格式一定程度上解决了这问题。
查看linux系统中inode数组以及每个文件所对应inode标号:df -i(inode)
,查看当前文件夹下文件所在的inode标号是什么ls -il
。访问1.txt先查文件名和inode标号映射即Map,1.txt能找到270306
这个标号。根据这个标号到1183200这个数组中拿取第270306个
标号的inode。根据这个inode信息查看权限,最终找到1.txt在磁盘中存储位置,最后把这些磁盘块进行读取,最终读取到1.txt这个文件。
如果是一块移动硬盘,在其他设备上创建了文件,把这个移动硬盘拿到linux上面,有没有inode呢?1.
os可以支持多种fs。2.
inode是在ext2/3/4等linux支持的文件系统(fs)有的。所以移动硬盘看是什么文件系统
了,如果是ntfs或者exfat、fat32等等就是另一种访问形式了,inode其实是文件系统里的概念,而不是linux的概念。
#include <stdio.h> #include <dirent.h> int main() { DIR *dir; struct dirent *node; dir = opendir("."); // 打开当前目录 if (dir == NULL) { printf("无法打开目录\n"); return 1; } while ((node = readdir(dir)) != NULL) { // 遍历目录, node->d_name是文件或目录名 if (node->d_type == DT_REG) { printf("文件: %s,%d\n", node->d_name, DT_REG); // DT_REG:8 } else if (node->d_type == DT_DIR) { printf("目录: %s,%d\n", node->d_name, DT_DIR); // DT_DIR:4 } else if (node->d_type == DT_LNK) { printf("符号链接: %s,%d\n", node->d_name,DT_LNK); // DT_LNK:10 } else { printf("其他类型: %s\n", node->d_name); } } closedir(dir); return 0; }
2.7 打包和解压:tar命令必须和-f命令连用, 选项f后的文件档名.tar,如果加z选项,则以.tar.gz或.tgz
tar只是打包,并不压缩或解压。 -c: 建立压缩档案 -x:解压 -t:查看内容 -j, --bzip2 -z, --gzip, --gunzip --ungzip -v, --verbose 详细列出处理过的文件 -f, --file ARCHIVE 使用存档文件或设备存档(指定存档文件),切记,这个参数是最后一个参数,后面只能接档案名。
2.8 正则:\d,?* +这些是[a-z]{m,n}这些的简写
^[]$
:中括号内部只匹配一个字符。\d
:相等于[0- 9]
,中括号里是什么或什么。\D
:相等于[^0- 9]
,除了0到9外的任意字符。如下匹配数字\d 或
数字外任意字符\D(也就是匹配任意字符)。\w
:字母,数字或下划线,常用于用户名的命名上。
组group:如上只想获取@前面的用户名,上面中括号,大括号都出现了,就差如下小括号。first就是组名,右边是js语法,underfined因为没命名。
2.9 sed:管道过滤(替换,删除),sed -i ‘s/\r//g’ 文件(删除从txt复制来代码的换行符)
如下将逗号
替换为空格
。s表示替换,g表示全局,即行中所有匹配项都被替换。sed -i ‘s/sys_led/sys_url/g’ /home/sysfs1/s3ip_sysfs_frame/sysurl_sysfs.c。
^匹配行首,$匹配行尾,如下d删除空行或只包含空格的行(因为行首行尾中间为空)。
sed常用于管道过滤,如下把x替换成y。
如下-r打开扩展正则,将逗号换成TAB。sed -n ‘60,70p’ a.txt :查看文件第60-70行。
2.10 awk:-F指定分隔符,-V设置变量,NF列数,$NF是一行数据最后一列的值,多用于对字段(像数据库中的字段)
如下按逗号分隔并打印分割后的第三列和第四列,默认用空格/制表符/换行符作为字段分隔符。
如下BEGIN指定了处理文本之前需要执行的操作。END指定了处理完所有行之后所需要执行的操作。
如下按逗号分隔并打印最后一列内容。
对比上面,如下一行一行读取并打印,列数>0打印。
如下-c统计个数。
如下2是个数,不是序号。
3.Samba服务器:利用文件传输协议:ftp,http,SMB(Samba)
win下更改ip:本地连接右击属性,更改适配器。@market指market组。
如下将本地用户转变为samba用户即共享用户
。通过如下转变可实现该用户通过客户端访问服务器时提供验证标准了。
如下都是在文件末尾新添加的内容,都是逗号,writeable=no指除了下行外
都不能写。[manager]是共享名即对方能看到的网络文件夹名称,comment是可共享目录的描述信息(可加可不加),valid_users指谁可以访问。
3.1 隐藏共享和拒绝访问:无法在网上邻居看到我们所共享的文件夹,但是通过unc路径做具体指定,我们可以访问到该文件夹下
windows里只需在共享文件夹名后面加一个$符号就能实现隐藏共享了。linux的samba中需修改主配置文件。如下将manager目录做一个隐藏。
3.2 别名:别名配置文件要自己建立
3.3 免登陆名:启用share级别(安全性最低,不需要通过用户名认证)
3.4 linux访问windows共享目录:mount
如上操作后share文件夹就有读写权限了。如下设置win账号,因为默认禁止空密码登录。
4.pip/office/pi:su直接切换root,需输入root密码。sudo su/-i:当前用户暂时申请root权限,需输入当前用户密码
4.1 pip换源:curl ipinfo.io 查公网出口ip,ctrl + H 显示隐藏文件
pip install速度慢,用pip换源:进入python,看os在哪个py脚本里即python工作路径在1下,所以在1下建pip文件夹可以执行。
在桌面新建pip文件夹再拖进1,在pip里新建.txt,再改为.ini文件,点击打开输入下面代码保存。
apt install python3-pip --fix-missing(断开vpn,cp /etc/apt/sources.list /etc/apt/sources.list.bak,python3 -m pip install --upgrade pip,apt-get update,pip install 包名 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com)
三个源:https://pypi.tuna.tsinghua.edu.cn/simple,https://pypi.douban.com/simple,https://mirrors.aliyun.com/pypi/simple
upgrade升级下numpy,看下载速度:pip install numpy -U
以上为windows换源,下面为ubuntu换源同理:cd ~
,mkdir .pip
,cd .pip
,gedit pip.conf
,将以下内容复制到pip配置文件pip.conf中,保存退出即可。
[global] index-url = http://mirrors.aliyun.com/pypi/simple/ [install] trusted-host = mirrors.aliyun.com (上面http地址中间一部分,这行为了获取ssl证书,不然会报错)
4.2 shapely:https://www.lfd.uci.edu/~gohlke/pythonlibs/ 或pypi网
到所在文件夹:pip install Shapely-1.6.4.post1-cp37-cp37m-win_amd64.whl
,conda install python==3.7
No module named ‘numpy.core._multiarray_umath’:pip install numpy -U -i https://pypi.tuna.tsinghua.edu.cn/simple/
No module named 'cv2.cv2:pip install opencv-python
出错:如上面下载对应版本再pip install,python -V
,pip -V
4.3 office:下载visio:http://www.itellyou.cn/用迅雷复制链接下载,https://smallpdf.com/pdf-to-jpg
安装到了D盘里:D/office/Office15/VISIO.EXE。KMspico工具安装成功后,Visio同时也正常使用了,不需要任何操作。链接:https://pan.baidu.com/s/1hRGadTjU7cPqMTqaghVFSQ 提取码:e49y
如下关于office2013,mathtype,Axmath:链接:https://pan.baidu.com/s/1XJ9KBQeKxPqjIA692f1J9Q 提取码:tyi5 ,点下图红框标出进行安装:
复制下图文件到上图文件夹位置进行替换。win10关闭更新:
此电脑-管理-服务-双击windows update。
选择文件夹右击"授权访问权限",选择"特定用户",添加"所有人",权限改为"读取与写入",以共享方式访问,就可删除文件夹了,还有删除里面文件就可删除文件夹了。1.
内存卡插入读卡器
再插入电脑的usb接口,将u盘格式化为FAT32格式
。如果右击格式化没有FAT32则用格式化fat32工具:http://www.ridgecrop.demon.co.uk/guiformat.exe。树莓派系统官网:https://www.raspberrypi.org/downloads/raspbian/。下载系统(1.9G)用写盘工具(https://www.balena.io/etcher/或win32diskimager
)将系统
写入u盘
,写完后不要格式化其他盘。
2.
树莓派插上内存卡,接上网线(网络认证)或连上wifi(连wifi,eth0信息为空,因为没有连接网线,wlan0显示内网ip)用ifconfig查看网络。service ssh start
开启ssh服务,树莓派默认用户名pi,密码raspberry,sudo netstat -antp
可查看到当前有22端口即ssh端口被监听,这时可关闭显示器。如果忘了树莓派内网ip,可用win下cmd中输入arp -a
查看局域网下所有ip和mac对应。本电脑就可以ssh连接树莓派再通过picocom -b 115200 /dev/ttyUSB0(有实际的线连)连接到机器终端,minicom -D /dev/ttyUSB0 登不上时进入/var/lock,删除lockfile,minicom又可正常启动。
4.4 双系统:Ubuntu镜像网站http://mirrors.ustc.edu.cn/ubuntu-releases/16.04/
如下图先删除所有,再在驱动1即固态上新建
满存再应用
,默认被分成4个区,选中分区4安装win10。此电脑
右击管理
到磁盘管理(或搜索磁盘管理选择创建并格式化分区),右击删除卷(或压缩卷)
到未分配,右击新建简单卷
再命名。压缩卷C盘分出50G装ubuntu,ubuntu自动识别未分配
空间。
软碟通Ultraiso
将从itellyou
下载的win10镜像(用户customer版64位,复制链接迅雷下载)或ubuntu镜像写入U盘,Boot设置为UEFI启动U盘,legacy为老版本不用。下面两图都为f2。注意f12选择UEFI OPTIONS
:USB1…启动,进入安装界面会提示与其他系统共存。
4.5 版本:os-release.bb,classes/openbmc_version.bbclass(version = “…”)
build$ strings ./tmp/deploy/images/obmc-hq/flash-obmc-hq | grep U-Boot U-Boot 2016.07 v1.0a.00 (Mar 07 2024 - 06:54:47 +0000) build$ cat ./tmp/work/obmc_hq-fb-linux-gnueabi/obmc-hq-image/1.0-r0/rootfs/etc/os-release(issue, version, /proc/version看内核版本)
# 如下aliases.sh(在rootfs/etc/procfile.d, 参考环境变量章节)同init.d/setup_*.sh上电启动脚本。 alias ls='ls --color=auto' alias i="ip addr show | grep 'inet '| grep ' eth0' | grep -v '240.1.1.1' | awk '{print $2}'|awk -F "/" '{print $1}'" alias a="python3 /usr/local/bin/board_setup_routes.py" PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin #在脚本中只能对这行下面的执行脚本的路径生效,不能对外面的shell窗口生效,在shell窗口命令行下PATH=,echo $PATH才生效。 # if [ -f /sys/bus/i2c/devices/48-0058/mfr_id ]; then ln -snf /sys/bus/i2c/devices/48-0058/mfr_id /sys_switch/psu/psu1/model_name;fi # model_name 必须不存在,相当于快捷方式 # ln -s $(find /sys/bus/i2c/devices/i2c-42/42-0048/hwmon -name "hwmon*" | tail -n 1)/name /sys_switch/temp_sensor/temp2/alias # pwm:0%(cpld的0即0x0), 50%(cpld的127即0x7f), 100%(cpld的255即0xff)
vscode连接远程服务器报XHR failed:https://update.code.visualstudio.com/commit:d037ac076cee195194f93ce6fe2bdfe2969cc82d/server-linux-x64/stable (切换浏览器下载),拷贝进远程服务器解压如下:
加载自己驱动如下打印,taints表示污染,在自己的驱动中加入MODULE_INFO(intree,“Y”) 欺骗内核本模块为树内模块解决,modinfo fcbcpld。
4.6 cdc模块:cycle cpu时,usb0设备会注册,如果去除cdc相关驱动,ifconfig usb0会有device not found 报错
修改148行和226行字符串,打印的CDC报错字符也会改变,定位到module_usb_composite_driver函数。
dts:tree /sys/class/i2c-dev/,查看系统有多少I2C的Adapter
8.设备树:dts=device,of_api读取dts中属性,参考include/linux/of.h
chosen { // 不是一个真实的设备,为了uboot向内核传递数据,重点是bootargs参数 bootargs = "root=/dev/nfs rw nfsroot=192.168.1.1 console=ttyS0,115200"; };
如下在linux-aspeed/net/ipv6/addrconf.c中手动死循环,超时从备起。
用dd if=/dev/urandom of=/dev/mmcblk0 bs=1M count=8000随机写破坏ermmc文件系统后,/var/log里文件被清空,blkid信息为空,断电后从主启,如下脚本进行emmc文件系统格式化和挂载成功,没有卡死切备现象。
&spi1 { status = "okay"; m25p,fast-read; ######### pinctrl-names = "default"; pinctrl-0 = <&pinctrl_spi1_default>; flash@0 { # 不是eeprom label = "BIOS_flash"; status = "okay"; }; flash@1 { label = "spi1:1"; status = "okay"; }; }; root@sr6115:~# gpioset gpiochip0 147=1 root@sr6115:~# echo spi1.0 > /sys/bus/spi/drivers/spi-nor/bind [ 162.807166] spi-nor spi1.0: w25q512jv (65536 Kbytes) [ 162.813579] ASPEED_FMC_SPI 1e630000.spi: freq: 50MHz [ 162.819234] ASPEED_FMC_SPI 1e630000.spi: read bus width: 2 [0x203c0641] [ 162.826697] ASPEED_FMC_SPI 1e630000.spi: write bus width: 1 [0x00120602] root@sr6115:~# root@sr6115:~# cat /proc/mtd dev: size erasesize name mtd0: 04000000 00010000 "bmc" mtd1: 000e0000 00010000 "u-boot" mtd2: 00020000 00010000 "u-boot-env" mtd3: 00900000 00010000 "kernel" mtd4: 02000000 00010000 "rofs" mtd5: 01600000 00010000 "rwfs" mtd6: 08000000 00010000 "alt-bmc" mtd7: 000e0000 00010000 "alt-u-boot" mtd8: 00020000 00010000 "alt-u-boot-env" mtd9: 00900000 00010000 "alt-kernel" mtd10: 02000000 00010000 "alt-rofs" mtd11: 01600000 00010000 "alt-rwfs" mtd12: 04000000 00010000 "BIOS_flash" #上面都是BMC,这行是bios root@sr6115:~#
BMC升级BIOS失败,dmesg报IIC crash的错,且无法recover:
修改BIOS代码,修改IIC controller clock与BMC同步为100kHz。ME发出正常波形,升级BIOS时不报错,问题得到fix。