文章目录
万能命令
遇到不懂的命令:man 命令语句
常用命令
生成文件夹:mkdir test
当前目录生成test文件夹;mkdir -p d/e/f
生成递归目录
复制拷贝:cp
文件名 路径 cp hello.csv ./python/ml
把当前目录的hello.csv拷贝到当前目的python文件夹里的ml文件夹里。
剪切移动:mv
文件名 路径。mv hello.csv ./python
把当前目录的hello.csv剪切到当前目的python文件夹里
删除文件夹: rm -rf code
将会删除code目录以及其下所有文件、文件夹。(注意一定要加 -r,不然很麻烦)
删除文件: rm -f 001.cpp
查看文件在哪儿: whereis 文件
权限设置:sudo chmod 777 文件名
# 顺序rwx
查找搜索:find ;grep 正则表达式 [grep选项]
# [grep选项]: -r 对目录下递归查询所有子目录; -n 显示它在文件中的相对行号; -i 比较字符时忽略大小写的区别
find path -option [-print] [-exec -ok command] {} \ # eg. sudo find ~ -name "t*" -print
# grep 'test' d* # 显示所有以d开头的文件中,包含test的行
# ls -l | grep '^a' # 只显示以a开头的行
终端操作快捷键
Ctrl+Alt+T 打开终端
Tab 自动补全
Ctrl+a 光标移动到开始位置
Ctrl+e 光标移动到最末尾
Ctrl+k 删除此处至末尾的所有内容
Ctrl+u 删除此处至开始的所有内容
Ctrl+d 关闭终端
Ctrl+c 终止进程/命令
Shift+上或下 终端上下滚动
Shift+PgUp/PgDn 终端上下翻页滚动
控制台切换
不同控制台间切换
Ctrl + ALT + ← Ctrl + ALT + →
指定控制台切换
Ctrl + ALT + Fn(n:1~7)
控制台下滚屏
SHIFT + pageUp/pageDown
控制台抓图
#setterm -dump n(n:1~7)
文件/文件夹管理
ls 列出当前目录文件(不包括隐含文件)
cd … 回当前目录的上一级目录
cd - 回上一次所在的目录
cd ~ 或 cd 回当前用户的宿主目录
mkdir 目录名:创建一个目录
rmdir 空目录名: 删除一个空目录
rm -rf 非空目录名: 删除一个非空目录下的一切
rm 文件名 文件名:删除一个文件或多个文件
mv 路经/文件 /路经/文件:移动相对路经下的文件到绝对路经下
mv 文件名 新名称:在当前目录下改名
find 路经 -name “字符串” :查找路经所在范围内满足字符串匹配的文件和目录
查看文件内容
cat file1
从第一个字节开始正向查看文件的内容vi file
打开并浏览文件
文本内容处理
grep str /tmp/test
在文件 ‘/tmp/test’ 中查找 “str”vi file
编辑文件gedit 文件名
打开该文件
Vi / VIM
-
vi file
编辑文件
i 进入编辑文本模式; iIaAoO都是输入模式;rR取代模式。
Esc 退出编辑文本模式;
:w 保存当前修改;
:q 不保存退出vi;
:wq 保存当前修改并退出vi
w filename: 另存为新文件;n1,n2,w filename:将n1,n2的内容储存成filename文档。
r filename:在编辑的数据中,读入另一个档案的数据,加入游标所在行的后面。
!command:例如!ls /home:即可在vi中查看/home底下以ls输出的档案信息。 -
代码中批量添加注释
批量注释: ctrl + v 进入块选择模式,然后移动光标选中你要注释的行,再按大写的I 进入行首插入模式,输入注释符号// 或#,然后连按两下esc; 10,20s/^/#/g 或者 10,20s#^#//#g
取消注释:选中注释符号,按dd,ESC保存退出;10,20s#^//##g 或者 10,20s/#//g
- 删除 d
x: 向后删除一个字符
X:向前删除一个字符
nx(n为数字):连续向后删除n个字符
dd:删除一整行
ndd(n为数字):删除向下n行
d1G:删除光标所在到第一行的所有数据
dG:删除光标所在到最后一行的所有数据
d$:删除游标所在处,到:该行的最后一个字符
d0:删除游标所在处,到:该行的最前面一个字符
- 复制 y
yy:复制游标所在的那一行
nyy:复制光标所在向下n行
其他同理
- 粘贴 p
p:将已复制的数据在光标下一行贴上
P: 贴在游标上一行
- 其他操作
u:复原前一个动作
ctrl + r:重复上一个动作
- 搜索
/aword:向光标之下,搜索名称为aword的字符串
?aword:向光标之上,搜索名称为aword的字符串
n: 重复前一个操作
N:【反向】重复前一个操作
- 替换
n1,n2s/word1/word2/g:n1,n2为数字,代表行数,寻找word1并取代为word2;
1,$s/word1/word2/g
或% s / w o r d 1 / w o r d 2 / g : 从 第 一 行 到 最 后 一 行 , 寻 找 w o r d 1 并 取 代 为 w o r d 2 ; ‘ 1 , s/word1/word2/g:从第一行到最后一行,寻找word1并取代为word2; `1, s/word1/word2/g:从第一行到最后一行,寻找word1并取代为word2;‘1,s/word1/word2/gc`或%$s/word1/word2/gc:从第一行到最后一行,寻找word1并取代为word2,并逐个确认是否替换。
打包/解压
tar [-cxtzjvfpPN] 文件 目录/文件
-c 创建包
–x 解开包
-v 显示命令过程
–z 代表压缩包gzip
-N 比后面接的日期(yyyy/mm/dd)还要新的,才会打包进新建的文件中
–exclude FILE 压缩的过程中,不要将FILE打包
tar –cvf benet.tar /home/benet 把/home/benet目录打包
tar –zcvf benet.tar.gz /mnt 把目录打包并压缩
tar –zxvf benet.tar.gz 压缩包的文件解压恢复
tar –jxvf benet.tar.bz2 解压缩
共享文件夹/和windows sftp连接
windows代码自动更新到Linux远端,通过:sftp
虚拟机和宿主机,通过:共享文件夹
apt命令命令
apt-cache search package 搜索包
apt-cache show package 获取包的相关信息,如说明、大小、版本等
sudo apt-get install package 安装包
sudo apt-get install package - - reinstall 重新安装包
sudo apt-get -f install 修复安装”-f = –fix-missing”
sudo apt-get update 更新源
sudo apt-get upgrade 更新已安装的包
sudo apt-get remove package 删除包
sudo apt-get remove package - - purge 删除包,包括删除配置文件等
sudo apt-get clean && sudo apt-get autoclean 清理无用的包
sudo apt-get clean 清理所有软件缓存(即缓存在/var/cache/apt/archives目录里的deb包)
系统管理的命令
chown chown root /home: 把/home的属主改成root用户
cat /etc/issue :查看ubuntu版本
sudo ethtool eth0 :查看网卡状态
cat /proc/cpuinfo 查看cpu信息
sudo fdisk -l 查看磁盘信息
df -h 查看硬盘剩余空间
free -m 查看当前的内存使用情况
ps -A 查看当前有哪些进程
kill 进程号(就是ps -A中的第一列的数字)或者 killall 进程名( 杀死一个进程)
kill -9 进程号 强制杀死一个进程
reboot Init 6 重启LINUX系统
Halt Init 0 Shutdown –h now 关闭LINUX系统
配置默认Java使用哪个
#sudo update-alternatives –config java
~表示当前用户目录。如:用户root登录则目录为/root ,用户jack登录则为/home/jack
/表示根目录。如:root下为 /,jack下也是/
只有root用户的命令提示符是#,其他用户的命令提示符都为$
PATH环境变量
ehco $PATH
查看当前环境变量export PATH=$PATH:/home/ubuntu
临时设置环境变量,当前会话有效~/.bashrc
在文件最末添加命令设置环境变量,然后重启shell,永久有效。设置环境变量仍是用命令export PATH=$PATH:/home/ubuntu
Linux Shell 编程 echo
安装sudo apt install dos2unix
# convert file to Unix format
然后再执行命令 dos2unix ./2-variable.sh
#!/bin/bash
echo -e "hello,world\n"
命令行执行 ./hello.sh
更改文件权限 chmod +x ./hello.sh
单行注释: #
多行注释: :<<EOF 多行 EOF
变量定义 $var
变量的定义和使用:
# 变量的定义和使用,定义时不加空格
my_name=qiyue
echo "1. $my_name"
# 另一种定义方式,建议使用
course="linux start"
echo 2. ${course}
# 只读变量
readonly course
course ="liunx kernel" # 因为是只读,所以不能再赋值
echo "3. ${course}"
# 删除变量
unset my_name
echo "4. ${my_name}"
环境变量,即全局变量:
env
显示所有的全局变量,例如查找自定义的环境变量 env | grep MY_NAME
export
导出 eg. export MY_NAME='guixue
source and .
引用
特殊变量:
基本运算
expr 求值操作
# 加法 expr
a=11
b=5
val=`expr $a + $b`
echo "$a + $b = $val"
# 另一种数值运算 $[var]
val=$[a-b]
echo "$a - $b = $val“
关系运算
-eq 相等
-ne 不相等
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于
布尔与逻辑运算,逻辑运算用[[ ]] 两个方括号
!= 非运算 [!false]
-o 或运算
-a 与运算
&& 逻辑与
|| 逻辑或
== 相等(数字)
!= 不等(数字)
文件测试运算
-d 是否为目录
-f 是否为普通文件
-r, -w, -x 是否可读
-w, -x 可写,可执行
-s 文件是否为空
-e 文件是否存在
举例:
file=$0
echo "文件是:$file"
if [ -f $file ]
then
echo "为普通文件";
fi
字符串
单引号:原样输出,变量无效
双引号:可以包含变量,推荐用双引号
${#str} :字符串长度
s
t
r
:
1
:
3
:
字
符
串
从
第
一
个
字
符
开
始
,
截
取
3
个
查
找
子
串
:
m
a
t
c
h
e
d
=
‘
e
x
p
r
i
n
d
e
x
"
{str:1:3} :字符串从第一个字符开始,截取3个 查找子串:matched = `expr index "
str:1:3:字符串从第一个字符开始,截取3个查找子串:matched=‘exprindex"str" wo`
字符串运算符
= 字符串是否相等
!= 字符串是否不相等
-z 字符串长度是否0
-n 字符串长度是否不为0
$ 字符串是否为空,例如 [ $a ]
数组
设置/读取
读取数组所有元素 @,例如 arr[@]
定义,例如 arr=(aa bb cc “hello world”)
分支
if then elif then else fi
case esac
status=1
case $status in
0) echo "todo"
;;
1) echo "doing"
;;
2) echo "done"
;;
esac
循环
- for in do done
- while do done
- util do done
- break 跳出循环
函数
function myfunc()
{
echo "这是shell函数"
}
函数传参和返回值:
function add()
{
local ret=$(($1+$2))
return $ret
}
add 5 8
常用命令(有待丰富,重要)
printf
date
cut 截取 下标从1开始, echo guiue|cut -c2-3
根据date获取random
# 产生一个2位的随机数
answer=$(date +%s%N | cut -c16-17)
文本处理三剑客:
grep 查找
sed 编辑
awk 报告
ping 探测本地网络
Linux Curl 命令
curl是一个非常实用的、用来与服务器之间传输数据的工具;curl设计为无用户交互下完成工作。经常需要用到curl命令在线上机器中去测试接口,尤其是一些内外网接口、判断线上接口信息等,需要用到curl命令直接测试页面或接口返回值。
curl命令语法:curl [options] [URL...]
常用的curl命令参数及作用:
-
curl url
获取页面内容或接口响应 -
curl -I url
获取请求页面或接口的请求头信息,不含响应内容 -
curl -i url
获取请求页面或接口的请求头信息和响应内容 -
curl -d "params" url
使用-d发送带参数的请求(默认是post方式提交)
示例:curl -d “cb=cb_1540200657317&cid=afbe8fd3d73448c9&interfaceCode=b5018a28d5f8609f&pid=92b01a8207f5c404” https://act.vip.iqiyi.com/api/process.action -
-X/--request
指定什么命令 -
curl -X POST --header "Content-Type:application/json" --data ‘{}’ url
使用post模拟json格式请求接口
举例:
curl -X POST --header "Content-Type:application/json" --data "{{\"backTime\":\"2019-03-28 00:00:00\",\"name\":\"Amy\"}" 127.0.0.1:8088/user/getAllUserInfo
POST 指定请求方式
–header 指定请求头部信息
–data 指定json请求体数据内容
命令中的常用参数:
--data-urlencode DATA
HTTP POST data url encoded (H)
其他curl命令:
-
curl -H Head_infos url
自定义Header头信息
示例:curl -H “User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36” -H “Referer:http://www.iqiyi.com” http://vip.iqiyi.com -
curl -L url
跟踪链接url重定向,有些页面或接口被重定向,直接使用curl url会返回 -
curl -O url
下载指定资源文件到当前目录中
其他:
-
\
curl命令转义符号 -
curl -h
help,获取curl命令及其用法描述
Linux开发
配置c/c++编译环境 sudo apt install build-essential
,查看哪些包被build-essential依赖用命令 apt depends biuld-essential
gcc用法 编译 生成 .out 文件
make & Makefile 编译链接
make是一个命令工具,是一个解释Makefile中指令的命令工具。
make 编译
make install 安装编译好的源码包
Makefile的规则:
<target>:<prereuisites>
[tab]<commands>(任意的shell命令)
Makefile使用Bash语法
模式匹配 通配符%:
“%.o:%.c" 简写为”.c.o"目标
调用变量时需要放在 $()中,例如 echo $(var)
调用shell变量,需要在美元符号前,再加一个美元符号,否则被转义 echo $$HOME
gdb : the GNU Project Debugger
开始调试之前,必须用程序中的调试信息编译要调试的程序。
Linux 网络服务
enp0s3:en代表以太网卡,p0s3代表PCI接口的物理位置为(0,3),其中横坐标代表bus,纵坐标代表slot。
sudo apt install net-tools
ifconfig
可查看enp0s3,有IP地址,mac地址(ether)等
ping命令
- ping localhost : 侦测网卡安装或配置有问题 127.0.0.1 本机有问题
- ping 网关: 侦测局域网中的网关或路由器是否正常,
ip route show
可查看网关 - ping dns server : dns解析是否可解析
more /etc/resolv.conf
查看dns配置 - ping 远程地址 : 与外部的连接是否正常
mtr 网络侦测工具 例如 mtr baidu.com
traceroute 访问对端主机走的所有路径 sudo apt install traceroute
命令 traceroute www.baidu.com
ip命令
ip addr show
查看网卡信息
sudo ip link set enp0s3 up / down
启用/禁用网卡
为网卡分配地址 sudo ip addr add 192.168.0.50/255.255.255.0 dev enp0s3
, sudo ip addr del 192.168.0.10/24 dev enp0s3
查看路由 ip route
添加静态路由 sudo ip route add 172.16.32.32 via 192.168.0.150/24 dev enp0s3
删除路由 sudo ip route del 192.168.0.150/24
查看arp记录(mac地址)ip neigh
curl/wget (http客户端,开发测试常用)
curl:
安装 sudo apt install curl
使用 curl www.baidu.com
wget 使用 wget www.baidu.com
直接保存为index.html 查看 vi index.html
netstat 查看网络连接状态及相关信息
即告诉用户哪些网络连接正在运作。
列出所有端口 netstat -a
列出所有 tcp/udp netstat -at | -au
显示进程id和名称 netstat -p
(常用)
显示路由信息 netstat -r
显示左右监听连接 netstat -tnl
网络安全
ssh协议远程登录
windows需先安装ssh客户端。
window中的操作:
ssh 用户名@IP地址
linux中的命令
sudo apt-get install openssh-server
sudo ps -e | grep ssh
# 搜索当前进程里是否有ssh,有sshd,说明ssh服务已经启动sudo service ssh start
# 启动sudo gedit /etc/ssh/sshd_config
# ssh配置文件
ssh server安全配置:
- 修改默认端口号
sudo vim /etc/ssh/sshd_config
Port 2222 PubkeyAuthentication yes - 启动pub key
客户端配置 Pub key:(实现免密登录)
产生:ssh-keygen -t rsa
上传:ssh-copy-id -i <xxx.pub> user@server
配置:vim ~/.ssh/config
Host start
HostName <linux-vm-ip>
User guixue
PreferredAuthentications publickey
identityfile ~/.ssh/linux_start
Port 2222
Linux防火墙
安装 sudo apt install ufw
查看状态和配置 sudo ufw status
开启 sudo ufw enable
关闭 sudo ufw disable
常用配置
允许ssh:ufw allow ssh
预设全部阻挡 ufw default deny
允许来自192.168.1.2上所有连线 ufw allow from 192.168.1.2
允许来自192.168.2.*的所有22端口连线 ufw allow from 192.168.2.1/2 to any port 22
图形化防火墙 sudo apt install gufw
打开图形化防火墙 sudo gufw
安全自检命令 nmap sudo apt install nmap
nmap localhost
查看端口打开情况
网站制作四大件 LNMP:Linux+Nginx+MySQL+PHP
修改source.list为国内的源
sudo apt install nginx php7.2-cli php-fpm mysql-server mysql-client phpmyadmin wordpress
Nginx
Nginx:HTTP服务器,负载均衡
Nginx安装与启动:
安装 sudo apt install nginx
开启 sudo nginx &
重新加载配置 sudo nginx -s reload
停止 sudo nginx -s stop
测试nginx是否成功:打开浏览器,输入 localhost
或者 127.0.0.1
新增新站点:
新增sites配置 /etc/nginx/sites-enabled/test.conf
; code test.conf
新增站点目录 /var/www/test
新增站点首页 /var/www/test/index.html
; sudo touch index.html
;code index.html
然后输入 !+回车
显示基本html代码
测试:localhost:8088
# test.conf具体内容
server{
listen 8088;
server_name_;
root /var/www/test;
index index.html;
location / {
try_files $uri $uri/ =404;
}
# 测试php,nginx配置中加入
location ~ .php${
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
然后需要输入 sudo nginx -s reload
,再再浏览器中输入 127.0.0.1:8088
安装tree(树形展示目录结构): sudo apt install tree
code .
即打开当前目录(图形化的方式)
PHP
安装 sudo apt install php7.2-cli
验证安装结果 php -v
安装 php-fpm:
PHP-FPM是一个多进程的Fast CGI服务,很高效很稳定
安装 sudo apt install php-fpm
测试 sudo php-fpm7.2 -t
命令:
状态 sudo service php7.2-fpm status
启动/停止 sudo service php7.2-fpm start/stop
设置conf 端口 listen = 127.0.0.1:9000
sudo touch info.php
<?php
phpinfo();
?>
MySQL
MySQL server/client 安装 sudo apt-get install mysql-server mysql-client
测试安装是否成功 sudo netstat -tap | grep mysql
获取临时用户名和密码 sudo cat /etc/mysql/debian.cnf
; mysql -uUSERNAME -p
登录,设置密码
update mysql.user set authentication_string=password('123456')where user='root' and Host = 'localhost';
use mysql;
update user set plugin="mysql_native_password";
flush privileges;
// exit 后重新登陆即可
mysql 的管理工具:
CLI:mysql-client
Web:phpMyAdmin(常用)管理数据库
安装程序:Sequel Pro,Navicat
phpMyAdmin 浏览器管理数据库
安装 sudo apt install phpmyadmin
安装的目录 /usr/share/phpmyadmin
sudo vim /etc/hosts
设置 127.0.0.1 phpadmin.io
配置 phpMyAdmin
/etc/nginx/sites-enabled/phpadmin.conf
设置
server{
listen 80;
server_name phpadmin.io;
root /usr/share/phpadmin;
index index.php index.html;
location ~ .php${
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
在php中使用mysql:
MySQLi php使用mysql的驱动
<?php
$servername = "localhost";
$username = "root";
$password = "123456";
//创建连接
$conn = new mysqli($servername,$username,$password);
//检测连接
if ($conn->connect_error){
die("连接失败:".$conn->connect_error);
}
echo "连接成功";
?>
执行php php db.php
参考文章:
Linux curl命令详解
Ubuntu常用命令大全
孟宁老师github linux start
建议阅读:
《图解TCP/IP》
《图解HTTP》
互联网协议入门
网页制作三剑客,四剑客
nodejs,golang 写web server
html语言
http协议入门
PHP轻松入门教程
wsgi
网页