linux应用知识合集
1 | ps -ef | grep 进程关键字 |
下面是录制视频的命令,我们通常用ffmpeg命令行来做剪辑。
ffmpeg
常用的是转换格式和,剪辑拼接两三个功能。
1 | 转换格式:ffmpeg -i 文件 -c copy 输出文件(带后缀) |
在vscode中
1 | 多行注释:先按ctrl + k,再按ctrl + c |
截取一段视频:
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 | docker run -td --name ubuntu(容器名字自己起) -p 81:80 --rm ubuntu(镜像) |
查看说明
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 | cat /etc/passwd | grep /bin/bash | wc -l |
linux base64解密
1 | echo "" | base64 -d |
html注释
1 | <!-- flag is in c:\flag.txt --> |
zip命令压缩和解压文件
1 | zip name.zip name.txt |
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 | os.environ.get()是python中os模块获取环境变量的一个方法 |
什么是环境变量,环境变量是程序和操作系统之间的通信方式。有些字符不宜明文写进代码里,比如数据库密码,个人账户密码,如果写进自己本机的环境变量里,程序用的时候通过os.environ.get()取出来就行了。这样开发人员本机测试的时候用的是自己本机的一套密码,生产环境部署的时候,用的是公司的公共账号和密码,这样就能增加安全性。os.environ是一个字典,是环境变量的字典。”PALM_JS_ADDRESS”是这个字典里的一个键,如果有这个键,返回对应的值,如果没有,则返回none
printf foo|base64
linux查看cpu,内存信息
1 | cat /proc/meminfo |
十六进制读取文件
1 | xxd file |
查询的命令
1 | which ..... |
搜索
1 | vim中输入/然后输入搜索的内容,按n进行下一条。 |
管道
1 | cat -n hello.txt | grep "hello"显示hello在第几行 |
find
1 | find /home -name hello*所有文件名为hello的 |
查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名
1 | find .|xargs grep -ri "IBM" -l |
vim
1 | :s/well/good#替换第一个well为good(正好是substitute) |
再来看高级的
1 | :n,$s/well/good替换从第n行开始到最后一行中每一行第一个well为good |
再来一点
1 | :%s#well/#good/# 当前行第一个well/为good/ |
1 | 可以通过shift + g找到最后一行行首,然后按$到行尾。 |
apache2启动命令
1 | sudo /etc/init.d/apache2 start |
ssh服务器启动
1 | 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中。
如图所示
这是$PATH里面的内容,我们可以再添加其他目录进去,这样其他目录里面的文件也可以直接执行。
可以采用临时添加:
1 | export PATH=$PATH:/home/book...等等,这样比较方便因为关闭终端即删除了。 |
或者修改.bashrc文件,当然在mac里面可以修改.zshrc文件。
然后source ~/.bashrc即可应用。
或者是修改/etc/environment
文件权限
如图,前面那些字母很有意思。第一个字符处横线表示常规文件,紧接着好多文件都是rwx代表文件所有者权限,注意大部分文件所有者这里都是我们的账户spencerzhang,下面三位表示同组其他用户对此文件的权限!,最后三位代表其他用户对文件的权限。
所以我们修改权限的时候
1 | chmod 765 hello,这三个数字就分别为所有者的权限rwx,同组其他人权限rw和其他人rx |
1 | chmod -R 777 目录 可以递归目录中的子目录,全部执行此文件权限。 |
上图是更详细的一些指令比如
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 | tar -cvf test.tar test#创建一个.tar的压缩文件。 |
下面是解压
1 | tar -xzf test.tar.gz |
虚拟机网卡
虚拟机的nat网卡是接在windows的vmnet8中。
嵌入式串口连接
现搜索所有存在的串口
1 | ls /dev/tty.* |
然后把板子上电,即可接收到串口信息。
然后为板子分配ip
如果只在本次开机生效很简单
1 | ifconfig eth0 192.168.5.9即可 |
我们在文件中设置,使其永久生效
1 | vi /etc/network/interfaces |
然后加入
1 | auto lo |
保存并退出后执行
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共享权限
见本篇。于是我们知道应该在/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 |
然后再次执行挂载命令,挂载成功!
两个目录现在是一样的了
接下来将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 | du -sh #查看当前目录总大小 |
conda常用命令
1 | conda-env list查看当前所有不同python环境 |
用户创建
1 | sudo useradd user |
mysql安装初始化
1 | We've installed your MySQL database without a root password. To secure it run: |
初始话的时候root不需要密码登陆,但是我们可以设置root密码登陆,我们可以尝试重制权限比如
1 | mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY ''; |
从这里可以设置密码。
由于我的环境是mac,所以启动mysql命令为
1 | brew services restart 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 | !/bin/bash |
之后我们要添加可执行权限
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
命令中,数字2
和3
是指多用户模式(Runlevel 2-5),通常是Linux系统的默认运行级别。通过将启动脚本添加到这些运行级别中,系统在正常启动时将自动运行该脚本。
这里我还不是很懂,其实不加也可以。以后再解决。
elasticsearch详细
1 | vim /etc/default/elasticsearch |
ssh使用配置文件config登陆
我们可以编辑一个config配置文件
1 | cd ~/.ssh |
然后我们可以写一个服务器的登陆配置
1 | Host kali |
上面是一个最普通的登陆,如果我们要登陆到一个靶场,但是靶场并不对外开放,在一个内网之内,我们需要通过内网的对外开放主机,连接到内网中的靶机,也就是找一个中继连接。
下面配置靶机的参数
1 | Host ivy |
可以看到,最后一行变成了Proxy也就是说明我们要通过lichen连接到里面的靶机,也就是说lichen就是这个网域中对外开放的主机。
连接靶机用以下命令
1 | ssh ivy即可 |
如果想要连接到靶机所在的网段(注意,不只是连接一个机器了,是连接到网段),可以用以下命令
1 | sshuttle -r lichen 10.176.132.84/8 |
获取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 | cat googlecloud.pub >> authorized_keys |
即可。
nohup的使用
1 | nohup ipfs daemon > ipfs.log & |
可以一直运行。
kali默认软件库的位置
我们安装软件的时候,安装结一般不显示位置,但是一般自动安装在
1 | /usr/share/doc/ |
比如
1 | /usr/share/doc/python3-urllib3 |
linux设置PATH环境变量
我们要先export找到现有环境变量
1 | export |
所以我们添加的时候要在之前的基础上添加,为
1 | vim ~/.bashrc#这个文件取决于你虚拟机的环境变量文件 |
即可!
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 | deb http://apt.v2raya.mzz.pub/v2raya main等语句中均添加lunar变成 |
即可。
ubuntu server配置代理
我们进入apt文件夹
1 | cd /etc/apt/ |
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 | export JAVA_HOME=/usr/local/jdk-11 |
然后执行环境变量即可。
1 | source /etc/profile |
linux写service或者systemctl服务
首先在
1 | /etc/systemd/system/文件夹中创建文件比如fls.service |
然后写入服务比如
1 | [Unit] |
写完之后重新加载systemd守护进程
1 | systemctl daemon-reload |
然后便可以用两种方法运行
1 | systemctl start fls.service |
安装密码学Crypto库
1 | pip install pycryptodome |
安装完之后进入安装路径,找到crypto文件夹,改为Crypto即可。
以后在python中使用即可
1 | import Crypto |
ubuntu配置无线网络
进入
1 | /etc/netplan/目录 |
看到目录下应该有yaml配置文件。加入配置即可
1 | network: |
然后连接网络
1 | sudo netplan try检查是否有语法错误 |
没有问题按回车确认。
1 | sudo netplan generate # 生成 renderers 所需的配置文件 |
如果仍未连接至网络,可以手动重启NetworkManager或者服务器
1 | sudo systemctl restart NetworkManager.service |
树莓派采用ubuntu server系统提前配置网络
这是当我们将ubuntu-server树莓派系统烧录进sd卡之后,再插入读卡器时,发现只显示名字叫system-boot的U盘,这便是启动盘,我们把sd卡插入树莓派开机启动时会先读取这个盘的内容,所以打开network-config
配置如下
1 | This file contains a netplan-compatible configuration which cloud-init will |
就是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系统中,用户密码通常存储在两个不同的文件中:
/etc/passwd
文件包含有关系统用户的基本信息,但不包括密码。/etc/shadow
文件包含加密的用户密码以及其他与密码相关的信息,如密码过期日期等。
为了提高安全性,实际密码通常不直接存储在/etc/passwd
文件中,而是存储在/etc/shadow
文件中,后者只能由系统管理员读取。unshadow
命令可以将这两个文件的信息合并,生成一个包含用户名和密码的新文件,这对于一些密码破解工具和安全分析非常有用。
1 | unshadow /etc/passwd /etc/shadow > pass.txt |
然后再用john破解即可!
1 | john --show 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 | wget 网站 -O 文件名。#即可下载文件保存为此文件名 |
ftp安装
1 | sudo apt-get install vsftpd |
然后查看服务状态
1 | service vsftpd status |
检查端口是否打开
1 | netstat -tnl |
看到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请求包含了要访问的目的地址。
然后如图所示写代理出入端口即可。
然后安装tor
1 | sudo apt install tor |
查看服务状态
1 | sudo service tor status |
然后我们启动v2ray客户端,这个需要去v2ray官网下载客户端,或者github上,下载之后进入目录运行./v2ray run即可按照默认config文件运行。
运行如图所示
所以我们只需要把客户端配置的config.json自己提前编辑好复制过来即可。
这样便开启了代理,这样走完我们的代理之后还会通过tor的三层代理,非常安全。
我们接下来运行proxychains来走我们v2ray的代理,因为proxychains可以在命令行使用,而在命令行中一般情况下不走代理,所以我们在命令行运行软件时,在运行命令之前加上proxychains就可以让这个软件的一切流量经过v2ray代理。
比如运行浏览器
即可用浏览器访问google
然后访问
1 | https://dnsleaktest.com/ |
可以看到我们的代理是否成功。
可以用
1 | proxychains bash |
创建一个有代理的新终端,这样就不用每次都在命令前面加上proxychains了。
initframs开机情况
如果开机错误,出现
需要我们修复磁盘,也就是如图所示的The root filesystem on /dev/sda2需要修复,然后下面出现要填y的地方全是y直到再出现initframs,填exit退出即可正常开机。
frp内网穿透配置
首先在github上下载服务端与客户端的文件包,分别放到服务端(一般是云服务器)和客户端(比如嵌入式设备)分别是frps和frpc
服务端打开文件夹并且修改配置文件
1 | # frps.toml |
这里也就是client会连接到我们server的7000端口。
然后服务端启动服务
1 | ./frps -c ./frps.toml |
下面配置客户端文件frpc.toml
1 | # frpc.toml |
这里端口有点乱,详细解释一下,也就是我们建立连接后,在云服务器上用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 | [Unit] |
Type
: 服务的类型,simple
表示简单的启动方式。ExecStart
: 要执行的二进制文件的路径。Restart
: 定义服务在失败时的重新启动策略。WantedBy
: 指定服务被启动的目标。
服务类型还有很多,不过simple是适合绝大多数的。
设置成开机自启即
1 | systemctl enable your_service_name |
然后就是常用的重启停止启动命令了。
nginx特殊情况配置
如下面所示,我想要配置一个内网访问的环境,让某些页面只能让内网访问,如下配置。
1 | server { |
这样拒绝了外部所有请求。