1
2
3
4
5
6
7
8
ps -ef | grep 进程关键字
lsof -i:port. 可以查看端口被占用情况
file `which php`辨识php的类型,也就是架构等。
kill -QUIT 进程号(要杀主进程)
brew services restart php启动php服务,也就是php-fpm等等
docker-compose up -d启动容器
composer(一个下载器,就像wget)
nginx -s stop停止nginx服务

下面是录制视频的命令,我们通常用ffmpeg命令行来做剪辑。

ffmpeg

常用的是转换格式和,剪辑拼接两三个功能。

1
2
3
4
5
转换格式:ffmpeg -i 文件 -c copy 输出文件(带后缀)
拼接:先将要拼接的视频路径写入txt,格式如下
file '路径1'
file '路径2'
然后ffmpeg -f concat -safe 0 -i 1.txt -c copy output.mp4即可!

在vscode中

1
2
多行注释:先按ctrl + k,再按ctrl + c
取消多行注释:先按ctrl + k,再按ctrl + u

截取一段视频:

1
ffmpeg -i input.mp4 -ss 0:00 -t 60 output.mp4

也就是从0:00开始截取60s。

打开控制面板ctrl + shift + p

iptables防火墙的一些命令

1
iptables -I INPUT 5 -p tcp --dport 82 -j ACCEPT#放开82端口

netstat命令

1
netstat -aptn查看所有监听端口

docker运行命令

1
2
3
4
5
docker run -td --name ubuntu(容器名字自己起) -p 81:80 --rm ubuntu(镜像)
进入docker终端:docker exec -it dvwa /bin/bash

或者带上映射目录版本
docker run -it -v /home/ljs/lets_OCR:/lets_ocr registry.cn-hangzhou.aliyuncs.com/lijunshi2018/lets_ocr:v1

查看说明

1
可以用-h,--help或者man [要查看的东西]

find使用

1
find ./ -name "java_error_in_phpstorm*" | xargs rm -rf#后面的xargs把前面的输出结果作为后面的输入

管道符的用法如下:

1
bash命令 | 管道命令

以上用法中提到的“管道命令”,是指该命令必须能够接收标准输出,这样的命令才是管道命令,例如grep,less,head,tail等命令。以下列出部分管道命令的分类。

\1. 选取命令:cut,grep

\2. 排序命令:sort,wc,uniq

\3. 双向重定向:tee

\4. 字符转换命令:tr,col,join,paste,expand

\5. 切割命令:split

\6. 参数代换命令:xargs

1
2
cat /etc/passwd | grep /bin/bash | wc -l
#双重管道,先把/etc/passwd里面含/bin/bash的内容提出来,然后传到最右边统计行数

linux base64解密

1
echo "" | base64 -d

html注释

1
<!-- flag is in c:\flag.txt -->

zip命令压缩和解压文件

1
2
3
zip name.zip name.txt
zip -r html.zip /home/html#表示把此目录下所有文件和递归目录全部压缩生成压缩文件
unzip -d /指定目录 被解压的文件

windows终端清屏用cls,查看文件内容用type。

如果没有ifconfig命令,安装

1
apt install net-tools

如果没有ps命令,安装

1
apt install procps

linux下每个进程会在/proc创建文件

1
ps -ef查看进程号

然后查看进程所在文件

1
ls -l /proc/进程号

查看id时,只有id等于0的用户才有最高权限。

1
wget 网站 -O 文件名。#即可下载文件保存为此文件名

hexdump使用

1
hexdump -C 文件#即可查看16进制字节码

python获取环境变量和linux添加环境变量

1
2
3
4
5
6
7
8
9
10
os.environ.get()是python中os模块获取环境变量的一个方法
import os

JS_ADDRESS = os.environ.get("PALM_JS_ADDRESS")
print(os.environ.get("PALM_JS_ADDRESS"))

//linux添加环境变量
echo 'export API_KEY=YOUR_API_KEY' >> ~/.zshrc
//如果添加一个elf文件,则
echo 'export PATH="/bin/.../:$PATH"'>> ~/.zshrc

