linux命令类和shell技巧类

1、dd命令

可以拷贝一切,内存,磁盘,当设备出现问题,可以通过dd命令将内存数据拷贝出,无敌。

2、软连接

自己想要的软件直接到官网下载,或者交叉编译器可以直接使用此方法 。

1
ln -s 【目标】  【链接到目标地址】

都是绝对地址。

另一种是设置环境变量的方式,设置的地址在/etc/profile

类似:export PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin

/usr/local/bin/放置了一些软件的启动地址。
~/bashrc放置的是用户的一些个性化设置,也可以将环境变量放到里面。

bashrc的作用:1、可以在利用命名函数alias定制需要的指令;2、设定环境路径;3、提示符设置。

3、vim中w ! sudo tee %

%为当前文件,上面的作用主要是缺少sudo时,可以直接采用上面命令保存vim,避免尴尬。

4、grep -nR可以查看引用的字符串

5、find ./ -name “test” 可以查找文件

6、unzip解压乱码问题

unzip有时候需要去指定编码 unzip -O GBK xxxxx.zip

7、file 命令

查看可执行程序是否有动态库依赖

8、scp命令

  • 使用git工具。模拟windos下的linux开发环境。常用的操作有scp操作将文件拷贝到开发版中。要求是开发板有ssh协议。

9、dig命令

查询域名解析

10、nm命令

查看可执行程序是否有动态库依赖,可查询函数在是否被引用过。

ubuntu设置

1、共享文件

从ubuntu20.04开始,设置共享文件就很麻烦

第一步:
安装samba:

1
sudo apt install samba

第二步;
创建一个共享文件夹
我以桌面Desktop为例子

第三步:
设置密码:

1
sudo smbpasswd -a ygc

第四步:

1
sudo vim /etc/samba/smb.conf
1
2
3
4
5
[Desktop]
comment = my share dir
path = /home/Desktop
browseable = yes
writable = yes

linux命令

使用git工具。模拟windos下的linux开发环境。常用的操作有scp操作将文件拷贝到开发版中。要求是开发板有ssh协议。

1、vscode阅读源码 ubuntu

插件
1、c/c++
2、gnu global
3、gtags
需要https://ftp.gnu.org/pub/gnu/global/或者wget https://ftp.gnu.org/pub/gnu/global/global-6.6.6.tar.gz

1
2
3
4
5
[hezz@ubu global-6.6 16:46]$ ./configure
[hezz@ubu global-6.6 16:46]$ sudo make install
[hezz@ubu global-6.6 16:46]$ make


然后global –version查看版本
gnu global扩展配置中
Auto Update配置为“Disable”
这是因为我们的工程文件太大,一般的文件大于50MB就要禁用此项功能。
completion配置为“Disable”
是为了启用VSCode自带的代码自动补全功能,因为不禁用global自动补全功能的话,有些变量输入时无法进行自动补全。
详细百度安装配置。

2、其他扩展插件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1)、C/C++,这个肯定是必须的。
2)、C/C++ Snippets,即 C/C++重用代码块。
3)、C/C++ Advanced Lint,即 C/C++静态检测 。
4)、Code Runner,即代码运行。
5)、Include AutoComplete,即自动头文件包含。
6)、Rainbow Brackets,彩虹花括号,有助于阅读代码。
7)、One Dark Pro,VSCode 的主题。
8)、GBKtoUTF8,将 GBK 转换为 UTF8。
9)、ARM,即支持 ARM 汇编语法高亮显示。
10)、Chinese(Simplified),即中文环境。
11)、vscode-icons,VSCode 图标插件,主要是资源管理器下各个文件夹的图标。
12)、compareit,比较插件,可以用于比较两个文件的差异。
13)、DeviceTree,设备树语法插件。
14)、TabNine,一款 AI 自动补全插件,强烈推荐,谁用谁知道。
15)、ssh扩展。
16)、var-translate 中英文翻译
17)、comment translate 翻译
18}、vim插件

