nc全名叫netcat,它可以用来完成很多的网络功能,譬如端口扫描、建立TCP/UDP连接,数据传输、网络调试等等,因此,它也常被称为网络工具的瑞士军刀。
一、资料
- nc localhost 80
- netstat -natp | grep 端口
- strace -ff -o ~/test.out php index.php
- zabbix
- 清除history记录:
history -c && exit
- Audit
- Netlink
- killproc
- Linux下创建进程的三种方式及特点
- 对不起,学会这些 Linux 知识后,我有点飘
- rm -rf删除文件不释放空间的解决办法
- centos7的日志系统:journald, rsyslog, logrotate
- 系统设计入门
- 小林 x 图解计算机基础
- 如何有效的阅读linux内核源码?
二、常用
- declare
- while
- shell中自增实现
1 | i=1 |
if分支结构
- 单if结构
1
2
3
4if condition
then
command
fi- if else结构
1
2
3
4
5
6if condition
then
command1
else
command2
fi- if else-if else结构
1
2
3
4
5
6
7
8
9
10
11
12
13
14if condition1
then
command1
elif condition2
then
command2
...
elif #可多个elif
...
else
commandN
ficase分支结构
- 语法
1 | case 值 in |
demo
1
2
3
4
5
6
7
8
9
10
11
12
13
14#!/bin/bash
echo 请输入数字
read num
case $num in
1)
echo "你输入了1"
;;
2)
echo "你输入了2"
;;
*)
echo "无法识别的数字$num"
;;
esac
chsh命令
- 查看系统支持的shell
chsh -l
或cat /etc/shells
- 查看当前使用的shell
echo $SHELL
- 修改默认shell
chsh -s /bin/zsh
- 需要重新登录才生效
- 查看系统支持的shell
BASH_SOURCE[0]
等价于BASH_SOURCE
,用于取得当前执行的shell文件所在的路径及文件名。dirname
去除文件名中的非目录部分,仅显示与目录有关的部分。
1 | TODO |
curl和wget的对比
- 共同点
- 不同点
- curl是libcurl这个库支持的,wget是一个纯粹的命令行命令
- curl支持更多的协议 ,Wget只支持 HTTP, HTTPS and FTP
- curl默认支持HTTP1.1(也支持1.0),而wget仅仅支持HTTP1.0规范
- curl在指定要下载的链接时能够支持URL的序列或集合,而wget则不能这样E.wget支持递归下载,而curl则没有这个功能
查看某个端口的服务
- sudo netstat -tunpl | grep 端口号
- lsof -i:端口号
清空文件内容的几种方式
1 | : > filename # 其中的 : 是一个占位符, 不产生任何输出. |
查看文件的几种方式
cat
:由第一行开始显示档案内容。tac
:从最后一行开始显示,和cat
刚好相反。more
:一页一页的显示档案内容。less
:与more
类似,比more
更好的是可以往前翻页。head
:只看头几行。tail
:只看尾巴几行。tail -f file
,实时输出内容- 在一个终端中执行
echo a >> 1.txt
- 在另一个终端执行
tail -f 1.txt
- 在一个终端中执行
nl
:输出内容同时输出行号,和cat -n
类似。od
:以二进制的方式读取档案内容。
查找包含指定字符串的文件
grep -rn "Hello" ./
- r表示递归
- n表示查询结果显示行号
find ./ -name "*.*" | xargs grep "Hello"
find . | xargs grep -ri "Hello"
或find . | xargs grep -ri "Hello" -l
- -l 表示只显示文件名
find / -type f -name "*.txt" | xargs grep "Hello"
rm -rf删除文件后不释放空间
- 测试小伙伴更新SVN一直不成功
- 登录服务器手动
svn up
,提示空间满了 - 查看空间使用情况
df -h
1
2
3
4Filesystem Size Used Avail Use% Mounted on
...
...
/dev/vda1 197G 41G 197G 100% /data- 查找大于800M的大文件
find . -type f -size +800M -print0 | xargs -0 ls -l | sort -nr
- 查看某个文件挂载目录
df path
- 删除某个大文件如300G
rm -rf somefile
df -h
发现空间并未释放lsof | grep deleted
查看删除文件的进程是否结束(如pid为9999)- 终止此进程
kill 9999
df -h
重新查看空间使用情况
查找大文件的几种方法
- 查找大于800M的文件
find . -type f -size +800M
- 查找大于800M的文件并显示文件相关信息
find . -type f -size +800M -print0 | xargs -0 ls -l
- 查找大于800M的文件并显示文件具体大小
find . -type f -size +800M -print0 | xargs -0 du -h
- 查找大于800M的文件并显示文件具体大小排序
find . -type f -size +800M -print0 | xargs -0 du -h | sort -nr
- 查找大于800M的文件
查找大目录的几种方法
- 查看目录相关信息
du -h --max-depth=1
- 查看最大的10个文件夹
du -hm --max-depth=2 | sort -nr | head -10
- 查看目录相关信息
Linux目录介绍
目录 | 说明 |
---|---|
/bin | 存放二进制可执行文件(ls,cat,mkdir等),常用命令一般都在这里 |
/etc | 存放系统管理和配置文件 |
/home | 存放所有用户文件的根目录,是用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示 |
/usr | 用于存放系统应用程序,比较重要的目录/usr/local 本地系统管理员软件安装目录(安装系统级的应用)。这是最庞大的目录,要用到的应用程序和文件几乎都在这个目录,具体如下: /usr/x11r6 存放x window的目录 /usr/bin 众多的应用程序 /usr/sbin 超级用户的一些管理程序 /usr/doc linux文档 /usr/include linux下开发和编译应用程序所需要的头文件 /usr/lib 常用的动态链接库和软件包的配置文件 /usr/man 帮助文档 /usr/src 源代码,linux内核的源代码就放在/usr/src/linux里 /usr/local/bin 本地增加的命令 /usr/local/lib 本地增加的库 /usr/locat/etc 目录里面是程序的配置文件 |
/opt | 额外安装的可选应用程序包所放置的位置。一般情况下,我们可以把tomcat等都安装到这里 |
/proc | 虚拟文件系统目录,是系统内存的映射。可直接访问这个目录来获取系统信息 |
/root | 超级用户(系统管理员)的主目录 |
/sbin | 存放二进制可执行文件,只有root才能访问。这里存放的是系统管理员使用的系统级别的管理命令和程序。如ifconfig等 |
/dev | 用于存放设备文件 |
/mnt | 系统管理员安装临时文件系统的安装点,系统提供这个目录是让用户临时挂载其他的文件系统 |
/boot | 存放用于系统引导时使用的各种文件 |
/lib | 存放跟文件系统中的程序运行所需要的共享库及内核模块。共享库又叫动态链接共享库,作用类似windows里的.dll文件,存放了根文件系统程序运行所需的共享文件 |
/tmp | 用于存放各种临时文件,是公用的临时文件存储点 |
/var | 用于存放运行时需要改变数据的文件,也是某些大文件的溢出区,比方说各种服务的日志文件(系统启动日志等。)等 |
/lost+found | 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)就在这里 |
注:
usr
指Unix System Resource
,而不是User
/usr/bin
目录下都是系统预装的可执行程序,会随着系统升级而改变/usr/local/bin
目录是给用户放置自己的可执行程序的地方(推荐放在这里),不会被系统升级而覆盖同名文件
- RPM使用:RPM,Red-Hat Package Manager(RPM软件包管理器)的缩写,是RPM软件包的管理工具。它原本是Red Hat Linux发行版专门用来管理Linux各项套件的程序,由于它遵循GPL规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM套件管理方式的出现,让Linux易于安装,升级,间接提升了Linux的适用度。
- 常用
rpm -qa
列出所有已安装软件包rpm -e packagename
删除软件包rpm -e --nodeps packagename
强制删除软件和依赖包rpm -q packagename
查询包是否安装rpm -ivh packagename
安装并显示安装进度rpm -Uvh packagename
升级软件包
通过RPM安装mysql
检测是否已安装mariadb
rpm -qa|grep mysql
删除已安装的mariadb
rpm -e packagename
从mysql官网下载bundle包
1
2
3rpm package:某个特定的包,比如server,client,shared lib等,可以单独安装
rpm bundle:该版本所有包的集合,是把服务器端要用的都安装上,其他的不带,尤其是开发包
Compressed TAR Archive:源码,必须用源码方式安装依次安装各个rpm(common/libs/libs/server),顺序错了会有提示
rpm -ivh packagename
查看临时密码
sudo grep 'temporary password' /var/log/mysqld.log
登入mysql
mysql -u root -p
回车 输入刚获取的密码修改密码
1
2
3
4
5
6
7
8
9
10
11
12
13
14#修改密码最小长度策略
set global validate_password_length=0;
#密码强度检查等级策略,0/LOW、1/MEDIUM、2/STRONG
set global validate_password_policy=0;
#修改密码
set password for 'root'@'localhost' = password('root123');
#开启mysql的root用户远程连接服务(%号即远程连接,IDENTIFIED BY后面跟的密码)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;
#刷新以生效
flush privileges;报错
Can‘t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock‘
,权限问题,修改sudo chown -R mysql用户组:mysql用户 /var/lib/mysql
- Linux文件类型
- Linux下7种文件类型,可通过
ls -l
或file filename
或stat filename
来查看
- Linux下7种文件类型,可通过
文件类型标识 | 文件类型 |
---|---|
- | 普通文件 |
d | 目录 |
l | 符号链接 |
s | 套接字(伪文件) |
b | 块设备(伪文件) |
c | 字符设备(伪文件) |
p | 管道(伪文件) |
伪文件不占用磁盘空间
ls-grep-wc使用
- 统计当前目录下文件的个数(不包括目录):
ls -l | grep "^-" | wc -l
argument list too long: ls
- 统计当前目录下文件的个数(包括子目录):
ls -lR | grep "^-" | wc -l
- 查看某目录下文件夹(目录)的个数(包括子目录):
ls -lR | grep "^d" | wc -l
- 统计当前目录下文件的个数(不包括目录):
-
- 常用命令
- lsblk:查看当前磁盘情况
- df path:查看文件(夹)所在分区(挂载点)
- df -lh:查看文件系统情况
- df -l:查看挂载点使用情况
- mount:查看已挂载的文件系统
- /etc/fstab
- /etc/mtab
- /proc/mounts
- fdisk -l:查看当前未挂载硬盘
批量解压到某个固定目录
1 | for i in `ls *.tgz` |
- iptables
- iptables -I INPUT -p tcp –dport 80 -j DROP
- sudo tcpdump -i any -w telnet-80.pcap port 80
- telnet 服务端IP 80
- sudo sysctl net.ipv4.tcp_syn_retries
- net.ipv4.tcp_syn_retries = 6
- iptables -I INPUT -p tcp –dport 80 -j REJECT
- telnet 47.94.129.219 80
- sudo tcpdump -i any -w telnet-80-reject.pcap host 47.94.129.219 and port 80
- sudo tcpdump -i any -w telnet-80-reject.pcap host 47.94.129.219
统计某个端口连接数量,如redis默认端口6379(Mac环境)
- netstat -nat | grep -i “6379” | wc -l
- lsof -i:6379 | wc -l
- ps -ef | grep redis | grep -v grep,这种方式只能按进程名NAME进行查看
Too many levels of symbolic links,创建软连接时使用全路径