什么是环境变量,环境变量是程序和操作系统之间的通信方式。有些字符不宜明文写进代码里,比如数据库密码,个人账户密码,如果写进自己本机的环境变量里,程序用的时候通过os.environ.get()取出来就行了。这样开发人员本机测试的时候用的是自己本机的一套密码,生产环境部署的时候,用的是公司的公共账号和密码,这样就能增加安全性。os.environ是一个字典,是环境变量的字典。”PALM_JS_ADDRESS”是这个字典里的一个键,如果有这个键,返回对应的值,如果没有,则返回none

printf foo|base64

linux查看cpu,内存信息

1
2
cat /proc/meminfo
cat /proc/cpuinfo

十六进制读取文件

1
xxd file

查询的命令

1
2
3
which .....
type .....两者相似。
alias ga='git add'#起个别的名字。

搜索

1
2
3
4
vim中输入/然后输入搜索的内容,按n进行下一条。
撤销按u
vim -b mytest.php查看二进制文件
shift + up查看上一页

管道

1
2
cat -n hello.txt | grep "hello"显示hello在第几行
grep "abc" * -nwr星号表示在所有文件中查找这里n表示显示第几行,w表示整个的查找,r表示递归查找abc

find

1
2
3
find /home -name hello*所有文件名为hello的
find / -name h?m*文件名第二个为任意字符,后面的是任意字符。
find / -size +10000000k

查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名

1
  find .|xargs grep -ri "IBM" -l  

vim

1
2
3
4
5
6
:s/well/good#替换第一个well为good(正好是substitute)
:s/well/good/g替换所有well为good

练习:
:s/well/good
:s/well/good/g

再来看高级的

1
2
:n,$s/well/good替换从第n行开始到最后一行中每一行第一个well为good
:n,$s/well/good/g从第n行开始到最后一行每一行所有well为good

再来一点

1
2
3
4
5
6
7
:%s#well/#good/#   当前行第一个well/为good/
:%s#/usr/bin#/bin#g文件中所有路径/usr/bin替换成/bin

区别:这里有文件路径符号的替换,所以加了一些识别符号#等
:%s#well/#good/#
:%s#/usr/bin#/bin#g、
也就是说当/符号也被替换时,就要用#来作分隔了。
1
2
3
4
5
6
7
可以通过shift + g找到最后一行行首,然后按$到行尾。
按0直接到当前行首。
快速到某行行首:行号+shift+g 或者 /+行号+enter
快速删除一行用dd。
ggvG可以全选所有内容ggyG复制所有内容,
全部删除dG
回到文档首部gg

apache2启动命令

1
2
sudo /etc/init.d/apache2 start
sudo /etc/init.d/apache2 restart/stop/status等等

ssh服务器启动

1
2
sudo /etc/init.d/ssh start
其余也同上

gcc命令

1
gcc -o outputfilename 源文件

我们还可以添加其他参数

1
gcc -o outputfilename sourcefilename.c -lpthread

-lpthread: 这是一个链接选项,用于告诉编译器将 POSIX 线程库(pthread)链接到可执行文件中。POSIX线程库提供了多线程支持,允许在程序中创建和管理多个线程。在这个例子中, -lpthread 选项确保编译的可执行文件能够使用多线程功能。

环境变量

1
env 显示环境变量

你在shell中输入的命令,shell回去$PATH中寻找,所以我们要保证把命令程序加入到$PATH中。

如图所示

image-20220920183703759

这是$PATH里面的内容,我们可以再添加其他目录进去,这样其他目录里面的文件也可以直接执行。

可以采用临时添加:

1
export PATH=$PATH:/home/book...等等,这样比较方便因为关闭终端即删除了。

或者修改.bashrc文件,当然在mac里面可以修改.zshrc文件。

然后source ~/.bashrc即可应用。

或者是修改/etc/environment

文件权限

image-20220920184635124

如图,前面那些字母很有意思。第一个字符处横线表示常规文件,紧接着好多文件都是rwx代表文件所有者权限,注意大部分文件所有者这里都是我们的账户spencerzhang,下面三位表示同组其他用户对此文件的权限!,最后三位代表其他用户对文件的权限。

所以我们修改权限的时候

1
chmod 765 hello,这三个数字就分别为所有者的权限rwx,同组其他人权限rw和其他人rx
1
2
chmod -R 777 目录   可以递归目录中的子目录,全部执行此文件权限。
chmod -x hello表示去掉hello的x权限。