腾讯翻译api
SecretId SecretKey
AKIDmkimx48AHao5S0UnxhaWOE2mZSI5z1BZ NYbZTJ4rbCsWzJSSTSNC8yxvqcGtXN5d

clangd插件

步骤:
1、下载clangd

1
sudo apt install clangd

2、利用bear生成compile_commands.json

1
bear -- make

这里的bear只用去执行编译文件就可以

3、使用vim开发

第一步
vim控制光标流畅运行
第二部

第三步
快捷键
h j

第四步
删除 复制 粘贴 撤销快捷键

za zR zM zo za zf zd zj zk zz zb zt zc

搜索 /字符串 n/N 上下移动

4、vim的控制命令–s –c –d –y

操作
初始文本

1
"hello world!"

将光标移动到双引号内,按cs"'

1
'hello world!'

接着将光标放入其中,按cs'<q>

1
<q>hello world!</q>

移除它,cst"

1
hello world!

光标移动到 hello上,按ysiw]

1
[hello] world!

将整行外加括号同时括号内再加一个空格 yss(

1
( [hello] world! )

删除括号 ds[ds)

1
hello world!

a命令包括,i命令内部

1
2
3
ca{

ci{

4、cmake添加-g编译选项

有时候我们需要用gdb调试程序,需要为程序添加“-g”编译选项,那么cmake构建的项目该如何添加“-g”编译选项呢?此处收集了两种方式;

第一种

修改CMakelist.txt, 添加“add_definitions(“-Wall -g”)”行;

第二种

执行cmake时,添加-DCMAKE_BUILD_TYPE=Debug编译选项。

cmake -DCMAKE_BUILD_TYPE=Debug ……

建议使用第二种,可以不用改变CMakelist.txt。

cmake编译生成的makefile如何打印详细信息呢?在执行make 时添加“VERBOSE=1”,如果想加速编译速度,可以添加 -j 10 选项,后面的数字的最大值为本机的处理器核数。

5、file命令

file命令可以查看文件的格式,属于什么架构等等信息

6、服务器安装gitlab

  • 第一步 安装依赖
    打开终端,运行如下命令:
    1
    2
    3
    4
    5
    6
    sudo apt update

    sudo apt-get upgrade

    sudo apt-get install curl openssh-server ca-certificates postfix

接下来会遇到如下界面,Tab切换到“确定”按钮,然后回车。


照样Tab切换到“确定”按钮,然后回车。

*第二步 安装Gitlab

先执行命令

1
curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash


前往Gitlab官网:https://packages.gitlab.com/gitlab/gitlab-ce,找到最新版本的gitlab-ce安装包,注意版本是ubuntu/focal。


通过wget方式在线安装gitlab,复制wsgt下载命令。

安装命令:

1
wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ce/packages/ubuntu/focal/gitlab-ce_16.2.1-ce.0_amd64.deb/download.deb

然后再解压:sudo dpkg -i gitlab-ce_16.2.1-ce.0_amd64.deb
运行完sudo dpkg后如果出现下面的界面就表示gitlab安装成功。

  • 最后一步 配置gitlab
    运行sudo vim /etc/gitlab/gitlab.rb来查看当前gitlab网页ip和端口号。
    如果运行上述命令出现权限问题,运行下列命令即可:
    1
    chmod -R 755 /var/log/gitlab
    然后再运行
    1
    sudo vim /etc/gitlab/gitlab.rb
    进入gitlab的配置文件修改界面,输入i进入编辑模式,然后找到external_url字段(在第32行),改成自己需要设置的IP和端口号,IP我设置为本机的ipv4地址。

修改完毕以后按esc键退出编辑模式,然后输入:wq保存即可。接下来通过下列命令重启服务。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 停止gitlab服务 
sudo gitlab-ctl stop ​

# 启动gitlab服务
sudo gitlab-ctl reconfigure ​

# 重启所有gitlab组件
sudo gitlab-ctl restart ​

# 启动所有gitlab组件
sudo gitlab-ctl start

# 启用开机自启动
sudo systemctl enable gitlab-runsvdir.service

初始化管理员账户密码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#切换路径
cd /opt/gitlab/bin/ ​

#打开控制台
sudo gitlab-rails console -e production ​

#查询用户账号信息并赋值给u
u=User.where(id:1).first​

#设置root的密码
u.password='wxy123456'

#确认密码
u.password_confirmation='wxy123456'

#保存信息(注意有个感叹号)
u.save!

#退出
exit

在账户搜索阶段,搜索root可能会出错,如果出错看下面解决办法

  • 对于账户来说
    1.进入控制台:
    1
    2
    3
    [root@hostname ~]# gitlab-rails console production          
    或者:
    [root@hostname ~]# gitlab-rails console
    2.定位到需要修改的用户
    方法一:

通过用户名查找(推荐):

1
irb(main):001:0> user=User.where(username:'root').first

另一种写法(只能定位到普通用户,很容易出错造成找不到用户,返回 => nil,没有此用户的结果):

1
irb(main):002:0> User.where(name:'doudou').first

方法二:

通过id查找(一般修改root使用,因为root id=1):

1
2
3
irb(main):003:0> user=User.where(id:1).first

=> #<User id:1 @root>

方法三:

通过邮箱查找:

1
2
3
4
5
6
irb(main):004:0> user=User.find_by(email:'123@qq.com')

=> #<User id:92 @doudou>
```shell
3.重置密码:
一般数字密码就不用加引号:

irb(main):005:0>user.password=12345678

=> 12345678
有字符的密码一定要有引号(等号两边有空格):

irb(main):006:0>user.password = ‘root@123’

=> “root@123”

1
2
3
4
4.确认新密码(可以省略):      
```shell
irb(main):007:0>user.password_confirmation = 'root@123'
=> “root@123”

5.保存新密码:

1
2
3
4
irb(main):022:0>user.save!

Enqueued ActionMailer::DeliveryJob (Job ID: 04e11d87-7fc0-47a5-a792-aff11918335d) to Sidekiq(mailers) with arguments: “DeviseMailer”, “password_change”, “deliver_now”, #<GlobalID:0x00007fe595b63078 @uri=#<URI::GID gid://gitlab/User/10>>
=> true

最后是true就保存可以了!!!

1
irb(main):023:0>exit

扩展:
用脚本实现非交互式重置密码:
1.脚本需要使用到expect和spawn,yum安装一些包:

1
2
[root@hostname~]# yum install -y tcl tclx tcl-devel expect              
[root@gmc-repository test]# vim gitlab.sh

7、安装runner

打开gitlab pages功能

1
sudo vim /etc/gitlab/gitlab.rb
1
2
3
4
# Pages 服务地址
pages_external_url "http://git.liuweigl.cn"
# 启用 pages
gitlab_pages['enable'] = true

重新配置完重启

1
sudo gitlab-ctl reconfigure

安装runner

1
2
3
4
5
6
# For Debian/Ubuntu/Mint
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
sudo apt-get install gitlab-runner
apt-cache madison gitlab-runner
sudo apt-get install gitlab-runner
sudo gitlab-runner run #启动Runner

这部分在gitlab新建流水线的时候出现的token复制,按照上面提示的步骤

1
2
3
4
5
sudo gitlab-runner register  
# 接下来会要求填入url和token:项目-设置-CI/CD-Runner展开复制url和token粘贴过来
# 执行器选择shell
sudo gitlab-runner start
# 此时gitlab-runner就配置完成了,代码库中有push就会触发持续集成

配置文件选择在gitlab的流水线上下,不单独去写配置运行文件

8、运行脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
cache:
paths:
- node_modules/

before_script:
- hexo clean

pages:
script:
- hexo generate
artifacts:
paths:
- public
only:
- main

9、gitlab-runner一直处于pending状态原因分析

项目触发runner,一直处于pending
初步怀疑是runner卡住了,也有可能是因为服务器资源不足,在服务器上执行gitlab-ci-multi-runner list发现runer还在,
在执行gitlab-ci-multi-runner verify,发现runer还活着,但是就是一直不执行流程
有两个方法解决:
1、执行gitlab-ci-multi-runner run(不推荐使用)
他会去执行runner任务,但是每次都需要运行次命令才回去执行任务
2、执行gitlab-ci-multi-runner restart
重启runner,发现他会自动去执行触发runner的任务

10、vscode屏蔽不需要的文件

点击设置齿轮,点击设置,又上角json。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
"search.exclude": { //搜索 true 屏蔽 false 不屏蔽
"**/node_modules": true,
"**/*.o": true,
"**/*.so": true,
"**/bower_components": true, //默认配置
"/arch/avr32" : true, //被禁止搜寻的文件/文件夹
},
"files.exclude": { //文件显示 true 屏蔽 false 不屏蔽
"**/.git": true,
"**/.svn": true,
"**/.hg": true,
"**/*.o": true,
"**/*.so": true,
"**/CVS": true,
"**/.DS_Store": true, //默认配置
"arch/avr32" : true, //被禁止看见的文件/文件夹
}
}

下面为跳转相关--很重要

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**" //包含的头件
],
"defines": [],
"compilerPath": "/home/ygc/Desktop/linux-gcc/atk-dlrv1126-toolchain-arm-buildroot-linux-gnueabihf-x86/bin/arm-linux-gnueabihf-c++", //编译器地址
"cStandard": "c17",
"cppStandard": "gnu++14",
"intelliSenseMode": "linux-gcc-x64"
}
],
"version": 4
}

