基础服务
【未分类】
备忘的一些链接
图床列表 - imgtu
【目录】生活&其它
游戏修改器-nes游戏修改记录
尝试操作系统-Community20.3
哈哈哈
警世恒言/人生谎言
使用视频采集卡让笔记本当nuc的屏幕
【已废弃】获取微信好友-itchat
获取微信好友-pc hook
易混词语(尽量避免使用)
有用的链接(工具)
zy服务版本记录
注意安全、生命、健康
日文输入法
安卓模拟器中使用微信充值微信豆
备忘小技巧
excel
网站生成
静态网站生成工具-vuepress
静态网站生成工具-hugo
【目录】代码片段
动态显示select的option列表
同时显示汉字和拼音
常用java代码
性能
jmeter
jmeter-性能
ops
kubernetes
jenkins
drone
服务升级记录
mrdoc升级记录
mysql升级记录
方案
跨语言的web服务间接口调用安全问题
【其它编程语言】
编程-javascript
编程-python
前端框架-react
编程-golang
c语言
.NET(dotnet)
【前端】
Lua简明教程
【缓存】redis
redis
服务搭建
搭建mrdoc
主机服务及端口列表
安装centos7虚拟机
docker
虚拟机-vagrant和virtualbox
安装AlpineLinux虚拟机
docker machine
docker-swarm
配置https域名
centos7服务器清理磁盘空间
vscode
multipass
ubuntu 使用
【数据库】mysql
mysql命令
mysql
HashDatabaseAndTableTest.java
mysql-快速导入100w条记录
mysql高级命令
用于排查问题的一些常见命令
基础信息
mysql5.7升级到8
maven相关
maven命令行汇总
自动升级maven工程中的项目版本
maven基础及高级
windows系统使用
windows客户端软件使用
windows 宿主机 + virtualbox虚拟机共同使用
windows常见问题记录
新的开发环境
windows11配置
windows系统下载
命令行安装软件 & 配置软件
折腾谷歌浏览器
浏览器插件列表
windows音频视频下载工具
云服务
服务-tao-道
【目录】技术分享
技术分享-todo
【目录】shell
windows常用命令
shell脚本汇总
shell命令汇总
windows常用脚本
命令行操作录制工具 asciinema-player
windows软件包管理器scoop
网络相关
服务使用
nexus
jenkins
apifox
notify (bark-server)
开发人员相关
IDEA相关配置
压力测试工具-jmeter
【目录】git集合
git常用操作
gitlab替代品:gitea搭建及简单使用
【git神技】git配置多个提交账户
【git神技】git别名使用
【git神技】一个本地仓库同时提交到github/gitlab/gitee等多个代码平台
gitlab使用记录
git问题汇总
git-for-windows配置
用过的jdk版本
内网穿透-通过公网ip访问本地web服务
常见问题的排查及工具
本文档使用 MrDoc 发布
-
+
首页
shell命令汇总
# linux shell ## 网络 (sudo yum install -y firewalld) - lsof -i:80 查看占用80端口的程序 (yum install -y lsof) - 检查端口被哪个进程占用 netstat -lnp|grep 8000 (需要`yum install net-tools -y`) - /etc/init.d/iptables status - /etc/init.d/iptables stop - 开启端口 `firewall-cmd --zone=public --add-port=80/tcp --permanent` - 查看已经开放的端口 `firewall-cmd --list-ports` - 重启firewall `firewall-cmd --reload` - 停止firewall `systemctl stop firewalld.service` - 禁止firewall开机启动 `systemctl disable firewalld.service` - 开机自启动 `systemctl enable firewalld.service` - 查看防火墙状态 `firewall-cmd --state` - `tcpdump -i eth0 -v -c 10 tcp port ! 22 and host 115.183.5.167 ` <https://linux.cn/article-10191-1.html> - 查看系统日志信息 cat /var/log/messages - 查看当前服务器请求数 `netstat -na | wc -l` `while true;do curl http://192.168.56.11:30080/;sleep 1;done` - 同步时间 `ntpdate ntp3.aliyun.com` - 修改时区 `timedatectl set-timezone Asia/Shanghai` ## bash相关 .bash_history :记录了您以前输入的命令, .bash_logout :当您退出 shell 时,要执行的命令, .bash_profile :当您登入 shell 时,要执行的命令, .bashrc :每次打开新的 shell 时,要执行的命令 ```bash is_byebye_set=`cat ~/.bash_logout | grep "bye bye"` if [ "" == "${is_byebye_set}" ]; then cat >> ~/.bash_logout <<EOF echo =================== echo bye bye echo =================== EOF else echo "bye bye was set." fi ``` $PS1, $PS2 变量来设置提示符,$PS2是当在多行内输入一个命令时,换行后,出现的提示符。命令 ```text [root@launch201003 ~]# echo $PS1 [\u@\h \W]\$ [root@launch201003 ~]# echo $PS2 > ``` 可用的PS1: `PS1='\n[\e[1;32m\u\e[1;33m@\e[1;35m\H\e[0m \e[1;34m\W\e[0m]\n$'` ```bash is_ps1_set=`cat ~/.bashrc | grep "change PS1"` if [ "" == "${is_ps1_set}" ]; then cat >> ~/.bashrc <<EOF # can use me to call the function me() function me() { echo "I'm billy" } function wechat() { sh "/opt/workbench/upload/pyt/_login_and_work.sh" } function gitpl() { sh "/opt/workbench/git-repo/__git_pull.sh" } # show git info function __my_git_ps1() { # 【坑】这里使用 -f "~/.git-prompt.sh"会返回false if [ -f ~/.git-prompt.sh ]; then chmod +x ~/.git-prompt.sh . ~/.git-prompt.sh # 【坑】要使用双引号 echo "\`__git_ps1\`" else echo "" fi } # change PS1 # attention! text value in PS1 should use (') not (") PS1='\n[\e[1;32m\u\e[1;33m@\e[1;35m\H\e[0m \e[1;34m\W\e[0m]' PS1="\$PS1"'\e[36m' # change color to cyan # 【坑】要使用单引号 PS1="\$PS1"'\`__my_git_ps1\`' # bash function PS1="\$PS1"'\e[0m' # clear color PS1="\$PS1"'\n' # new line PS1="\$PS1"'\$ ' # prompt: always $ export COLOR_RED='\e[1;31m' export COLOR_GREEN='\e[1;32m' export COLOR_YELOW='\e[1;33m' export COLOR_BLUE='\e[1;34m' export COLOR_PINK='\e[1;35m' export COLOR_NONE='\e[0m' echo -e " \${COLOR_PINK}===================\${COLOR_NONE}" echo -e " \${COLOR_PINK} welcome by .bashrc \${COLOR_NONE}" echo -e " \${COLOR_PINK}===================\${COLOR_NONE}" EOF else echo "ps1 was set." fi source ~/.bashrc ``` ```bash echo "测试颜色,语法如下:" echo '一:echo -e "\033[背景颜色;文字颜色m字符串\e[0m"' echo '二:echo -e "\e[背景颜色;文字颜色m字符串\e[0m"' echo -e "\033[41;36m content \033[0m" echo -e "\e[41;36m content \e[0m" ``` ```text echo -e "\e[30m 黑色字 \e[0m" echo -e "\e[31m 红色字 \e[0m" # 不正确 echo -e "\e[32m 绿色字 \e[0m" # 不正确 echo -e "\e[33m 黄色字 \e[0m" echo -e "\e[34m 蓝色字 \e[0m" echo -e "\e[35m 紫色字 \e[0m" echo -e "\e[36m 天蓝字 \e[0m" echo -e "\e[37m 白色字 \e[0m" echo -e "\e[40;37m 黑底白字 \e[0m" echo -e "\e[41;37m 红底白字 \e[0m" echo -e "\e[42;37m 绿底白字 \e[0m" echo -e "\e[43;37m 黄底白字 \e[0m" echo -e "\e[44;37m 蓝底白字 \e[0m" echo -e "\e[45;37m 紫底白字 \e[0m" echo -e "\e[46;37m 天蓝底白字 \e[0m" echo -e "\e[47;30m 白底黑字 \e[0m" \e[0m 关闭所有属性 【\e[m】和【\e[0m】相同 \e[1m 设置高亮 加粗 \e[4m 下划线 \e[5m 闪烁 \e[7m 反显 \e[8m 消隐 \e[30m — \33[37m 设置前景色 \e[40m — \33[47m 设置背景色 \e[nA 光标上移n行 \e[nB 光标下移n行 \e[nC 光标右移n行 \e[nD 光标左移n行 \e[y;xH设置光标位置 \e[2J 清屏 \e[K 清除从光标到行尾的内容 \e[s 保存光标位置 \e[u 恢复光标位置 \e[?25l 隐藏光标 \e[?25h 显示光标 ``` ## 性能 - 查看内存 `free -m` - top - iostat -x 1 ```text ps aux | grep dubbo netstat -anp | grep 80 netstat -anp | grep 80 | grep LIS ps -ef | grep fire netstat -anp | grep 6379 docker images | grep registry/tomcat netstat -anp | grep -i listen docker rmi 192.168.0.113:5000/elasticsearch ``` ## 系统信息相关 - `uname -a` - `lsb_release -a` (是`ls /etc/*release`的结果之一) - `cat /etc/os-release` 其中,“NAME”表示发行版名称,“VERSION”表示版本号和代码名称。 - `cat /proc/version` - `getconf LONG_BIT` 当前操作系统的位数 ## 文件(夹)操作 - 隐藏文件是以.开头的文件。 - 切换目录 cd xxx - 查看当前目录的绝对路径 pwd - 查看文件 ls -Fpla (l -> long, a -> all) - 查看文件的访问时间 ls -l --time=atime abc - 创建一个新文件 touch abc - 复制 cp - 把下前目录下的所有文件夹的下.project文件删除 `find ./ -type f -name ".project" -print -exec rm -rf {} \;` - 把下前目录下的所有文件夹的下target文件夹删除 `find ./ -type d -name "target" -print -exec rm -rf {} \;` - 查询大于5M的文件 `find / -type f -size +5000k` - 把某文件夹下的多层文件夹里的所有jpg结尾的文件复制到另一文件夹下`cp folder1/**/*.jpg folder2/` - 查看文件inode编号(inode编号是内核分配给文件系统的每一个文件的唯一数字) `ls -i abc` - 链接(创建如下两种链接后可以查看文件的inode编号以确认链接和原文件是不是同一个文件) * 符号链接(软链接):ln –s src dest, eg `ln -s /usr/local/bin/docker-compose /usr/local/bin/doco` * 硬链接:ls src dest - vim中将s1替换为s2 `:%s/s1/s2/g` - git-bash中将所有java文件编码调整成UTF-8 * `find ./ -type f -name "*.java" | while read line; do iconv -t UTF-8 $line; done` * 处理多类文件 `find ./ -type f -name "*.java" -or -name "*.jsp" | while read line; do iconv -t UTF-8 $line; done` - 当前时期/时间作为随机字符串 + `date "+%Y-%m-%d %H:%M:%S"` + mkdir -p /tmp/abc/test-dir-`date +"%Y%m%d__%H_%M_%S"` + `mv CMBCPayImpl.class CMBCPayImpl.class.$(date +%F) ` - `echo 'Welcome to your Vagrant-built virtual machine.' > /etc/motd` - echo "$JAVA_HOME" 会替换变量 echo '$JAVA_HOME' 不替换变量 - 查看文件行数 `wc -l a.log` - 查看文件中以两位数字开头的行 `cat a10000.csv2 | egrep '^[0-9]{2,}'` - 查看只有一列的文件中是否有重复数据 `cat a10000.csv | sort | uniq -c ` - 查看只有一列的文件中只不重复数据的行 `cat a10000.csv | sort | uniq -c | awk '{if ($1==1) print $0}'` - 命令行方式文件上传 `curl -F "file=@a.png" http://localhost:9002/file/upload.do ` - 查看CPU的情况 `cat /proc/cpuinfo | grep "model name"` - 查看cpu数量 `cat /proc/cpuinfo | grep "model name" | wc -l` - 把当前文件夹及子文件夹中的所有.html后缀改成.ftl ``` find ./ -type f -name "*.html" | xargs -I file echo file | sed 's/\.html/\./g' | xargs -I fileWithoutExt mv fileWithoutExt'html' fileWithoutExt'ftl' ``` - 把当前文件夹下的Controller.java改名为AppController.java ``` find ./ -type f -name "*Controller.java" | xargs -I file echo file | sed 's/Controller\.java//g' | xargs -I fileWithoutExt mv fileWithoutExt'Controller.java' fileWithoutExt'AppController.java' ``` - 把当前目录下的svg文件名前都添加icon- ``` for file in *.svg; do mv "$file" "icon-${file}"; done ``` - 将m4a文件转成ogg ``` ffmpeg -i Battle2.m4a -acodec libvorbis Battle2.ogg ``` - 将本文件夹中的所有m4a文件转成ogg ``` find ./ -type f -name "*.m4a" | xargs -I file echo file | sed 's/\.m4a/\./g' | xargs -I fileWithoutExt ffmpeg -i fileWithoutExt'm4a' -acodec libvorbis fileWithoutExt'ogg' ``` grep配合wc命令统计在文件中出现的行数 `grep -o "costMillis" a.log | wc -l` - 打印通过空格隔开的每一行的第4个和第6个字符 awk '{print $4,$6}' application.log - 打印通过“:”隔开的每一行的第4个和第6个字符 awk -F: '{print $4,$6}' application.log - 给某文件的每行文件添加一个分号 `awk '{print $0";"}' a.txt > b.txt` - 删除每行前几个字符(^.表示开头1个字符,n个.即表示n个字符) `sed -i 's/^..//g' a.txt` - 文件按从小到大排序取出前3个 `ls -hlSr | head -n 4` (S: sort, r: reverse, 4: ls的输出有一行是无用信息) - 查看centOS版本 `cat /etc/redhat-release` 查询特定目录下面大于 200M 的文件 find /home/admin -size +200M 1天内访问过的文件 find /home/admin -atime -1 1天内修改过的文件 find /home/admin -mtime -1 1分钟内访问过的文件 find /home/admin -amin -1 1分钟内修改过的文件 find /home/admin -mmin -1 删除创建时间是7天前的文件? find /root/workbench_dir/backup/ -type f -mtime +7 -exec rm -rf {} \; 定时任务 crontab -l crontab -e 每五分钟执行一次 `*/5 * * * * sh /root/secure_ssh.sh` 每天2点执行一次 `0 2 * * * sh /root/dockers/mysql57/backup_mysql.sh` 防止暴力破解centos的登录密码 cat secure_ssh.sh ```bash #!/bin/bash cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"="$1;}' > /usr/local/bin/black.txt for i in `cat /usr/local/bin/black.txt` do IP=`echo $i |awk -F= '{print $1}'` NUM=`echo $i|awk -F= '{print $2}'` if [ $NUM -gt 5 ];then grep $IP /etc/hosts.deny > /dev/null if [ $? -gt 0 ];then echo "sshd:$IP:deny" >> /etc/hosts.deny fi fi done ``` ## 压缩解压 - 解压 tar zxvf 文件名.tar.gz 如 `tar zxvf abc.tar.gz` - 压缩 tar zcvf 文件名.tar.gz 文件夹名 如 `tar zcvf abc.tar.gz abc/` - 压缩目录 zip -r 目标文件名.zip 文件夹名 如 `zip -r socket1.zip socket1/` ### 使用7z 为什么使用7z?因为zip/tar压缩工具生成的压缩包很大。 安装:`yum install p7zip p7zip-plugins -y` 示例命令 `7z a -mx0 -mhe=on -paaa -sas AC.7z AC.pdf` 示例命令 `7z a -t7z -mx0 -mhe=on -paaa -sas AC.7z AC.pdf` * a 压缩 * -t 压缩格式类型 * -mx0 不压缩(仅存储) 操作起来特别快 * -mhe=on 打开压缩包时看不到文件名 * -p 设置密码 * -sas 若目标压缩包的文件名中没有扩展名,就自动追加。 * AC.7z 目标压缩包的文件名 * AC.pdf 被压缩的文件列表 分卷压缩示例:`7z a -t7z -v3m springboot-simple.jar.7z springboot-simple.jar` 分卷压缩后删除原文件示例:`7z a -t7z -v5m -sdel springboot-simple.jar.7z springboot-simple.jar` ## free命令结果 centos7中执行`free -m`如下 ```text total used free shared buff/cache available Mem: 7466 3659 294 22 3511 3437 Swap: 0 0 0 ``` 其中: - free 是真正尚未被使用的物理内存数量。 - total = used + free + buff/cache - buff/cache与available的区别: * available 是应用程序认为可用内存数量,available = free + buffer + cache (注:只是大概的计算方法) * buff/cache是操作使用使用的,随着程序申请内存,操作系统会回收该部分内存 ## 服务相关 - systemctl -a 查看所有服务列表 - systemctl -l 查看活动服务列表 安装openssh 先更新系统,再安装openssh,否则安装完可能无法启动。 sudo pacman -Syu sudo pacman -S openssh sudo systemctl start sshd.service sudo systemctl enable sshd.service sudo systemctl restart sshd.service 修改manjaro界面为英文 `sudo vim /etc/locale.gen` 确保只有en_US.UTF-8 UTF-8,且行首没有# 再执行sudo locale-gen,重启即可 manjaro 手动调节屏幕亮度(好像无效) https://zhuanlan.zhihu.com/p/138880080 修改hostname `hostnamectl set-hostname nj201` ## shell ### $n 获取脚本的参数列表 描述:n为数字,$0代表脚本名称,$1~$9代表第1到第9个参数,十以上的需要用大括号如${10},${11} ```shell cat > a.sh <<EOF #!/bin/bash # filename a.sh echo "\$0 \$1 \$2 \$3 \$4 \$5 \$6 \$7 \$8 \$9 \${10} \${11}" EOF ``` ``` chmod +x a.sh && ./a.sh p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 ``` ### $\# 获取脚本的参数个数 ```shell cat > a.sh <<EOF #!/bin/bash # filename a.sh echo "number of parameter: \$#" EOF ``` ``` chmod +x a.sh && ./a.sh p1 p2 p3 p4 p5 ``` ### $\* $@ 获取脚本的所有参数 $\*:获取命令行中的所有参数,把所有参数当成一个整体 $@: 获取命令行中的所有参数,把所有参数分别对待 ```shell cat > a.sh <<EOF #!/bin/bash # filename a.sh echo "situation 1: not in loop" echo "\\\$*: \$*" echo "\\\$@: \$@" echo "situation 2: in loop" echo "loop of \\\$*" for N in "\$*" do echo \$N done echo "loop of \\\$@" for N in "\$@" do echo \$N done EOF ``` ``` chmod +x a.sh && ./a.sh p1 p2 p3 p4 p5 ``` ### $? 获取上个命令的执行结果 $?: 结果是0就是执行正常,非0为错误 ```shell cat > a.sh <<EOF #!/bin/bash # filename a.sh ls / echo "\\\$?: \$?" # a command that not exist abc echo "\$?: $?" EOF ``` ``` chmod +x a.sh && ./a.sh p1 p2 p3 p4 p5 ``` read option echo $option TODO: basename dirname cut: ```shell cat > sample_cut.sh <<EOF #!/bin/bash echo "192.168.0.100" | cut -d . -f 1 echo "192.168.0.100" | cut -d . -f 2 echo "192.168.0.100" | cut -d . -f 3 echo "192.168.0.100" | cut -d . -f 4 EOF ``` ``` chmod +x sample_cut.sh && ./sample_cut.sh ``` sed 流编辑器 替换 删除 追加 ```shell cat > sample_sed.sh <<EOF echo a1 > tmp.txt echo a2 >> tmp.txt echo a3 >> tmp.txt echo a4 >> tmp.txt echo a5 >> tmp.txt # 删除第2到4行 sed '2,4d' tmp.txt # 删除第3到最后行 # sed '3,$d' tmp.txt # 在第2行后面追加 # sed '2a drink tea' tmp.txt # 仅显示第2~4行 -n 表示只打印匹配的行 # sed -n '2,4p' tmp.txt # 找到包含a2内容的行,并删除 # sed -i '/a2/d' tmp.txt # 数据的搜寻并替换 # sed 's/要被取代的字串/新的字串/g' # 删除tmp第三行到末尾的数据,并把a替换为bbb # sed -e '3,$d' -e 's/a/bbb/' tmp.txt # 直接修改原文件,由于 $ 代表的是最后一行,而 a 的动作是新增,因此该文件最后新增『# This is a test』! # sed -i '$a # This is a test' tmp.txt EOF ``` ``` chmod +x sample_sed.sh && ./sample_sed.sh ``` awk: 逐行读取文件,以空格作为默认分隔符将每行切片。 sort 定义函数,在调用函数之前先声明函数。 企业真实面试题: - 使用linux命令查看file0中空行所在的行号 ```bash echo a1 > file0 echo a2 >> file0 echo a3 >> file0 echo "">> file0 echo a4 >> file0 echo a5 >> file0 ``` `awk '/^$/{print NR}' file0` - 有文件score.txt内容如下: ```text 张三 40 李四 30 王五 50 ``` 计算第二列的各并输出。 ```bash cat > score.txt <<EOF 张三 40 李四 30 王五 50 EOF ``` `cat score.txt | awk -F " " '{sum+=$2} END{print sum}'` - 用shell对文本中无序的一列数排序。 ```bash cat > num.txt <<EOF 4 5 3 2 1 EOF ``` `sort -n num.txt` `sort -n num.txt | awk '{a+=$0;print $0} END{print "SUM="a}'` - 用shell脚本查找当前文件夹下所有的文本文件中包含字符串"sample"的文件名称 ```bash echo "not match" > not_match.txt echo "i am sample1" > sample1.txt echo "i am sample2" > sample2.txt ``` `grep -r "sample" ./ | cut -d ":" -f 1` ### 字符串操作 - 替换 ``` abc=$(echo 'this is a test' | sed 's/this/This/g') echo $abc ``` - 截取字符串,expr substr `hostname` 2 3 (截取hostname字符串,从第二个字符开始,截3位,若hostname的值是h101,则该命令执行结果为101) - 字符串截取 - ``` var=h101 echo ${var:1} echo ${var:0:1} ``` ### 工具 - scp - 查看指定进程有多少个(如下是查看java进程有多少个)`ps axu | grep java | wc -l` - netcat nc https://blog.csdn.net/fageweiketang/article/details/82833193 - 免密登录 http://www.cnblogs.com/xubing-613/p/6844564.html - z-modem文件传输 `sudo yum install -y lrzsz` - ftp `wet https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/n/ncftp-3.2.5-7.el7.x86_64.rpm && sudo rpm -Uvh ncftp-3.2.5-7.el7.x86_64.rpm` ### sed https://michael728.github.io/2020/02/18/linux-command-sed/ ### 遇到的问题 - 问题:tomcat启动不了 熵 - 解决:`yum install rng-tools` `systemctl start rngd` ### nginx - 重启nginx `./nginx -s reload` 区域调整: > locale localectl status sudo localectl set-locale LANG=en_US.utf8 sudo cat /etc/locale.conf ### 规范 linux 系统集群前准备 - 配置用户billy/qwer1234 - 配置目录 /opt/software /opt/module 且给billy配置权限 sudo chown billy:billy /opt/module - 配置sudoers `sudo vim /etc/sudoers` ``` ## Allows people in group wheel to run all commands # %wheel ALL=(ALL) ALL billy ALL=(ALL) NOPASSWD: ALL ``` - [x] 配置静态ip `sudov vim /etc/sysconfig/network-scripts/ifcfg-enp0s3` (需要修改的是ONBOOT,BOOTPROTO,IPADDR,NETMASK,GATEWAY) ```text TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="enp0s3" UUID="9b168b3c-962f-48e5-ba24-827c3bf69485" DEVICE="enp0s3" PREFIX="24" IPV6_PRIVACY="no" ONBOOT="yes" BOOTPROTO="static" IPADDR="192.168.0.150" NETMASK="255.255.255.0" GATEWAY="192.168.0.1" ``` - [x] 配置 `sudo vim /etc/resolv.conf` (不需要配置8.8.8.8) ```text # Generated by NetworkManager # 注意自己上面的ip nameserver 192.168.0.1 #nameserver 8.8.8.8 ``` - 配置hosts文件 `sudo vim /etc/hosts` ```text 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.0.150 h150 192.168.0.151 h151 192.168.0.152 h152 192.168.0.153 h153 ``` - 配置 国内yum源 `sss` `sss2` - 配置 hostname `sudo vim /etc/hostname` - 安装相关软件 * sudo yum install -y lrzsz firewalld vim rsync * sudo yum install -y xinetd telnet telnet-server (sudo chkconfig telnet on) - 配置 xsync - 配置 jdk - 配置 maven - (只需要一台机器)配置 docker,方便安装mysql ### 复制虚拟机 - 修改ip - 修改hostname ### shell脚本片段 ```shell #!/bin/bash SERVERS_AND_USER_AND_PASS="192.170.2.152,root,abc123 192.170.2.153,root,abc123 192.170.2.154,root,abc123" for line in $SERVERS_AND_USER_AND_PASS do _ip=$(echo "$line"|cut -f1 -d",") _user=$(echo "$line"|cut -f2 -d",") _pass=$(echo "$line"|cut -f3 -d",") echo "info is $_ip $_user $_pass" done ``` ### 使用命令行管理virtualBox 最近在鼓捣hadoop,装了几台虚拟机,,总感觉gui启动很别扭,后来发现virtualBox有个headless模式,只想说舒服! 常用命令 VBoxManage startvm name|id --type [gui|headless|svd] #启动 VBoxManage startvm name|id --type [gui|headless|svd] #启动 VBoxManage list runningvms # 列出运行中的虚拟机 VBoxManage controlvm XP acpipowerbutton # 关闭虚拟机,等价于点击系统关闭按钮,正常关机 VBoxManage controlvm XP poweroff # 关闭虚拟机,等价于直接关闭电源,非正常关机 VBoxManage controlvm XP pause # 暂停虚拟机的运行 VBoxManage controlvm XP resume # 恢复暂停的虚拟机 VBoxManage controlvm XP savestate # 保存当前虚拟机的运行状态 ### 常用命令 ls cd lsblk find、df、tar、ps、top、netstat等 1、查看内存:top free -m 2、查看磁盘存储情况:df -h 3、查看磁盘IO读写情况:iotop(需要安装一下:yum install iotop)、iotop -o(直接查看输出比较高的磁盘读写程序) 4、查看端口占用情况:netstat -tunlp | grep 端口号 5、查看进程:ps aux conf jdk ``` cd ~ mkdir -p /opt/application wget https://repo.huaweicloud.com/java/jdk/8u151-b12/jdk-8u151-linux-x64.tar.gz cd /opt/application ``` ## if if [ -f /data/filename ]; then echo "文件存在" else echo "文件不存在" fi if [ ! -d "/data/" ];then mkdir /data else echo "文件夹已经存在" fi -r file 用户可读为真 -w file 用户可写为真 -x file 用户可执行为真 -f file 文件为正规文件为真 -d file 文件为目录为真 -c file 文件为字符特殊文件为真 -b file 文件为块特殊文件为真 -s file 文件大小非0时为真 -t file 当文件描述符(默认为1)指定的设备为终端时为真 ## 实际问题 ### 如果CPU使用率达到100%呢?怎么排查? - 通过top找到占用率高的进程。 - 通过top -Hp pid找到占用CPU高的线程ID。这里找到958的线程ID - 再把线程ID转化为16进制,printf "0x%x\n" 958,得到线程ID为0x3be - 通过命令jstack 163 | grep '0x3be' -C5 --color 或者 jstack 163|vim +/0x3be - 找到有问题的代码 ### 设置服务自启动 vim /lib/systemd/system/frpc.service ```text [Unit] Description=Frp Client Service After=network.target [Service] Type=simple User=nobody Restart=on-failure RestartSec=5s ExecStart=/usr/bin/frpc -c /etc/frp/frpc.ini ExecReload=/usr/bin/frpc reload -c /etc/frp/frpc.ini [Install] WantedBy=multi-user.target ``` sudo systemctl start frpc sudo systemctl enable frpc ExecStart中要使用/usr/bin和/etc/这样的目录,不要使用/root/application/...或/home/sample/...这样的路径,很容易会没有权限. ### centos7下安装htop ```bash # https://www.jianshu.com/p/5629e331f58d yum -y install epel-release # 安装过程中会有Network is unreachable,但最终会成功 yum -y install htop ``` <span id="jump-nfs"></span> ## nfs ### 服务器端 安装 & 配置 ``` yum install -y nfs-utils echo '/nfs_data *(rw,no_root_squash)' >> /etc/exports sudo mkdir -p /nfs_data service nfs restart systemctl enable nfs showmount -e ``` ### 客户端 `yum install -y nfs-utils`
我是张三
2025年3月28日 21:59
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
eblog
Markdown文件
分享
链接
类型
密码
更新密码