image-20220920185435428

上图是更详细的一些指令比如

1
chmod u-x hello

即更加详细和确定,比较方便,直接确定到了文件拥有者。

l

1
ls -l可以查看所有者和组
1
使用chown可以改变文件所有者。(同理加-R表示递归)
1
sudo chown root:root hello 

这样就可以将文件提升为超级用户:超级用户组,当然我们提升超级用户肯定要加sudo

dd文件操作,tar压缩解压缩

先用dd命令创建一个文件

1
/dev/zero,是一个输入设备,可用它来初始化文件。该设备无穷尽地提供0,可以使用任何需要的数目——设备提供的要多的多。他可以用于向设备或文件写入字符串0。
1
dd if=/dev/zero of=best bs=1024 count=1024后面两个参数表示一次读取1024kB,一共1024次,总共也就是1M
1
2
3
tar -cvf test.tar test#创建一个.tar的压缩文件。
tar -czf test.tar.gz test#这里c表示创建文件,z表示用gzip压缩文件,f表示跟随文件。
tar -cjf test.tar.bz2 test#这里j表示bz2压缩,另一种压缩算法

下面是解压

1
2
3
tar -xzf test.tar.gz
tar -xjf test.tar.bz2#前面c对应的是x,也就是解压
tar -xjf test.tar.bz2 -C表示解压到某个目录

虚拟机网卡

虚拟机的nat网卡是接在windows的vmnet8中。

嵌入式串口连接

现搜索所有存在的串口

1
2
3
ls /dev/tty.*
#然后连接
screen 设备名 115200

然后把板子上电,即可接收到串口信息。

然后为板子分配ip

如果只在本次开机生效很简单

1
ifconfig eth0 192.168.5.9即可

我们在文件中设置,使其永久生效

1
vi /etc/network/interfaces

然后加入

1
2
3
4
5
6
7
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.0.200
netmask 255.255.255.0
gateway 192.168.0.1

保存并退出后执行

1
/etc/init.d/S40network restart

重启网络服务然后ifconfig查看是否获得ip

然后主机,ubuntu,和开发版互ping即可,如果通,即可上网。

嵌入式开发版挂载ubuntu系统目录,用nfs协议。

首先开权限

/etc/exports规定了哪些目录可以给别人挂载

启动nfs服务

把ubuntu某个目录挂在到本地某个目录

挂载前要先安装

1
sudo apt-get install nfs-common -y

然后安装nfs服务,如何检查自己系统是否安装nfs,使用以下命令

1
cat /etc/exports如果没有文件,那么就是没安装nfs

于是安装nfs服务器

1
sudo apt-get install nfs-kernel-server

我们使用挂载命令

1
sudo mount -t nfs -o nolock,nfsvers=3 10.211.55.10:/home/parallels/ /mnt

可以尝试先挂载自己ip下的目录

发现本目录并非共享目录,于是我们查找如何开启目录nfs共享权限

https://blog.csdn.net/pengwupeng2008/article/details/8547332?ops_request_misc=&request_id=&biz_id=102&utm_term=/etc/exports%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-8547332.142^v51^control_1,201^v3^add_ask&spm=1018.2226.3001.4187

见本篇。于是我们知道应该在/etc/exports中这样增加一行

1
/home/parallels/ *(sync,ro,root_squash,no_delay,rw,no_hide,no_subtree_check,async,insecure)

然后重启nsfserver服务

1
sudo /etc/init.d/nfs-kernel-server restart

然后再次执行挂载命令,挂载成功!

image-20220929183938896

两个目录现在是一样的了

image-20220929184326660

接下来将ubuntu的目录挂载到开发版下即可!

当然这一切还是基于ubuntu安装了nfs服务器!

如果nfs出现卡死情况。

先查看目录 mount -l 列出挂载的目录

强制卸载目录 umount -f -l 挂载的目录