11、使用cpolar进行网络穿透

账号862450734@qq.com
密码qq862450734
在ubuntu上安装cpolar就行
登录网址 172.0.0.1:9200

gitlab
账号 root
密码 qq862450734
虚拟机地址:9999

git工具

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
git init   // 初始化一个仓库
git clone <url> //从地址克隆一个项目
git pull //命令尽量少用


git log -a //查看所有的log
git branch -a //查看所有的分支,包括远程分支
git branch test //test为分支名字
git git branch --set-upstream-to=main/分支 本地分支 //远程仓库分支和本地分支合并

git checkout test //切换分支test

git remote -v //查看远程仓库地址
git remote add 名称 url 添加远程仓库
git remote rm name //删除远程仓库
git remote rename old_name new_name //修改仓库名
git remote set-url --delete //删除地址
git remote set-head origin -a 将 origin/HEAD 指向 远程仓库的 默认分支(-a 即 --auto)
git remote set-head origin dev 将 origin/HEAD 指向 (origin/dev)
git remote set-head origin -d 删除 origin/HEAD



git merge name name1 //合并分支
git stash //添加到储藏区
git stash pop //储藏区的内容恢复到当前区

新建分支后
git branch -u //进行远程分支关联
git push 远程仓库 -d 远程分支 //删除远程分支
git push //会直接推远程分支

一般上传出问题,缺少关联,解决办法

1
2
3
4
5
git remote rm 关联

git remote add 关联

git remote set-head origin -a 自动关联

远程版本先于本地版本,切换远程分支,查看更新log,然后拉远程代码和本地合并,解决完冲突在上传

13、gdb调试

1
2
3
4
5
6
7
8
9
10
11
gdb ./a.out  //调试文件
r //运行
b main //打断点
n //单步执行
p i //打印变量i的值
p &i //打印变量i的地址
p *p //打印指针的值
q //退出
gdb ./a.out core //调试core文件
target remote localhost:1234 //连接调试
gdbserver multi //启动gdbserver

调试core,有的代码出现段错误后没有生成core文件,需要修改配置文件,执行ulimit -c unlimited

调试进程

1
2
gdb -p 1234
1234为进程号

调试线程

1
2
3
4
info threads //查看线程
thread id //切换线程
set scheduler-locking off|on //关闭线程|开启线程
thread apply id comand //对id线程执行command

gdb设置日志

1
2
3
set logging file /tmp/gdb.log
set logging on
set logging off

gdb设置shell

1
shell cmd