批量修改文件名
# 修改后缀,将 .4.1.1 改为 .4.1
rename 's/\.4.1.1/\.4.1/' *
# 修改前缀
for i in `ls`; do mv -f $i `echo "text_"$i`; done
软链接间接链了多层
- 查看软衔接对应的最终文件
realpath
- 展示搜索最终文件的搜索树结构
namei
结合到上面命令把某个文件夹下的库文件(不要软连接,只找最终文件),拷贝到目标目录
参考:blog.csdn.net/cnboywll/ar…
所以命令
# nx 盒子上搞,把盒子上自带的一些库(比如libopencv_*)烤到运行容器里
# cp -t 选项,就是把[源] [目的] 做了个倒置
realpath /usr/lib/aarch64-linux-gnu/* | xargs cp -t ../libform_aarch64-linux-gnu/
# xargs 分解出参数,说明成占位符(上述命令和这个都可以)
realpath /usr/lib/aarch64-linux-gnu/* | xargs -I {} cp {} ../libform_aarch64-linux-gnu/
从后向前看文件内容
tac log.log | more
tac log.log | less
从本地拷文件到远程主机上
scp ./localfile zhi@192.168.0.158:/home/zhi/
从本地拷文件夹到远程主机上
scp ./localfilder zhi@192.168.0.158:/home/zhi/
从远程拷到本地的逻辑刚好相反
Ubuntu下安装sysv-rc-conf报错:“E: Unable to locate package sysv-rc-conf“
(151条消息) Ubuntu下安装sysv-rc-conf报错:“E: Unable to locate package sysv-rc-conf“_willingtolove的博客-CSDN博客
以 root
用户修改密码
sudo passwd zhou
make
时报错 "两种办法解决 make: Warning: File "xxx" has modification time yyy s in the future 的问题"
touch *
wsl
的启动,与自启动WSL 服务自动启动的正确方法 - 知乎 (zhihu.com)
- 常规启动
wsl
- 自启动
windows terminal
win10开启wsl系统,让我们愉快的使用Linux - 知乎 (zhihu.com)- 修改密码
- 进入
power shell
- 键入
wsl.exe --user root
并改密码
查看 cpu
核心数
- 推荐
nproc
- 方法二
# 关于grep和wc的用法请查询它们的手册或者网络搜索
$ grep 'model name' /proc/cpuinfo | wc -l
安装 flex
apt-get install flex bison
笔记本装ubuntu 18.04
合上盖子会休眠,我不想它休眠:(51条消息) 【Ubuntu 休眠】设置合上笔记本盖子不休眠的方法_肖恭伟的博客-CSDN博客_ubuntu 合上盖子不休眠
编辑下列文件:sudo gedit /etc/systemd/logind.conf
#HandlePowerKey按下电源键后的行为,默认power off
#HandleSleepKey 按下挂起键后的行为,默认suspend
#HandleHibernateKey按下休眠键后的行为,默认hibernate
#HandleLidSwitch合上笔记本盖后的行为,默认suspend(改为ignore;即合盖不休眠)在原文件中,还要去掉前面的#
然后将其中的:
#HandleLidSwitch=suspend
改成下面,记得去掉“#”号:
HandleLidSwitch=ignore
最后重启服务
service systemd-logind restart
Ubuntu 20.04 永不锁屏,下面这个亲测可用
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
linux
刚装机的设置
============================================================
- 一般在切换
root
用户时会报 "su 认证失败"
因为此时还没有root
用户sudo passward root
ifconfig
命令sudo apy-get install net-tools
- 当然也没装
vim
apt-get install vim
- 一般也没装
ssh server
- 安装
ssh
sudo apt update sudo apt install openssh-server -y # 查看状态 sudo systemctl status ssh # 查看状态,可以看到 ssh 服务占用的端口号及ip netstat -tlp # 如果你的防火墙开启了,使用下面语句 sudo ufw allow ssh
- 修改
/etc/ssh/sshd_config
配置文件,允许远程登录(否则报错"Access Denied")# 允许远程登录 PermitRootLogin yes # 开启端口 Port 22
- 卸载 ssh
www.yisu.com/ask/7255.ht… - ssh 自动掉线的处理办法
解决SSH自动断线,无响应的问题。 - 简书 (jianshu.com)
- 安装
centos
安装man
手册yum install man-pages
综上,一个新的linux
机器可以先运行以下命令安装必要的工具
auo_install_toolauo_install_tool.sh
sudo apt-get install vim sudo apt install openssh-server -y
ubuntu
系统装edge
浏览器
如何在Linux中安装Microsoft Edge浏览器 - 知乎 (zhihu.com)
这个靠谱:
- 创建新用户,并在
/home/
下创建目录useradd -d /home/zhou -m zhou
- 确保创建新用户也是使用的bash脚本
usermod -s /bin/bash zhou
- 给新用户设置需要的密码
passwd zhou
- 查看文件夹及文件大小
du -sh -BM *
- 拷贝文件不覆盖原有文件
mv -u src dst
linux
新磁盘添加上了,挂载磁盘
- fdisk常用命令
- n - 创建分区
- p - 打印分区表
- d - 删除一个分区
- q - 不保存更改退出
- w - 保存更改并退出
# 查看磁盘空间
df -h
# 切换root用户
su
# 显示和管理硬盘和分区
fdisk -l
自己的机器:
设备 起点 末尾 扇区 大小 类型
/dev/sdc1 2048 1953523711 1953521664 931.5G Linux 文件系统
Disk /dev/sdb:931.5 GiB,1000204886016 字节,1953525168 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 4096 字节
I/O 大小(最小/最佳):4096 字节 / 4096 字节
磁盘标签类型:gpt
磁盘标识符:1CE91D9E-DE9E-41E8-8E88-60CB012534E1
# 操作该磁盘,为磁盘开辟分区
fdisk /dev/sdc
# 键入n,新建分区
n
# 键入p,创建主分区
p
# 输入第一个扇区的大小。如果是一个新的磁盘,通常选择默认值。如果你是在同一个磁盘上创建第二个分区,我们需要在前一个分区的最后一个扇区的基础上加 1,推荐默认值
2048
# 输入最后一个扇区或者分区大小的值。通常推荐输入分区的大小。总是添加前缀 + 以防止值超出范围错误。
+931.5 G
# 保存退出
w
# 格式化
mkfs.ext4 /dev/sdc
# 挂载到/data目录下
mount /dev/sdc /data
# 在 /etc/fstab 文件中添加条目以便永久启动时自动挂载。
/dev/sdc /data ext4 defaults 0 0
用户添加到 sudo 权限 is not in the sudoers file
#增加配置, 在打开的配置文件中,找到root ALL=(ALL) ALL, 在下面添加一行 #其中xxx是你要加入的用户名称
vim /etc/sudoers
zhou ALL=(ALL) ALL
Linux下为软件赋予root权限运行
- 背景:有些绑定端口,ip的操作需要以root权限运行,避免手工下面这样
# 自动化,谁会在现场这么敲命令
sudo xx
- 1 编写启动脚本StartMediaServer.sh
# StartMediaServer.sh
sudo chown root ./MediaServer
sudo ./MediaServer
- 2 手工为启动脚本赋root权限
sudo chown root StartMediaServer.sh
- 3 也可以一步到位,一个脚本搞定
#!/usr/bin/expect
spawn su root
expect "Password:"
send "xx\r"
send "cd /home/用户名/projects/ZLMediaKit/release/linux/Releas\r"
send "./MediaServer\r"
expect eof
exit
- 前提是要装expect
apt-get install expect
linux 查看环境变量, 设置系统环境变量,设置链接的动态库,及bin文件路径
- 查看环境变量
这个变量可以是被gcc
命令引用的变量
g++ -g -o ConnectSpecCamera ConnectSpecCamera.cpp -I../../../include -Wl,-rpath=$(MVCAM_COMMON_RUNENV)/aarch64 -L$(MVCAM_COMMON_RUNENV)/aarch64 -lMvCameraControl -lpthread
那么打印出来就是下面,从此可用看这个变量具体的路径echo $MVCAM_COMMON_RUNENV
- 设置加载的动态库
-
一, 推荐(将
.so
所在的路径添加进系统搜索路径)
查看链接配置文件,有以下反馈(若没有该文件,或没有该内容,则添加该文件,及该内容)root@NanoPi-M4v2:~# cat /etc/ld.so.conf include /etc/ld.so.conf.d/*.conf
进入存放
.conf文件的目录
cd /etc/ld.so.conf.d
编辑
.conf
文件, 并将.so
所在的目录编辑进该文件(如下是内容)root@NanoPi-M4v2:/etc/ld.so.conf.d# cat LBAS.conf /opt/LBAS/lib/aarch64 /opt/LBAS/bin
更新
sudo ldconfig
-
二, 修改配置文件
/etc/profile
中的环境变量,这个挺有意思的,有个自定义的变量MVCAM_COMMON_RUNENV
,是安装LBAS时添加的,自己也可以学到用这种方式,起到.pc文件的作用
勘误,实际是修改/etc/bash.bashrc
或~/.bashrc
文件,前面这么写是之前的无效的东西- 所有用户
sudo vim /etc/bash.bashrc
(推荐 亲测有效) 或者sudo vim /etc/profile
- 某用户的环境变量配置文件
vim ~/.bashrc
(推荐 亲测有效) 或者vim ~/.bash_profile
或者vim ~/.profile
# 查看 # 这个才是有效的,推荐 cat /etc/bash.bashrc # 对 profile 文件的操作实际无效 cat /etc/profile # 反馈 export MVCAM_COMMON_RUNENV=/opt/LBAS/lib export LD_LIBRARY_PATH=/opt/LBAS/lib/aarch64:$LD_LIBRARY_PATH export PATH=$PATH:/opt/cmake-3.20.5-linux-aarch64/bin
注意(对以上分析,可看出两个系统变量;
bin
环境变量,及LD_LIBRARY_PATH
)LD_LIBRARY_PATH
是系统的.so
链接目录
PATH
是系统的bin
文件目录
分别对两者进行追加的语法,:
起到分割符的作用 将它写进profile
文件就是永久生效,命令行操作就是暂时的
注意, = 两边不能有空格
每项 : 间隔开, = 赋给变量, 变量取值用 $
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:[追加的路径]
# = 两边不能有空格 # 追加.so链接目录 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:[追加的路径] # 追加bin的执行目录 export PATH=$PATH:/opt/cmake-3.20.5-linux-aarch64/bin
更新
# 推荐 source /etc/bash.bashrc source /etc/profile
- 所有用户
-
bin
文件添加到系统变量,以上方法二,编辑/etc/profile
文件已示出
gcc 直接引用pkg-config,以及查看目标库的头文件及库文件有哪些,库文件编译有哪些模块;自定义安装时如何将安装的库目录,包含目录告诉系统
- **注意,是`tab`键旁的``**,要先有`opencv.pc`的文件
```c
gcc -o main main.c `pkg-config --cflags --libs opencv`
```
- 查看
*.pc
具体指向哪里# 查看头文件目录在哪 pkg-config --cflags opencv # 查看库文件有哪些,具体在哪个目录下 pkg-config --libs opencv
- 查看编译得有哪些模块
pkg-config --list-all opencv
- 如果自定义安装(
--prefix==
)找到安装的那个*.pc
,告诉系统链接的库文件,包含的头文件在哪vim ~/.bashrc # 末尾追加 export LD_LIBRARY_PATH=[新添加的*.pc所在的路径]:$LD_LIBRARY_PATH # 当然 source 更新一下 source ~/.bashrc
用ldconfig来鉴别动态库目录下哪些库(.so)是有效的
- 把要链接的库(动态库)目录的写进
/etc/ld.so.conf.d
- 然后
ldconfig
这个命令能鉴别出哪些.so是有效的,如果显示是链接符号的话,则要创建对应的软连接
- 软链接参考:www.cnblogs.com/jing99/p/10…
- 软链接命令:
ln -sf 源文件 软链接的符号
- 删除软链接
rm -rf 软链接的符号
给一些命令取别名
- 参考: c.biancheng.net/linux/alias…
- 编辑
/root/.bashrc
并source
该文件
/etc/bash.bashrc
推荐
/home/[用户名]/.bashrc
亦可alias cls='printf "\033[2J\033[3J\033[1;1H"'
- 删除指定文件夹下的全部文件
alias rf='rm -rf ./*'
- 代替
make clean
的东西alias cmakeclean='rm -rf CMakeCache.txt CMakeFiles cmake_install.cmake Makefile'
linux 设置生成转储文件,设置生成路径
临时生效
- 查看转储文件是否生成的命令
ulimit -c
- 编辑
/etc/profile
文件,允许生成core
文件,编辑完后source
ulimit -c unlimited # 一 反馈如下,则是未设置,不生成 core 文件 0 # 二 反馈如下则是允许生成 core 文件 unlimited
- 使用如下命令,设置生成的目录,及文件命名格式
echo "/[corefile path]/core-%e-%p-%t" > /proc/sys/kernel/core_pattern # %e : 表示程序名添加到 core 文件中 # %p : 添加 pid 到 core 文件 # %t : 添加生成时间到 core 文件
永久生效
sudo vim /etc/bash.bashrc
# 追加
ulimit -S -c unlimited >/dev/null 2>&1
# 定义了core文件的路径,注意,这个文件路径一定要有读写的权限
echo "/home/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_pattern
# 切换到root用户,准备source
su root
source /etc/bash.bashrc
编译 boost
Ubuntu20.10中安装boost 1.75库 - 腾讯云开发者社区-腾讯云 (tencent.com)
gcc 相关
源码编译gcc
- 部分参考:升级GCC版本到11.1 - 知乎 (zhihu.com)
- 下载源码
git clone --branch releases/gcc-11.1.0 https://github.com/gcc-mirror/gcc.git
- 配置下,下载相关依赖
./contrib/download_prerequisites
- 下载相关依赖,前置条件是要有 gcc 和 g++(因为新的gcc 也是由基础的 gcc 编的)
apt-get install build-essential apt-get install flex-devel apt-get install flex bison apt install zlib1g-dev apt-get install gcc-multilib find / -name crti* export LIBRARY_PATH=/usr/lib32:$LIBRARY_PATH
- 配置
./configure --prefix=/usr/local/gcc-11.1.0 --enable-bootstrap --enable-languages=c,c++ --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib
- make -j12 && make install
gdb 相关
- 很有用的全局变量
errno
及函数perror()
- 调试
gdb filename corename
- gdb 设置捕获异常
(gdb) help catch Set catchpoints to catch events. List of catch subcommands: catch assert -- Catch failed Ada assertions catch catch -- Catch an exception catch exception -- Catch Ada exceptions catch exec -- Catch calls to exec catch fork -- Catch calls to fork catch handlers -- Catch Ada exceptions catch load -- Catch loads of shared libraries catch rethrow -- Catch an exception catch signal -- Catch signals by their names and/or numbers catch syscall -- Catch system calls by their names catch throw -- Catch an exception catch unload -- Catch unloads of shared libraries catch vfork -- Catch calls to vfork # 比如设置 catch catch catch throw
- 命令
bt
查看调用堆栈 - gdb 哪家强,值得看:www.zhihu.com/topic/19679…
- gdb 给 string 赋值
call str.assign("ok")
- gdb stl美化
blog.csdn.net/wj1066/arti…
blog.csdn.net/witton/arti…
github.com/gcc-mirror/…
尝试调试死锁
- 首先要晓得进程的 pid
ps -ef | grep [目标进程]
- 打印进程调用栈,看个大概,比如每次都是相同的线程阻塞了
pstack 9527
- attach 到进程上调试,查看进程有哪些线程
gdb attach 9527 info thread
- 根据线程号切换到线程中
thread 2
- 打印线程的栈帧,如果需要的话扩大栈帧数
// 尝试打印栈变量,栈上没有 p cc frame 3
- 打印栈变量,查看状态
// 再来打印栈变量及相关数据结构,打印 mutex 会显示它被谁持有 p cc p cc->mutex1
- 离开某个进程
dettach 9527
cgdb ubuntu安装
- 仓库在我的码云上
- 预先安装
sudo apt-get install texinfo -y sudo apt-get install libncurses5-dev # 上面这个应该才是对的,下面这个应该多余 sudo apt-get install libncursesw5-dev sudo apt-get install libreadline-dev
- 配置文件:
vim ~/.cgdb/cgdbrc
- 快捷键 r --> f5, c--> f6, finish --> f7, n--> f8, s--> f10
- cgdb 中文手册:nowjava.com/docs/cgdb/c…
源码编译 glibc
# 准备工作
sudo apt-get install gawk
# 可能会装这个
sudo apt-get install bison
wget https://mirrors.sjtug.sjtu.edu.cn/gnu/glibc/glibc-2.26.tar.gz
mkdir build
cd build
../configure --perfix=/opt/glibc2.26
make -j12
一个很牛批的打包脚本和启动脚本
抄袭自:ubuntu16.04 利用Docker 部署C++ Gui项目(OpenCV PCL动态库集成) - zzc_bjergsen - 博客园 (cnblogs.com)
- 打包脚本已经验证过了
ldd.sh
function useage() { cat << EOU Useage: bash $0 <path to the binary> <path to copy the dependencies> EOU exit 1 } #Validate the inputs [[ $# < 2 ]] && useage #Check if the paths are vaild [[ ! -e $1 ]] && echo "Not a vaild input $1" && exit 1 [[ -d $2 ]] || echo "No such directory $2 creating..."&& mkdir -p "$2" #Get the library dependencies echo "Collecting the shared library dependencies for $1..." deps=$(ldd $1 | awk 'BEGIN{ORS=" "}$1\ ~/^\//{print $1}$3~/^\//{print $3}'\ | sed 's/,$/\n/') echo "Copying the dependencies to $2" #Copy the deps for dep in $deps do echo "Copying $dep to $2" cp "$dep" "$2" done echo "Done!"
- 使用
ldd.sh yourexe(可执行文件) des_path(目标文件夹)
- 这个打包脚本牛批在于将链接对应的源文件也打包下来,只是名字仍沿用原来的链接名,
到目标机器上后改下目标机器的环境变量
sudo vim /etc/bash.bashrc # 追加变量 export LD_LIBRARY_PATH=/home/zhima/projects/RailTrackPatrol:$LD_LIBRARY_PATH # 更新环境变量 source /etc/profile
- 启动脚本
run.sh
注意,脚本最后一行要适应改成自己的软件名字path_curr=$(cd `dirname $0`; pwd) #dirname $0,取得当前执行的脚本文件的父目录 #cd `dirname $0`,进入这个目录(切换当前工作目录) #pwd,显示当前工作目录(cd执行后的) # add share lib path to system export PATH="${path_curr}:$PATH" export LD_LIBRARY_PATH="${path_curr}:$LD_LIBRARY_PATH" # print for debug #echo $LD_LIBRARY_PATH #ldd ./main # execute ./yourexename $prama1 $prama2 $3prama3 # $0 $1 $2 $3 is the parameters from Terminal
ubuntu 18.04 配置静态ip
Ubuntu 18.04 LTS 中配置 IP 地址的方法和以往使用的配置方法有很大的不同。
参考文章:linux 静态ip ubuntu - 搜索结果 - 知乎 (zhihu.com)
Linux 配置interfaces进行网卡配置 - 白菜没我白 - 博客园 (cnblogs.com)
和旧版本的不同之处在于,Ubuntu 18.04 使用 Netplan 来配置 IP 地址,Netplan 是一个新的命令行网络配置工具。其实在 Ubuntu 17.10 的时候 Ubuntu 开发者就已经介绍过 Netplan 了。接下来要介绍的新的 IP 配置方法不会再用到 /etc/network/interfaces
这个文件,取而代之的是一个 YAML 文件。默认的 Netplan 配置文件一般在 /etc/netplan
目录下
-
- 首先用图形化的网卡设置工具来设,此方法不行则参考以下
-
- 找到 Netplan 默认的网络配置文件所在之处
编辑该文件,只写最简化的配置(其实就是只缺网关和广播没设置) 注意,该文件的缩进是用空格,不是tab/etc/netplan/50-cloud-init.yaml
配置完成之后保存并关闭配置文件。然后用下面这行命令来应用刚才的配置network: ethernets: enp1: addresses : [192.168.1.100/24] gateway4 : 192.168.1.1 dhcp4 : no enp2: addresses : [192.168.2.100/24] gateway4 : 192.168.2.1 dhcp4 : no version: 2 renderer: NetworkManager
如果在应用配置的时候有出现问题的话,可以通过如下的命令来查看刚才配置的内容出了什么问题sudo netplan apply
如果配置正常且生效的话,我们可以用下面这个命令来查看一下sudo netplan --debug apply
ip
ip addr
-
- 编辑
/etc/network/interfaces
难懂这种
# auto lo # iface lo inet loopback auto eth0 eth0:1 iface eth0 inet static address 192.168.0.100 network 192.168.0.0 netmask 255.255.255.0 broadcast 192.168.0.255 gateway 192.168.0.1 iface eth0:1 inet static #多配置的网口 address 192.168.0.200 network 192.168.0.0 netmask 255.255.255.0
- 编辑
网卡静态配置相关
vim /etc/netplan/01-network-manager-all.yaml
(ubuntu 18.04 确认这个有效)
比如这个样子network: version: 2 renderer: networkd ethernets: eth0: dhcp4: no addresses: [10.10.1.222/24] gateway4: 10.10.1.254 nameservers: addresses: [61.139.2.69]
vim /etc/network/interfaces
(kubuntu 就是这个)auto enp0s31f6 iface enp0s31f6 inet static address 10.10.1.189 netmask 255.255.255.0 gateway 10.10.1.254
vi /etc/sysconfig/network-scripts/ifcfg-ens33
永久修改网卡IP TYPE=Ethernet #设置网卡类型,“Ethernet”表示以太网 DEVICE=ens33 #设置网卡的名称 ONBOOT=yes #设置网卡是否在 Linux 操作系统启动时激活 BOOTPROTO=static #设置网卡的配置方式,“static”表示使用静态IP地址,“dhcp”时表示动态获取地址 IPADDR=192.168.80.3 #设置网卡的 IP 地址 NETMASK=255.255.255.0 #设置网卡的子网掩码 GATEWAY=192.168.80.2 #设置网卡的默认网关地址 DNS1=192.168.80.2 #设置DNS服务器的 IP 地址
vim /etc/network/interfaces.d/eth0
debian 系统亲测有效auto eth0 iface eth0 inet static address 10.10.1.155 netmask 255.255.255.0 gateway 10.10.1.254
- ubuntu 20.04 添加路由表
cat /etc/hosts 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 127.0.1.1 bm1684 192.168.2.196 hub.kaolayouran.cn
- 在我自己的本地机器上添加路由表
sudo route add -net 172.16.140.0 netmask 255.255.255.0 gw 固定IP # 解释 sudo route add -net [那几张核心板的网段] netmask 255.255.255.0 gw [网关ip, 本例是 10.10.1.182] # 比如我看起了 172.16.150.15 这张板子 sudo route add -net 172.16.150.0 netmask 255.255.255.0 gw 10.10.1.182
linux 查看系统版本等信息
lsb_release -a
(推荐)cat /etc/os-release
(或者是/etc/*-release文件)- 查看发行信息(推荐)
cat /etc/issue
- 查看内核信息
uname -a: 显示全部信息 -m或--machine:显示电脑类型; -r或--release:显示操作系统的发行编号; -s或--sysname:显示操作系统名称; -v:显示操作系统的版本; -p或--processor:输出处理器类型或"unknown"; -i或--hardware-platform:输出硬件平台或"unknown"; -o或--operating-system:输出操作系统名称; --help:显示帮助; --version:显示版本信息。
- 查看
cpu
相关信息,主频,内核信息等cat /etc/cpuinfo
cat /proc/version
(侧重在查看硬件版本)file /bin/ls
linux 下安装MySQL
安装参考:zhuanlan.zhihu.com/p/64080934
设置密码参考:cloud.tencent.com/developer/a…
-
安装
sudo apt update sudo apt install mysql-server -y
-
查看状态
sudo systemctl status mysql.service
-
查看版本信息
sudo mysqladmin -u root version -p # 或者登录后键入 status
-
使用帮助
mysql --help
-
启动服务
sudo systemctl start mysql.service # 开机自启动 软件由 systemd 管理才行 sudo systemctl enable mysql.service # 重启 sudo service mysql restart;
-
登陆
mysql -u root -p -h [主机名]
-
停止服务
sudo systemctl stop mysql.service && sudo systemctl disable mysql.service
-
设置密码
逻辑思路:- 通过
/etc/mysql/debian.cnf
中的默认用户登陆mysql
- 使用命令设置密码
# 查看默认用户 cat /etc/mysql/debian.cnf
显示
# Automatically generated for Debian scripts. DO NOT TOUCH! [client] host = localhost user = debian-sys-maint password = UA0YeS550GXbLNl0 socket = /var/run/mysqld/mysqld.sock [mysql_upgrade] host = localhost user = debian-sys-maint password = UA0YeS550GXbLNl0 socket = /var/run/mysqld/mysqld.sock
以默认用户登陆并设置密码
mysql -u debian-sys-maint -p use mysql; # 重新设置密码 # 可能提示密码强度不够 # set global validate_password_policy=0; # set global validate_password_length=1; UPDATE user SET authentication_string=PASSWORD('123456') where USER='root'; # set plugin update user set authentication_string =password('123456'),plugin='mysql_native_password' where user='root';
- 通过
-
解决不加
sudo
就报错access denied for user ‘root’@’localhost'
# 先以 sudo root 登陆 sudo mysql -u root -p # 然后 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456'; # 之后即可 mysql -u root -p
-
允许远程登陆**
注意,Mysql 8.0 以上操作的是第二种一种,详见下面
**-
登陆
mysql
赋予远程访问权限use mysql; grant all privileges on *.* to 'root'@'%' identified by '123456'; # 8.0 之后的版采用以下 # 实际是在添加 root 用户,并赋权 # 一般到这步创建的用户才是正儿八经的用户,之前的用户应该都只是 mysql 的默认用户,比如是 /etc/mysql/debian.cnf;或者在8.0以上安装时键入root用户密码的那个临时用户 # 这两步很关键,一般就是这里改下权限,下面再改下监听端口 0.0.0.0 就开启了远程权限 # 防火墙可选步骤, Ubuntu 18.04 没做防火墙设置也可 create user root@'%' identified by '123456'; grant all privileges on *.* to 'root'@'%' with grant option; # 如果提示密码强度不够,执行以下两句 # set global validate_password_policy=0; # set global validate_password_length=1; # 刷新数据库 flush privileges;
-
修改配置文件,然后重新启动
文件路径/etc/mysql/mysql.conf.d/mysqld.cnf
修改如下(127.0.0.1回环网络只允许本机登陆,其它主机登陆不了)# bind-address = 127.0.0.1 bind-address = 0.0.0.0
-
防火墙相关
# 开防火墙 service firewalld start # 重启 service firewalld restart # 添加端口 协议 firewall-cmd --permanent --add-port=3306/tcp firewall-cmd --reload # 光防火墙 service firewalld stop # 或者 sudo systemctl disable firewalld
-
-
查看是否是以
0.0.0.0
(不是127.0.0.1
)监听sudo netstat -npl|grep 3306 # 显示 tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 8048/mysqld
-
卸载(卸载前停
mysql
确保文件备份)# 停止服务 sudo systemctl stop mysql.service && sudo systemctl disable mysql.service # 卸载 sudo apt purge mysql* # 清理依赖 sudo apt autoremove sudo apt autoclean sudo rm -rf /etc/mysql/ /var/lib/mysql
安装8.0以上的高版本,采用官方源
-
到官网复制下源
MySQL :: Download MySQL APT Repository -
下载该
deb
并更新到仓库,然后安装apt-get install curl # 不要加 sudo curl -OL https://dev.mysql.com/get/mysql-apt-config_0.8.19-1_all.deb # 解压该源 sudo dpkg -i mysql-apt-config* # 更新到仓库 sudo apt update # 像上面一样安装 sudo apt install mysql-server -y
Centos
上安装Mysql 8.0
-
参考,很靠谱,力荐:Linux (centos8)安装 MySQL 8 数据库(图文详细教程) - 云+社区 - 腾讯云 (tencent.com)
另一个不知可靠度:(29条消息) CentOs7安装mysql-server和libmysqlclient-dev_Borange54的博客-CSDN博客_libmysqlclient-dev yum -
下载并安装 MySQL 官方的 Yum Repository
wget https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm
-
安装
rpm
rpm -ivh mysql80-community-release-el7-1.noarch.rpm
-
安装服务
yum install mysql-server
-
启动服务
systemctl start mysqld.service
-
查看运行状态,及监听地址(
0.0.0.0
才正确),见上面 -
查看原始密码,如果提示密码为
empty
,则就是空的原始密码grep "password" /var/log/mysqld/mysqld.log
-
登录
mysql
,并设置密码mysql -uroot -p use mysql; ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';
-
设置远程连接(见上面
mysql 8.0
的设置),开放端口(只演示防火墙的设置)firewall-cmd --permanent --zone=public --add-port=3306/tcp # 刷新防火墙设置 firewall-cmd --reload
-
设置不区分大小写(没验证过), 在[mysqld]下,添加以下内容
vim /etc/my.cnf # 让MYSQL大小写敏感(1-不敏感,0-敏感) lower_case_table_names=1
MySQL
作为客户端开发
(29条消息) Linux(程序设计):18---libmysqlclient-dev库(C语言操作MySQL)_董哥的黑板报-CSDN博客_libmysqlclient-dev
linux 防火墙与网络参看相关
参考简书:www.jianshu.com/p/a0d92b76b…
- 防火墙相关
# 开防火墙 service firewalld start # 重启 service firewalld restart # 添加端口 协议 firewall-cmd --permanent --add-port=3306/tcp firewall-cmd --reload # 光防火墙 service firewalld stop # 或者 sudo systemctl disable firewalld
- 查看某端口被谁占用(程序), 进程号
netstat -npl|grep 3306
安装Samba服务
- 安装命令
sudo apt install samba
- 修改配置文件
配置文件路径/etc/samba/smb.conf
追加以下内容[Root] path = / writeable = yes browseable = yes guest ok = yes
- 为要修改的文件夹添加权限,比如
sudo chmod +777 projects/SambaServer/
- 重启服务
sudo service smbd restart
win
上访问该samba
服务\\192.168.0.41\Root
源码编译 qt5.15
参考:zhuanlan.zhihu.com/p/363986626
zhuanlan.zhihu.com/p/394306561
-
只编译 qtcore 模块(很常规,没有报错的)
cd qtbase mkdir build cd build make -j12
-
下载源码
wget https://mirrors.cloud.tencent.com/qt/official_releases/qt/5.15/5.15.2/single/qt-everywhere-src-5.15.2.tar.xz # 解压 tar -xf qt-everywhere-src-5.15.2.tar.xz
-
准备工作,很重要(准备这个然并卵,仍然有一个函数的定义编译不进来,其实是cbor这个模块)
error: 'const char* cbor_error_string(CborError)' declared 'static' but never defined [-Werror=unused-function] CBOR_API const char *cbor_error_string(CborError error)
sudo apt-get install '^libxcb.*-dev' libx11-xcb-dev libglu1-mesa-dev libxrender-dev libxi-dev libxkbcommon-dev libxkbcommon-x11-dev
-
配置
mkdir build cd build ../configure -developer-build -opensource -nomake examples -nomake tests --prefix=/data_ssd1/zhou_projects/sino_grain_new/081/qt-everywhere-src-5.15.2/lib
-
make -j12 && make install
-
编译
linux 下源码编译并安装 Python
python 3.9
国内源 https://mirrors.huaweicloud.com/python/3.9.0/
- 下载并解压
wget https://mirrors.huaweicloud.com/python/3.9.0/Python-3.9.0.tar.xz tar -xvf Python-3.9.0.tar.xz
- 切换到解压包下
cd Python-3.9.0
configure
并编译# 当然也可以不在build中间目录下,直接./configure mkdir build cd build ../configure make -j8 && make install
- 注意,此次编译会将
python 2.7
安装在/usr/bin
下,而python 3.9
会安装在/usr/local/bin
下, 所以在使用命令行时要指定# 因为 python3 是 python3.9 的软链接 python3 xx
- 查看版本号
python3 -V
- 预装工具
# python 安装工具和环境生成工具 pip install pyinstaller pip install virtualenv
apt 升级到 python 10
xungui 项目装相机驱动 数据库 python 环境
- 背景
Dalsa
相机驱动mysql 8.0
数据库- 文件服务
samba
pyhthon 3.9
环境,主要是作文件服务的udp
发ip
的服务端
auto_install.sh
# --------------------- 安装 Dalsa 相机驱动 cd ~/projects tar -zvxf GigE-V-Framework_x86_2.10.0.0157.tar.gz cd DALSA # 安装编译依赖 sudo apt-get install gcc sudo apt-get g++ sudo apt-get install GNU make sudo apt-get install libX11-dev sudo apt-get install libxext-dev sudo apt-get install libgtk-3-dev sudo apt-get install libglade2-0 sudo apt-get install libglade2-dev # 执行厂家安装脚本 ./corinstall # --------------------- 安装数据库 cd ~/projects sudo apt-get install curl curl -OL https://dev.mysql.com/get/mysql-apt-config_0.8.19-1_all.deb sudo dpkg -i mysql-apt-config* sudo apt update sudo apt install mysql-server -y sudo systemctl enable mysql.service # --------------------- 安装 samba 服务 cd ~/projects sudo apt install samba sudo chmod +777 -R ~/projects/RailTrackPatrol # --------------------- 安装 python cd ~/projects wget https://mirrors.huaweicloud.com/python/3.9.0/Python-3.9.0.tar.xz tar -xvf Python-3.9.0.tar.xz cd Python-3.9.0 mkdir build cd build ../configure sudo make -j8 sudo make install
- 需要改动的设置
-
- 数据库
允许远程登录
加载数据表# 首次采用默认账号登录,并创建用户,授权远程登录 mysql -u root -p use mysql; create user root@'%' identified by 'admin'; grant all privileges on *.* to 'root'@'%' with grant option; flush privileges; # 编译数据库配置文件 sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf # 修改如下 # bind-address = 127.0.0.1 bind-address = 0.0.0.0 # 重启 sudo systemctl restart mysql.service
# 登录到mysql mysql -u root -p # 建数据库 create database track_patrol; use track_patrol; # 加载数据表及数据 source /home/zhima/projects/RailTrackPatrol/resource/dummy.sql;
- 数据库
-
samba
服务的配置文件
sudo vim /etc/samba/smb.conf
重启服务[RailTrackPatrol] path = /home/zhima/projects/RailTrackPatrol writeable = yes browseable = yes guest ok = yes
sudo service smbd restart
-
- 修改环境变量
sudo vim /etc/bash.bashrc # 追加变量 export LD_LIBRARY_PATH=/home/zhima/projects/RailTrackPatrol:$LD_LIBRARY_PATH # 更新环境变量 source /etc/profile
- 至此,即完成绿色版的安装,其实以下就不必了,因为
牛批
的打包脚本将软链接所链接的源文件拷贝下来,只是文件名还是沿用原机器上的链接名(实际就是源源文件),以下是不必要的操作- 把链接文件的源文件也拷贝到安装包
创建链接cd /usr/local/lib scp libopencv_imgproc.so.3.4.1 libopencv_core.so.3.4.1 libavcodec.so.58.91.100 libavutil.so.56.51.100 libswscale.so.5.7.100 zhima@192.168.0.159:~/projects/RailTrackPatrol/ cd /opt/Qt5.12.0/Tools/QtCreator/lib/Qt/lib scp libQt5Widgets.so.5.12.0 libQt5Gui.so.5.12.0 libQt5Network.so.5.12.0 libQt5Core.so.5.12.0 zhima@192.168.0.159:~/projects/RailTrackPatrol/
ln -sf libopencv_imgproc.so.3.4.1 libopencv_imgproc.so.3.4 ln -sf libopencv_core.so.3.4.1 libopencv_core.so.3.4 ln -sf libavcodec.so.58.91.100 libavcodec.so.58 ln -sf libavutil.so.56.51.100 libavutil.so.56 ln -sf libswscale.so.5.7.100 libswscale.so.5 ln -sf libQt5Widgets.so.5.12.0 libQt5Widgets.so.5 ln -sf libQt5Gui.so.5.12.0 libQt5Gui.so.5 ln -sf libQt5Network.so.5.12.0 libQt5Network.so.5 ln -sf libQt5Core.so.5.12.0 libQt5Core.so.5
- 把链接文件的源文件也拷贝到安装包
linux 开机自启
- 使用
systemctl
来管理cd /etc/systemd/system sudo vim auto_start_broadcast.service
- 编辑
auto_start_broadcast.service
文件[Unit] Description= Documentation= After=network.target Wants= Requires= [Service] ExecStart=/usr/local/bin/python3 /home/zhouqinan/projects/broadcast.py ExecStop= ExecReload=/usr/local/bin/python3 /home/zhouqinan/projects/broadcast.py Type=simple [Install] WantedBy=multi-user.target
- 先试下能否加载
sudo systemctl start auto_start_broadcast.service
- 设置开机自启
sudo systemctl enable auto_start_broadcast.service
- 关闭开机自启
sudo systemctl disable auto_start_broadcast.service
linux 测试usb带宽
- 速率(最高)
- usb 2.0
480Mbps 即 60MB/s - usb 3.0
5Gbps
- usb 2.0
lsusb
root@NanoPi-M4v2:~# lsusb Bus 006 Device 007: ID 2e03:0001 Bus 006 Device 006: ID 2109:0817 VIA Labs, Inc. Bus 006 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 005 Device 043: ID 046d:c077 Logitech, Inc. M105 Optical Mouse Bus 005 Device 042: ID c0f4:01e0 Bus 005 Device 041: ID 2109:2817 VIA Labs, Inc. Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
- 3.0 表示有 usb 3.0
lsusb -tv
root@NanoPi-M4v2:~# lsusb -tv /: Bus 06.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 5000M |__ Port 1: Dev 6, If 0, Class=Hub, Driver=hub/4p, 5000M |__ Port 4: Dev 7, If 0, Class=Miscellaneous Device, Driver=, 5000M |__ Port 4: Dev 7, If 1, Class=Miscellaneous Device, Driver=, 5000M |__ Port 4: Dev 7, If 2, Class=Miscellaneous Device, Driver=, 5000M /: Bus 05.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 480M |__ Port 1: Dev 41, If 0, Class=Hub, Driver=hub/4p, 480M |__ Port 2: Dev 42, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M |__ Port 2: Dev 42, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M |__ Port 3: Dev 43, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M /: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=ohci-platform/1p, 12M /: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=ehci-platform/1p, 480M /: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ohci-platform/1p, 12M /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-platform/1p, 480M
- 12M 意味着 USB 1.0 / 1.1的速率是 12Mbit/s
- 480M 意味着 USB 2.0的速率是 480Mbit/s
- 测试带宽(用个u盘)
# 切到u盘目录 cd /media/pi/ZHOUQINAN # 测试写入 dd if=/dev/zero of=./largefile bs=8k count=10 # 测试读取 sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches" dd if=./largefile of=/dev/null bs=8k
软件源更换国内源以及下载命令
- 下载命令
# -c 表示下载断了的话仍然从断点处继续下载, addr 就是自己要下的地址 wget -c addr --no-check-certificate
更换软件源
- 查看
ubuntu
代号,获取Codename
字段zhouqinan@zhouqinan-Lenovo:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 18.04.5 LTS Release: 18.04 Codename: bionic
- 确认国内源
- 借助该网站
模板:18.04source - Ubuntu中文- 选定自己的源
- 复制模板出来
- 借助该网站
- 三个东西齐了: 模板, 源地址,
Codename
- 将模板命名为
sources.list
- 替换
- 将选定的源地址替换模板中的源地址
- 将
Codename
替换 源地址上的Codenmae
字段(即地址后面间隔一个空格的字符串,比如bionic
)
一份示例如下sources.list
# 阿里云源 deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse ##測試版源 deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse # 源碼 deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse ##測試版源 deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse # 清华大学源 deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse ##測試版源 deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse # 源碼 deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse ##測試版源 deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
- 将模板命名为
- 配置文件安装上系统
- 原来的东西先备份
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bcakup
- 拷贝到系统目录下
sudo cp ./sources.list /etc/apt/sources.list
- 更新
# 这个就是一个编辑的命令不需要了 # sudo gedit /etc/apt/sources.list sudo apt-get update sudo apt-get upgrade
- 原来的东西先备份
查找进程及查看网络端口占用情况
- 参考有用:www.runoob.com/w3cnote/lin…
lsof
命令和netstat
- 杀死进程
kill -9 [进程号]
- 根据程序名查找进程
ps -ef | grep [程序名]
- 根据进程号,查找进程相关的信息,比如进程是哪个文件启动的
ll /proc/[pid]
- 查看某端口上是否有服务
netstat -npl|grep [3306]
- 根据程序名查看占用的端口
netstat -npl|grep [MediaServer]
Centos 相关上有差异性的命令
- 安装编译环境,比如像 build-essential 这种
yum groupinstall "Development Tools"
linux 添加用户
-
创建新用户,并在
/home/
下创建目录useradd -d /home/zhou -m zhou
-
确保创建新用户也是使用的bash脚本
usermod -s /bin/bash zhou
-
推荐
sudo useradd -d /home/zhou -s /bin/bash -m zhou:zhou # 或者 sudo useradd -m -G users,sudo,audio,video,docker -s /bin/bash zhou
-
给新用户设置需要的密码
passwd zhou
linux 数据恢复参考
linux 误删文件恢复方法(debugfs) - 简书 (jianshu.com)
Linux恢复误删除的文件或者目录 - 简书 (jianshu.com)
编译ffmpeg 及它的依赖x264 fdk-aac SDL2
- 卸载与清除
# 删除由make install命令安装的文件 make uninstall # 只删除make时产生的临时文件 make clean # 同时删除configure和make产生的临时文件 make distclean
只说配置项./configure
, make -j8
make install
这些后继工作不表
- 编译
fdk-aac
./configure --enable-shared
- 编译
x264
./configure --enable-shared
- 编译
ffmpeg
./configure --enable-nonfree --enable-gpl --enable-libx264 --enable-ffplay --enable-ffmpeg --enable-ffprobe --enable-shared --disable-debug --disable-x86asm --disable-static --disable-doc --extra-cflags=-I../SDL2-2.0.14/build/include --extra-ldflags=-L../SDL2-2.0.14/build/lib
linux上一些报错的解决办法的汇总
ssh
使用报错"ECDSA host key for 108.61.163.242 has changed and you have requested strict checking. Host key verification failed."(一般重置服务器会报错),解决如下:
ssh-keygen -R [主机ip]
win
上下载的文件放在linux
上不认了;报错".ibtoolize: error: AC_CONFIG_MACRO_DIRS([m4]) conflicts with ACLOCAL_AMFLAGS=-I m4"
# 所在目录执行如下
find . -type f -print0 | xargs -0 dos2unix
# 或者,感觉解决不彻底
dos2unix filename
linux 上 qt 打包
我自己用的这个工具,并配到了环境变量
# 一 将bin文件烤到一个目标文件夹
# 二 在目标文件夹下执行以下命令
linuxdeployqt bin -appimage
打包工具的获取及设置到环境变量
blog.csdn.net/zyhse/artic…
blog.csdn.net/imyang2007/…
学习 linux 下的打包压缩,和解包解压
先学 .tar.gz
.tar.bz2
.tgz
前言
tar
默认就只是打包工具- 压缩和解压工具
gzip
bzip2
.tgz
等于.tar.gz
tar
参数的组合就完成打包压缩, 解包解压
先直接学一步到位的打包压缩和解包解压
- 便于记忆,解释参数
- 1 选压缩或解压
c
表压缩(compress)x
表解压
- 2 选哪种解压/压缩器
z
gzipj
bzip2
- 3 指定压缩包名称,压缩时用
f
- 4 指定文件夹,解压释放时用
-C
- 5 显示进度
v
- 1 选压缩或解压
示例, 注意这几个解压命令是不会裸释放的,都是释放到文件夹下
- 指定文件夹打包压缩成指定的压缩包
tar -zcvf build.tar.gz ./build # 其实和上面是一种文件 tar -zcvf build.tgz ./build # 使用 bzip2 压缩器 tar -jcvf build.tar.bz2 ./build
- 从指定文件夹中解压出来
tar -vxf test.tar -C test_release tar -jxvf build.tar.bz2 # 释放到指定文件夹 -C tar -jxvf build.tar.bz2 -C build tar -zxvf build.tar.gz tar -zxvf build.tgz
再学zip
unzip
- 使用 zip 压缩目录需要注意一点,必须要添加参数 -r, 这样才能将子目录中的文件一并压缩,如果要压缩的文件中没有目录,该参数就可以不写了。使用 zip 压缩文件,会自动生成文件后缀.zip, 因此就不需要额外指定了。
# zip -r [目标] [源文件] zip -r ./RailMaster ./RailMaster/
- 解压注意,要指定解压目录,否则将压缩包里的东西全部释放出来,散了
unzip [压缩包名] -d [解压目录]
echo 在行尾追加字符串,插入字符串
echo -n "hello" >> 1.txt
- 追加在下一行
echo "hello" >> 1.txt
- 指定在某行追加,并换行
sed -i "4i include(\${TOOL_CHAIN_CMAKE}) \n" ../CMakeLists.txt.bak
linux
开启自动登录与关闭自动登录
如何在Ubuntu 18.04 LTS中启用和禁用自动登录 - 系统极客 (sysgeek.cn)
彻底删除软件
- 删除软件及其配置文件
apt-get --purge remove <package>
- 删除软件
sudo apt-get remove --purge wine
- 卸载残留不用得软件包,删除没用的依赖包
sudo apt-get autoremove
ubuntu
用 deep-wine6
安装 wechat
zhuanlan.zhihu.com/p/128070630
deepin.com.wechat_2.6.2.31deepin0_i386.deb 下载:packages.deepin.com/deepin/pool…
参考(按这个来还没完成,它链接的下载源很全):zhuanlan.zhihu.com/p/428285559
参考:blog.csdn.net/wangxiao747…
linux 下的图形界面的远程工具:3 个 Linux 上的 SSH 图形界面工具 - 知乎 (zhihu.com)
docker相关
- 远程机器上有容器,配置容器的sshd,然后vscode远程连上它
参考:zhuanlan.zhihu.com/p/361934730
推荐,可行- vscode ssh 连上远程机器
- vscode 选 Containers(就是可以切换ssh/Containers 的地方),选中列出的容器
docker
安装
zhuanlan.zhihu.com/p/143156163- 普通用户添加到
docker
组
www.jianshu.com/p/7b86390b9…
组docker在安装docker的时候,就已经添加了,所以只需要执行两个操作即可:
将用户加入docker组之后,发现使用docker ps或者docker images不会提示权限不足了。# sudo usermod -aG docker zhou # sudo gpasswd -a $USER docker # newgrp docker # systemctl restart docker reboot
- 修改
etc/docker/daemon.json
{ "registry-mirrors":[ "https://emasu4pd.mirror.aliyuncs.com", "http://hub-mirror.c.163.com" ], "insecure-registries":["192.168.2.100:5000"], "runtimes": { "nvidia": { "path": "/usr/bin/nvidia-container-runtime", "runtimeArgs": [] } }, "insecure-registries": ["hub.kaolayouran.cn:5000","192.168.2.100:5000","192.168.2.100:8001"] }
nividia
安装docker
容器支持
blog.csdn.net/KingOfMyHea…
www.cnblogs.com/GengMingYan…- 容器映射关系 [宿主机]:[容器内]
- 运行 docker ,开启端口映射,文件夹映射
- 映射目录
docker run -it -v /mnt/sdb1/Projects/sdc:/mnt/sdb1/Projcts/sdc --name=sdc_env duruo850/ubuntu18.04-python3.6 /bin/bash - 映射端口 ssh, 远程 vscode 开发 docker run -it -p 8022:22 --name=sdc_dev dce07015e827 /bin/bash
- 推荐
docker run --privileged -it -p 8022:22 -v /mnt/sdb1/Projects/sdc:/mnt/sdb1/Projects/sdc -e LANG=C.UTF-8 -v /etc/localtime:/etc/localtime -v /etc/hosts:/etc/hosts --name=sdc_dev [镜像id] /bin/bash
- nvidia 开发时启动容器的命令,把nvidia的库映射到容器里去
docker run --privileged -it --runtime=nvidia --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -p 8082:8087 -p 8083:8888 -e NVIDIA_VISIBLE_DEVICES=all -e LANG=C.UTF-8 -v /etc/localtime:/etc/localtime -v /etc/hosts:/etc/hosts cacee1572cc4 /bin/bash
- bitmain(可用,启动开发镜像)
docker run -it (-u 1012:1013 这个没用, 可以 -u root 指定用户) --privileged=true -v /home/zhou:/home/zhou --net=host -v /dev/shm --tmpfs /dev/shm:exec -v /etc/localtime:/etc/localtime -e LANG=C.UTF-8 --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --name=zhou_bm_dev_container 192.168.2.100:5000/osmagic/bmnn_pcie-dev:v1.2 # 实测OK有用,把容器 -u [宿主机用户id]:[容器id] --user 指定默认用户 docker run -it -u 1006:1000 --user root --privileged=true -v /mount_data/zhou/Projects:/mount_data/zhou/Projects -v /mount_data/zhou/osmagic:/home/osmagic --net=host -v /dev/shm --tmpfs /dev/shm:exec -v /etc/localtime:/etc/localtime -e LANG=C.UTF-8 --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --name=zhou_bm_dev_container 192.168.2.100:5000/bitmain/build:v2.8 bash
- ivs1800 启动开发镜像(可用)
docker run -it --runtime=nvidia --name=zhou_ivs1800_dev_container -v /etc/localtime:/etc/localtime -e NVIDIA_VISIBLE_DEVICES=0 -e NVIDIA_DRIVER_CAPABILITIES=video,compute,utility -e LANG=C.UTF-8 --net=host -v /tmp:/tmp -e DISPLAY=$DISPLAY -v /mnt/sdb1/Projects/ivs1800:/mnt/sdb1/Projects/ivs1800 --cap-add=SYS_PTRACE --security-opt seccomp=unconfined 192.168.2.100:5000/ivs/build:v1.2
- nvidia 平台,启动开发镜像(可用)
# 启动英伟达的开发镜像 # --net=host 表示全局映射, 所以再指定 -p 8082:8087 无效 # --user 1000:30001 1000表示宿主机用户uid,30001表示容器uid,这么弄就可以避免容器里和宿主机文件权限不一致的问题 docker run -it --runtime=nvidia --name=zhou_nvidia_dev_container_v3.0 --user 1000:30001 -v /etc/localtime:/etc/localtime -e NVIDIA_VISIBLE_DEVICES=0 -e NVIDIA_DRIVER_CAPABILITIES=video,compute,utility -e LANG=C.UTF-8 --net=host -v /tmp:/tmp -e DISPLAY=$DISPLAY -v /mnt/sdb1/Projects/nvidia:/mnt/sdb1/Projects/nvidia --cap-add=SYS_PTRACE --security-opt seccomp=unconfined 192.168.2.100:5000/osmagic/ai_service_dev:v3.0
- don't load model,use pre serial model
docker run -it --runtime=nvidia -v /etc/localtime:/etc/localtime -e NVIDIA_VISIBLE_DEVICES=0 -e NVIDIA_DRIVER_CAPABILITIES=video,compute,utility -e LANG=C.UTF-8 --net=host -v /tmp:/tmp -v /data/serial:/root/koala/osmagic/serial -e DISPLAY=$DISPLAY -v /home/andy:/home/andy --cap-add=SYS_PTRACE --security-opt seccomp=unconfined [docker img]
- 映射目录
docker
打tag
www.cnblogs.com/pzk7788/p/1…- docker push 到仓库
- 先将容器搞成镜像
docker commit 67e551b2b7c1 sdc_env:v2.0_complete_3rdlib # 解释下 docker commit [容器id] [给镜像取的名字]:[给镜像的 tag ]
- 然后给镜像重新打上 tag,打上新的 tag 就和远程库关联上了
docker tag sdc_env:v2.0_complete_3rdlib hub.kaolayouran.cn:5000/osmagic-all/micro-algo-dynamic/sdc_env:v2.0_complete_3rdlib
- 推上仓库
docker push hub.kaolayouran.cn:5000/osmagic-all/micro-algo-dynamic/sdc_env:v2.0_complete_3rdlib
- 尝试直接在把容器打成镜像时把远程仓库的地址搞到 tag 上
docker commit [选项] <容器ID或容器名> [<仓库名>:<标签>]
- docker 仓库首次要登陆,鉴权
docker login hub.kaolayouran.cn:5000 Username: xxx Password: xxx
- 修改 docker 的存储位置,避免占用固态盘(镜像文件迁移到机械盘上,我用了下面的创建链接的这种方式)
cloud.tencent.com/developer/a… - dockerfile 构建 docker zhuanlan.zhihu.com/p/434090003…
- 执行 docker 容器内的shell命令,试过在
docker run -it /bin/bash -c "shell 命令"
没生效,下面实测能解决,就是分步来做(先启动 docker run ,然后放在 execbin 函数里执行bash命令) - 注意,shell 命令长句分成多行,在行末尾直接
\
然后回车
,不要其他多余操作## # @Author: your name # @Date: 2021-05-26 02:06:58 # @LastEditTime: 2021-05-26 02:09:35 # @LastEditors: Please set LastEditors # @Description: In User Settings Edit # @FilePath: /city_manager/workspace/docker_build/docker.sh ### IMAGE_NAME=hub.kaolayouran.cn:5000/osmagic-all/bitmain/081_bm:20220719152036 CONTAINER_NAME=osmagic_release execbin(){ set -x docker exec -it osmagic_release bash -c "cd /home && ./init_container.sh" } start(){ set -x docker run \ --privileged=true \ --cap-add=SYS_PTRACE \ --security-opt seccomp=unconfined \ --name $CONTAINER_NAME \ -p 8087:8087 \ -v /system:/system \ -e LOCAL_USER_ID='1000' \ -itd $IMAGE_NAME \ bash # bash -c "cd /home && ./init_container.sh" } stop(){ docker stop $CONTAINER_NAME &&\ docker rm $CONTAINER_NAME } execit(){ docker exec -it $CONTAINER_NAME bash } logs(){ docker logs -f $CONTAINER_NAME --tail 1 } case "$1" in logs) logs ;; exec) execit ;; start) start execbin ;; stop) stop ;; restart) stop start ;; log) docker logs -f $CONTAINER_NAME ;; *) echo "Usage: $0 {start|stop|restart}" exit 1 esac
nvidia-smi
- NVIDIA查看显卡解码能力,可以通过nvidia-smi dmon命令查看
k8s
- search cmd
kubectl get pods -n test-gpu | grep cxx
- k8s exec
ubectl exec -it -n test-gpu $podname bash
linux
安装图形界面的远程工具:zhuanlan.zhihu.com/p/375144056
ubuntu 20.04
安装鼠标滚轮快慢:blog.csdn.net/weixin_4309…
setwheel
有些系统下(比如嵌入式的 arm 板子上)没用 systemlctl 来管理软件,那它可能就是 service 在管理软件,参考:www.cnblogs.com/a5idc/p/137…
- 也可能是 /etc/init.d 管理,比如:
比如目录结构这个样子/etc/init.d/ssh start
/etc/init.d/ |-- dbus |-- hwclock.sh |-- procps |-- ssh `-- x11-common
文件传输相关
- sshfs 远程文件映射
sshfs root@192.168.2.197:/data/model_manager NetDir197/
- sftp 登录
sftp zhou@192.168.10.10
- 获取整个文件夹
get -P -r /公共文件夹/fy/项目资料/项目数据/车辆未清洗典型错误数据 ./
- sftp 映射目录:blog.csdn.net/axing2015/a…
- sftp 映射文件夹
sftp zhou@10.10.1.209:/mnt/sdb1/Projects/sdc
- 用 get 拷贝文件
get -r ./3rd_part/Poco1.10.1 /usr/app/container/3rdApp/
- 远程传文件,指定
ssh
端口,不覆盖原有文件rsync -avzut --progress -e 'ssh -p port' ./tmp zhouqinan@ip:~/Projects/tmp
- nfs 映射远程文件夹
www.jianshu.com/p/5314f9033…
sed 文本中插入字符串:blog.csdn.net/Olivia_Vang…
.gitconfig 配置它,让他能缓存密码,不用每次都输入密码
[user]
name = myname
email = xx@qq.com
[credential]
helper = store
#[http "https://github"]
#[http "https://github.com"]
# sslVerify = false
vscode 缓存 ssh 密码,不用每次都输密码登录
- ssh 生成公钥,传到 git 仓库
ssh-keygen -t rsa -C "email@example.com"
- 选定目标:每次 ssh 时登的用户是 xx 而不是 root 的话,那么公钥文件就应放在 /home/xx/.ssh/authorized_keys
思路:先在客户端产生出公钥,可以先在自己机器上看下(公钥位置:C:\Users\xx.ssh\id_rsa.pub).然后公钥传到ssh服务端机器上的对应用户的.ssh文件夹下(/home/xx/.ssh/),最后id_rsa.pub --重命名--> authorized_keys,重启 sshd - 在客户端产生公钥
# 一路回车 ssh-keygen
- 拷贝到目标文件夹下,并重命名
- 重启 sshd 服务
- 这个是客户端是 linux 机器的配置方法:vscode Remote-SSH如何保存密码自动登录远程服务器 - Bill Hu's Blog (billhu0.github.io)
shell 相关
shell 截取字符串:c.biancheng.net/view/1120.h…
递归删除指定的文件
find . -name "CMakeCache.txt" |xargs rm -f
查找文件并拷贝到指定目录
find / -name "libPocoCrypto.so.71" | xargs -n1 -i cp {} ./
shell 制作脚本只删除 build 目录下的所有文件,防止误删 rm -rf*
pwd_path=$PWD
if [ "build" = ${pwd_path:0-5:5} ]
then
rm -rf ${pwd_path}/*
fi
Linux之man命令详解及中文汉化
ubuntu 下安装 smba 服务
www.jianshu.com/p/c4579605a…
blog.csdn.net/yifan850399…
blog.csdn.net/qq_43402273…
linux 查看磁盘空间
linux 终端无法输入
ctrl+d 结束输入或退出shell\
ctrl+s 暂停屏幕输出\
ctrl+q 恢复屏幕输出\
ctrl+l 清屏,等同于Clear
cmake 升级
Linux下查看分析可执行文件的方式
(76条消息) Linux下查看分析可执行文件的方式_酸菜鱼的鱼的博客-CSDN博客_linux查看可执行文件内容
sftp 常用命令
ubuntu 18.04 升级到 20.04
可用:如何将Ubuntu 18.04升级到Ubuntu 20.04_Linux教程_Linux公社-Linux系统门户网站 (linuxidc.com)
向日葵命令行安装
service.oray.com/question/11…
sunlogin.oray.com/download/li…
zhuanlan.zhihu.com/p/358820354
linux 安装qt库
sudo apt-get install qt5-default
curl 脚本
curl -i -X POST \
http://127.0.0.1:10101/dynamic/api/v1/setup \
-H 'Content-Type: application/json' \
-d '{
"cameraId": "2",
// "url": "rtsp://192.168.2.66/person.avi",
// "url":"rtsp://192.168.2.66:554/out.mp4",
"url":"rtsp://10.10.1.209/live/zhou",
"imageOut": "path",
"skipFrame": 25,
"roi": [],
"areaBoxes": [],
"inputType": "RTSP",
"notifyUrl":"http://10.10.1.209:5000/osmagicCall",
"abilities": [
{
"name": "OffDutyAlarm",
"value": {
"interval": 0.5,
"minTarry": 3,
"alarmInterval": 5,
"threshold": 0.4,
"areaIsReverse": false,
"pointType": 1,
"zoomFactor": 1.0,
"minBox": {
"width": 50,
"height": 50
},
"areaBoxes": []
}
}
]
}'