1
cat /etc/*release可以查看系统信息

Debian9.4.0 ssh无法使用root用户进行登录1.解决方法vim /etc/ssh/sshd_config 2.找到#PermitRootLogin prohibit-password在后面添加一行PermitRootLogin yes 然后记得设置root密码

1
passwd root为root用户设置密码

linux文件大小查看(高级)

我们平时只能用ls查看当前目录下所有文件以及目录的大小,并且我们当前目录下的文件夹的大小一般只显示4k,也就是只显示目录信息所占的空间,并不能显示子文件和子目录的大小,所以我们采用新方法查看

1
2
du -sh #查看当前目录总大小
dh -h filename查看当前目录下filename文件以及其子目录分别所占大小

conda常用命令

1
2
3
4
conda-env list查看当前所有不同python环境
conda activate 某一个环境 #激活某一个环境
pip list 查看当前python环境下的软件包
conda install python=3.9可以直接改变当前python版本,如果当前是3.10,想要降级,可以这样做。

用户创建

1
2
3
4
5
6
7
8
9
sudo useradd user
sudo passwd user
然后对/usr/local/elasticsearch进行修改用户
chown -R es:es elasticsearch
前面的es表示将elasticsearch权限给es用户,后面的es表示将用户es移动到group es
为什么是这个文件,因为我们把tar.gz解压到了/usr/local,过程如下
tar -zxvf ..... -C /usr/local即可
usermod -s /bin/bash user#可以给用户添加登陆权限
sysctl -w vm.max_map_count=262144修改最大容量

mysql安装初始化

1
2
3
4
5
6
7
8
9
10
11
12
We've installed your MySQL database without a root password. To secure it run:
mysql_secure_installation

MySQL is configured to only allow connections from localhost by default

To connect run:
mysql -u root

To restart mysql after an upgrade:
brew services restart mysql
Or, if you don't want/need a background service you can just run:
/opt/homebrew/opt/mysql/bin/mysqld_safe --datadir=/opt/homebrew/var/mysql

初始话的时候root不需要密码登陆,但是我们可以设置root密码登陆,我们可以尝试重制权限比如

1
2
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '';
mysql> FLUSH PRIVILEGES;

从这里可以设置密码。

由于我的环境是mac,所以启动mysql命令为

1
2
3
brew services restart mysql
brew services info mysql
brew services stop mysql

在普通linux环境中启动nginx,mysql等服务的命令为

1
sudo systemctl status nginx等

利用let’s encrypt安装ssl证书

首先安装命令行应用以应用let’s encrypt。我们安装snap,snap是和apt一样的东西,也是用来安装的。

1
sudo snap install core; sudo snap refresh core

或者也可以尝试

1
sudo apt install certbot

或者

1
sudo snap install --classic certbot

下面开始准备工作

1
sudo ln -s /snap/bin/certbot /usr/bin/certbot

然后获取ssl证书,然后根据输出,利用证书部署到nginx对应网站即可,暂时不详细解释。

1
sudo certbot certonly --nginx

到期自动续

1
sudo certbot renew --dry-run

当然证书会被默认安装在/etc/

rocketchat搭建

1
sudo snap install rocketchat-server

然后

1
sudo service snap.rocketchat-server.rocketchat-server status

再配置nginx即可!

linux开机自启shell

我们首先写一个示例shell

1
2
3
#!/bin/bash
echo "Script is executing on startup.."
/usr/bin/python3 /path/to/server.py

之后我们要添加可执行权限

1
sudo chmod +x /etc/init.d/start_up.sh

之后我们需要用以下命令将脚本添加到启动脚本列表当中

1
update-rc.d start_up.sh defaults

在Linux系统中,启动脚本位于/etc/init.d目录中。这些脚本负责启动或停止系统服务或应用程序,并在系统启动或关闭时自动运行。update-rc.d命令是用于管理这些脚本的主要工具之一。

使用update-rc.d命令,您可以添加或删除脚本,并确定它们在系统启动时的启动顺序。例如,以下命令将一个名为my_service的启动脚本添加到启动脚本列表中,并在运行级别2和3中启用它:

1
sudo update-rc.d my_service defaults 2 3

在Linux系统中,运行级别(Runlevel)是指系统的一种工作状态,其定义了在该状态下需要运行的服务和进程。不同的运行级别指定了不同的服务和进程集合,例如单用户模式(Runlevel 1)、多用户模式(Runlevel 2-5)和关机模式(Runlevel 0和6)等。

update-rc.d命令中,数字23是指多用户模式(Runlevel 2-5),通常是Linux系统的默认运行级别。通过将启动脚本添加到这些运行级别中,系统在正常启动时将自动运行该脚本。

这里我还不是很懂,其实不加也可以。以后再解决。

elasticsearch详细

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
32
vim /etc/default/elasticsearch
# Elasticsearch Java path
#ES_JAVA_HOME=

# Elasticsearch configuration directory
#ES_PATH_CONF=/etc/elasticsearch

./elasticsearch-keystore create
./elasticsearch-setup-passwords interactive

启动之后
✅ Elasticsearch security features have been automatically configured!
✅ Authentication is enabled and cluster connections are encrypted.

ℹ️ Password for the elastic user (reset with `bin/elasticsearch-reset-password -u elastic`):
GydWhzxn7_DSKcyibo6r

ℹ️ HTTP CA certificate SHA-256 fingerprint:
7a754432b17957ae2e3752aa8207974689f1595a78b97518d1651cf36f0a3443

ℹ️ Configure Kibana to use this cluster:
• Run Kibana and click the configuration link in the terminal when Kibana starts.
• Copy the following enrollment token and paste it into Kibana in your browser (valid for the next 30 minutes):
eyJ2ZXIiOiI4LjYuMiIsImFkciI6WyIxNzIuMTcuMC4yOjkyMDAiXSwiZmdyIjoiN2E3NTQ0MzJiMTc5NTdhZTJlMzc1MmFhODIwNzk3NDY4OWYxNTk1YTc4Yjk3NTE4ZDE2NTFjZjM2ZjBhMzQ0MyIsImtleSI6IkJUYVB0SWNCLVNiQ0JzOEN3dGJIOjZUNTlRN1FfU2xhenlvbExSclc3LWcifQ==

ℹ️ Configure other nodes to join this cluster:
• On this node:
⁃ Create an enrollment token with `bin/elasticsearch-create-enrollment-token -s node`.
⁃ Uncomment the transport.host setting at the end of config/elasticsearch.yml.
⁃ Restart Elasticsearch.
• On other nodes:
⁃ Start Elasticsearch with `bin/elasticsearch --enrollment-token <token>`, using the enrollment token that you generated.

ssh使用配置文件config登陆

我们可以编辑一个config配置文件

1
2
cd ~/.ssh
vim config#新建了一个配置文件

然后我们可以写一个服务器的登陆配置

1
2
3
4
5
6
Host kali
User spencer
Hostname 192.168.3.52
ForwardX11 yes
Compression yes
IdentifyFile ~/.ssh/id_rsa#设置登录私钥

上面是一个最普通的登陆,如果我们要登陆到一个靶场,但是靶场并不对外开放,在一个内网之内,我们需要通过内网的对外开放主机,连接到内网中的靶机,也就是找一个中继连接。

下面配置靶机的参数

1
2
3
4
5
6
Host ivy
User s4645075
HostName 10.176.132.84
ForwardX11 yes
Compression yes
ProxyJump lichen

可以看到,最后一行变成了Proxy也就是说明我们要通过lichen连接到里面的靶机,也就是说lichen就是这个网域中对外开放的主机。

连接靶机用以下命令

1
ssh ivy即可

如果想要连接到靶机所在的网段(注意,不只是连接一个机器了,是连接到网段),可以用以下命令

1
2
sshuttle -r lichen 10.176.132.84/8
#这里也就是把lichen作为中转站,所以我们可以先在config文件中配置lichen的参数。

获取uuid

在linux系统中,获取uuid可以用

1
cat /proc/sys/kernel/random/uuid

或者用网站https://www.uuidgenerator.net/

ssh密钥创建

在客户端创建公私密钥。

1
ssh-keygen -t rsa -f ~/.ssh/googlecloud -C zxm -b 2048#一路回车。

将公钥上传到服务器,并且在服务器端

1
2
3
cat googlecloud.pub >> authorized_keys
chmod 600 authorized_keys
chmod 700 ~/.ssh

即可。

nohup的使用

1
nohup ipfs daemon > ipfs.log &

可以一直运行。

kali默认软件库的位置

我们安装软件的时候,安装结一般不显示位置,但是一般自动安装在

1
/usr/share/doc/

比如

1
2
/usr/share/doc/python3-urllib3
/usr/share/doc/python3-impacket

linux设置PATH环境变量

我们要先export找到现有环境变量

1
2
export
PATH=/usr/local/bin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

所以我们添加的时候要在之前的基础上添加,为

1
2
vim ~/.bashrc#这个文件取决于你虚拟机的环境变量文件
export PATH="/usr/bin:$PATH"

即可!

macos刷新dns

1
sudo killall -HUP mDNSResponder

ssh将远程服务端口转发到本地端口

比如我们想要运行jupyter notebook在远程服务器上。

1
ssh myserver -L 8888:localhost:8888

也就是将远程8888端口的服务转发到本地8888端口查看。

apt-get update无法成功

因为我们要查看系统版本并且做修改

1
lsb_release -sc

得到系统版本,我的是lunar。然后我们打开ubuntu apt-get源文件

1
vim /etc/apt/sources.list.d/abc.list

然后在其语句

1
2
deb http://apt.v2raya.mzz.pub/v2raya main等语句中均添加lunar变成
deb http://apt.v2raya.mzz.pub/v2raya lunar main

即可。

ubuntu server配置代理

我们进入apt文件夹

1
2
3
4
5
6
7
8
9
cd /etc/apt/
vim apt.conf
添加这句话
Acquire::http::Proxy "http://192.168.1.106:10809/";这里换成自己的代理的ip地址和端口号。
然后还可以在.bashrc环境变量文件中添加代理,使得系统命令wget等都走代理。
在~/.bashrc文件中添加
export http_proxy=http://127.0.0.1:1087
或者添加socks代理
export all_proxy=socks5://127.0.0.1:1080

windows取消自动关机

在运行中输入

1
shutdown -a

linux安装java方法

我们知道想要安装不同多种版本的java有时候很麻烦!

这里默认在ubuntu20.04上安装OpenJDK 11

1
wget https://download.java.net/openjdk/jdk11/ri/openjdk-11+28_linux-x64_bin.tar.gz

然后先解压

1
tar zxvf openjdk-11+28_linux-x64_bin.tar.gz

然后放到我们的通用目录下

1
sudo mv jdk-11* /usr/local/

主要是环境变量的设置,通过改变环境变量,让我们能够同时安装多版本java!

1
sudo vim /etc/profile.d/jdk.sh

在此文件中写

1
2
export JAVA_HOME=/usr/local/jdk-11
export PATH=$PATH:$JAVA_HOME/bin

然后执行环境变量即可。

1
2
3
4
source /etc/profile
java -version

which java可查看该版本安装位置!

linux写service或者systemctl服务

首先在

1
/etc/systemd/system/文件夹中创建文件比如fls.service

然后写入服务比如

1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=JetBrains FLS
Requires=network.target
After=network.target
[Service]
Type=forking
ExecStart=<fls-home>/bin/license-server.sh start
ExecStop=<fls-home>/bin/license-server.sh stop
ExecReload=<fls-home>/bin/license-server.sh restart
PIDFile=<fls-home>/logs/launcher.pid
[Install]
WantedBy=default.target

写完之后重新加载systemd守护进程

1
2
systemctl daemon-reload
systemctl enable fls.service

然后便可以用两种方法运行

1
2
3
systemctl start fls.service
或者
service fls start

安装密码学Crypto库

1
2
pip install pycryptodome
pip install Crypto

安装完之后进入安装路径,找到crypto文件夹,改为Crypto即可。

以后在python中使用即可

1
import Crypto

ubuntu配置无线网络

进入

1
/etc/netplan/目录

看到目录下应该有yaml配置文件。加入配置即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
network:
version: 2
renderer: NetworkManager

ethernets:
eth0:
dhcp4: true
optional: true

wifis:
wlan0:
dhcp4: true
access-points:
"wifi_name1":
password: "mypassword"
"666":
password: "66666666"

然后连接网络

1
sudo netplan try检查是否有语法错误

没有问题按回车确认。

1
2
sudo netplan generate  # 生成 renderers 所需的配置文件
sudo netplan apply # 应用 netplan 新配置,将自动重启 network-manager 使修改生效

如果仍未连接至网络,可以手动重启NetworkManager或者服务器

1
2
sudo systemctl restart NetworkManager.service
sudo reboot

树莓派采用ubuntu server系统提前配置网络

system-boot/network-config

这是当我们将ubuntu-server树莓派系统烧录进sd卡之后,再插入读卡器时,发现只显示名字叫system-boot的U盘,这便是启动盘,我们把sd卡插入树莓派开机启动时会先读取这个盘的内容,所以打开network-config

配置如下

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
32
33
34
35
36
37
# This file contains a netplan-compatible configuration which cloud-init will
# apply on first-boot (note: it will *not* update the config after the first
# boot). Please refer to the cloud-init documentation and the netplan reference
# for full details:
#
# https://netplan.io/reference
# https://cloudinit.readthedocs.io/en/latest/topics/network-config.html
# https://cloudinit.readthedocs.io/en/latest/topics/network-config-format-v2.html
# ...

# Some additional examples are commented out below

network:
version: 2

ethernets:
eth0:
dhcp4: true
optional: true

# wifis:
# wlan0:
# dhcp4: true
# optional: true
# access-points:
# myhomewifi:
# password: "S3kr1t"
# myworkwifi:
# password: "correct battery horse staple"
# workssid:
# auth:
# key-management: eap
# method: peap
# identity: "[email protected]"
# password: "passw0rd"
# ca-certificate: /etc/my_ca.pem

就是netplan的语法格式!

然后他就会自动连接到无线网络,我们便可以直接ssh连接。

python起一个http服务

有时为了方便我们浏览器访问一些本地文件,可以用python快速起一个http服务

1
python -m http.server 80

google查询语句

1
allintitle: Everything C:\Windows

linux查看文件编码方式

1
file -i 文件名

可以查看编码方式。

1
vim -c 'e ++enc=uft-8' snort.log

即可打开。

二进制格式文件查看

1
u2spewfoo 文件名

unshadow

unshadow命令是一个用于将Linux/Unix密码文件和阴影文件合并成一个文件的命令。在Linux和Unix系统中,用户密码通常存储在两个不同的文件中:

  1. /etc/passwd文件包含有关系统用户的基本信息,但不包括密码。
  2. /etc/shadow文件包含加密的用户密码以及其他与密码相关的信息,如密码过期日期等。

为了提高安全性,实际密码通常不直接存储在/etc/passwd文件中,而是存储在/etc/shadow文件中,后者只能由系统管理员读取。unshadow命令可以将这两个文件的信息合并,生成一个包含用户名和密码的新文件,这对于一些密码破解工具和安全分析非常有用。

1
unshadow /etc/passwd /etc/shadow > pass.txt

然后再用john破解即可!

1
2
john --show passfile显示破解的密码并且存到文件里
john passfile只显示结果不保存,

linux用rsync作同步文件夹的功能

客户端使用rsync将本地文件同步到服务端,非常适合同步到云服务器。

1
rsync -a source/ destination

其中source是源目录,而后面的/表示只传递目录下的内容到目的目录下,而不是在目的目录下再创建一个子目录和源目录同名。

或者用rsync -r也可以,这里的-r, -a都表示递归,但是-a可以传递除了文件,还有文件修改时间等等,更加全面。

比如我们想传到远程服务器,由于他使用的就是SSH协议,所以我们可以这样用

1
rsync -a source/ [email protected]:destination....(写自己想要传输的目的目录)

并且rsync支持增量备份,也就是每次检查源目录和目的目录,只更新不同的部分。

wget使用方法(下载一个网站目录所有文件以及递归文件)

1
2
3
wget 网站 -O 文件名。#即可下载文件保存为此文件名
#递归爬取所有文件为
wget -r -np -k -p 网站目录(带斜杠)

ftp安装

1
sudo apt-get install vsftpd

然后查看服务状态

1
service vsftpd status

检查端口是否打开

1
netstat -tnl 

image-20231212014121069

看到21端口打开。

用代理链和tor隐藏自己(来源b站)

我们可以查找提供免费代理服务的机器(一般tor的服务器就来源于此)通过网站

https://www.freeproxylists.net

首先安装proxychains4

直接

1
sudo apt install proxychains4

安装好之后编辑配置文件

1
/etc/proxychains4.conf#这是默认文件位置,不同机器可能有所不同。

可以通过

1
locate proxychains查找含有该字样文件的位置。

配置文件中含有多种代理模式,比如dynamic chain就是三个代理服务器如果有一个不响应那么就跳过。但是strict chain就是严格的三个服务器。所以我们使用后者。不过因为我们还要使用tor所以这里使用哪种配置并不重要,直接默认配置即可。

确保proxy_dns不被注释,因为我们要隐藏我们的dns请求,因为dns请求包含了要访问的目的地址。

然后如图所示写代理出入端口即可。

image-20231212015307824

然后安装tor

1
sudo apt install tor

查看服务状态

1
sudo service tor status

image-20231212015421389

然后我们启动v2ray客户端,这个需要去v2ray官网下载客户端,或者github上,下载之后进入目录运行./v2ray run即可按照默认config文件运行。

image-20231212015717699

运行如图所示

image-20231212020000477

所以我们只需要把客户端配置的config.json自己提前编辑好复制过来即可。

这样便开启了代理,这样走完我们的代理之后还会通过tor的三层代理,非常安全。

我们接下来运行proxychains来走我们v2ray的代理,因为proxychains可以在命令行使用,而在命令行中一般情况下不走代理,所以我们在命令行运行软件时,在运行命令之前加上proxychains就可以让这个软件的一切流量经过v2ray代理。

比如运行浏览器

image-20231212020307382

即可用浏览器访问google

然后访问

1
https://dnsleaktest.com/

可以看到我们的代理是否成功。

image-20231212020624990

可以用

1
proxychains bash

创建一个有代理的新终端,这样就不用每次都在命令前面加上proxychains了。

initframs开机情况

如果开机错误,出现

image-20231212161438398

需要我们修复磁盘,也就是如图所示的The root filesystem on /dev/sda2需要修复,然后下面出现要填y的地方全是y直到再出现initframs,填exit退出即可正常开机。

frp内网穿透配置

首先在github上下载服务端与客户端的文件包,分别放到服务端(一般是云服务器)和客户端(比如嵌入式设备)分别是frps和frpc

服务端打开文件夹并且修改配置文件

1
2
# frps.toml
bindPort = 7000

这里也就是client会连接到我们server的7000端口。

然后服务端启动服务

1
./frps -c ./frps.toml

下面配置客户端文件frpc.toml

1
2
3
4
5
6
7
8
9
10
# frpc.toml
serverAddr = "x.x.x.x"#服务端公网ip
serverPort = 7000#连接到其7000端口

[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000#将本地22端口也就是用于ssh的端口发送到目标的6000端口

这里端口有点乱,详细解释一下,也就是我们建立连接后,在云服务器上用ssh连接6000端口,就相当于连接客户端的22端口了,数据会通过7000端口进行发送。

客户端连接命令

1
./frpc -c ./frpc.toml

运行ssh命令(在服务端)

1
ssh -oPort=6000 [email protected]

把一个可执行程序设置为一个服务

/etc/systemd/system/目录下创建一个以 .service 结尾的文件,比如 your_service_name.service。然后用vim编辑。

1
2
3
4
5
6
7
8
9
10
11
[Unit]
Description=Your Service Description
After=network.target

[Service]
Type=simple
ExecStart=/path/to/your/binary/executable -params
Restart=always

[Install]
WantedBy=multi-user.target
  • Type: 服务的类型,simple 表示简单的启动方式。
  • ExecStart: 要执行的二进制文件的路径。
  • Restart: 定义服务在失败时的重新启动策略。
  • WantedBy: 指定服务被启动的目标。

服务类型还有很多,不过simple是适合绝大多数的。

设置成开机自启即

1
systemctl enable your_service_name

然后就是常用的重启停止启动命令了。

nginx特殊情况配置

如下面所示,我想要配置一个内网访问的环境,让某些页面只能让内网访问,如下配置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
server {
listen 12345;
listen [::]:12345;
server_name 10.8.0.1;
charset utf-8;
allow 10.8.0.0/24; # 允许内部网络的IP范围
deny all; # 拒绝所有其他请求
location / {
root /home/ubuntu;
index index.html;
}
location /file {
autoindex on;
autoindex_exact_size off;#显示具体大小
autoindex_localtime on;
alias /home/ubuntu/Ming;
}
}

这样拒绝了外部所有请求。