Linux碎碎念
在学习Linux过程中,有许多有用的小技巧。如果放在纸质的笔记本上,平时查阅会相当不方便。现在以一种“碎碎念”的方式,汇集整理在此,目前还不是很多,但随着学习、工作的深入,后续会陆陆续续添加更多的小技巧。
1. 配置ssh的等效性
ssh-copy-id -i /root/.ssh/id_rsa.pub oracle@10.1.1.88
这样id_rsa.pub可以直接添加到/home/oracle下的.ssh/authorized_keys
也可直接为ssh-copy-id oracle@10.1.1.88,会默认copy当前目录下的id_rsa.pub文件
2. 查看脚本的执行过程
sh -x ping.sh
3. 禁止远端ssh到本地的root用户
vim /etc/ssh/sshd_config
#PermitRootLogin yes 改为PermitRootLogin no
4. 安全设置
vim /etc/profile
TMOUT=10 -->>10s 没有输入,则自动注销
HISTFILESIZE=0 -->>不显示以前登录的history操作
5. 命令行修改密码
echo 123 | passwd --stdin aaa
6. 时间同步
ntpdate 0.rhel.pool.ntp.org
7. 调用图形计算器
gnome-calculator
8. 查看Linux系统版本
cat /etc/redhat-release
9. 修改ssh的默认端口
vim /etc/ssh/sshd_config
port 21785
10. 私有IP网段
Class A: 10.0.0.0~10.255.255.255
Class B: 172.16.0.0~172.31.255.255
Class C:192.168.0.0~192.168.255.255
11. basename
去除目录和后缀,只显示文件名
语法:basename NAME [SUFFIX]
举例:
basename /usr/bin/sort
Output "sort".
basename include/stdio.h .h
Output "stdio".
12. 如何修改网卡的名字
1> vim /etc/udev/rules.d/70-persistent-net.rules
2> start_udev
13. yum
在用yum卸载软件时,有时会报以下错误:
Error: Cannot retrieve repository metadata (repomd.xml) for repository: InstallMedia. Please verify its path and try again
You could try using --skip-broken to work around the problem
You could try running: rpm -Va --nofiles --nodigest
解决方法:
rm -rf /etc/yum.repos.d/packagekit-media.repo即可
14. 查看当前目录文件大小
du -sm *
如果需要排序,可用如下命令:du -sm * | sort -r -n -->>从大到小排序
15. shell中如何将文件文件中每一行提取出来
cat 123.txt | while read line
do
echo "$line"
done
如果循环语句内部有赋值,则该值并不能传递给当前脚本的变量,因为这里用了管道。倘若需要传递给外部变量,则需用如下方式:
while read line
do
echo "$line"
done < 123.txt
16. vim全部替换命令
全局替换命令为::%s/源字符串/目的字符串/g
其中:% 表示整个文件,同“1,$”;s 表示替换操作;g 表示全局替换;
源字符串和目的字符串中不能包含分隔符,否则,会产生歧义。在这种情况下,可用反斜杠'\'进行转义。
如果这两个字符串中的斜杠非常多,比如"file:///usr/share/man/man1/vim.1.gz",那么对每个斜杠进行转义就显得很麻烦。为此人们想到了一个解决办法,就是可以
使用其他字符作为分隔符(总是将作为替换命令代表的's'后的第一个字符作为分隔符)。例如使用'+'做分隔符时,上述命令就可以写成:%s+源字符串+目的字符串+g
17. 如何打开tar文件
1> 下载软件 http://www.rarlab.com/rar/rarlinux-3.9.0.tar.gz
2> 解压缩 tar xvf rarlinux-3.9.0.tar.gz
3> 切换到文件夹 cd rar
4> 编译 make
rar x human_resources.rar x指的是Extract files with full path
以上命令需在root账户下执行。
18. 如何将文件打包成rar格式的压缩文件
rar a ulcase.rar archive ulcase/*
a代表Add files to archive
ulcase.rar是压缩后的文件名
archive代表打包
ulcase/*是希望打包的文件
19. 如何查找命令所属的文件名
[oracle@node3 ~]$ rpm -qf `which vim`
vim-enhanced-7.2.411-1.8.el6.i686
20. grep多个字符匹配
grep -E "word1|word2|word3" file.txt
22. awk指定多个分隔符
grep -E "create table|primary key \(" provision.sql |awk -F '[. ]' '{print $NF}'
df -h |awk -F'[ %]*' '{if($6=="/home")print $5}' -->>查看/home目录的磁盘使用率(注意,-F'[ %]*' 要带上)
23. 截取IP地址
ifconfig |awk -F'[: ]+' 'NR==2{print $4}'
192.168.2.13
24. shell 字符串处理汇总
http://blog.chinaunix.net/uid-124706-id-3475936.html
25. sed删除1-3行,空格行,最后一行
sed -i '/^$/d;1,3d;$d' file1
26. sed和awk显示最后一行
sed -n '$p'
awk 'END{print}'
27. Xshell注册码
Xshell4.0 690313-111999-999313
Xmanager4.0 101210-450789-147200
28. 如何修改用户的属组
usermod -g oinstall -G dba,asmdba,oper oracle
29. 图形配置服务开机命令
ntsysv
30. vim搜索关键词高亮显示
:set hls
31. rarlinux下载地址
http://www.rarsoft.com/download.htm
解压命令:
rar e shell.rar -- e代表Extract files without archived paths
rar x shell.rar -- x代表Extract files with full path
32. echo
\b:退格
\c:忽略echo最后默认的换行符,同时忽略\c后的字符
[root@node1 ~]# echo -e "hello\bworld" hellworld [root@node1 ~]# echo -e "hello\cworld" hello[root@node1 ~]# echo "hello\bworld" hello\bworld
注意:echo后面要带上-e选项,表示enable interpretation of backslash escapes,默认是不支持转义符。
33. 如何利用ll命令按照文件大小排序
ll -Sh 其中-S sort by file size -h, --human-readable with -l, print sizes in human readable format (e.g., 1K 234M 2G)
这是按照从大到小排序
如果要从小到大排序,加个-r,即ll -Shr
34. 如何查看文件是否是硬链接
[root@node1 test]# touch 1 [root@node1 test]# ll total 0 -rw-r--r--. 1 root root 0 Mar 5 22:26 1 [root@node1 test]# touch 2 [root@node1 test]# ll total 0 -rw-r--r--. 1 root root 0 Mar 5 22:26 1 -rw-r--r--. 1 root root 0 Mar 5 22:26 2 [root@node1 test]# ln 1 3 -->>创建硬链接。注意, 硬链接和原文件是无法区分的. 所以3是1的硬链接,也可以看作1是3的硬链接 [root@node1 test]# ll -->> 第二列指的是指向该文件的硬链接数,该数字大于或等于2,说明该文件是硬链接文件 total 0 -rw-r--r--. 2 root root 0 Mar 5 22:26 1 -rw-r--r--. 1 root root 0 Mar 5 22:26 2 -rw-r--r--. 2 root root 0 Mar 5 22:26 3 [root@node1 test]# ln 3 4 [root@node1 test]# ll -i -->> 查看文件的inode number total 0 174442 -rw-r--r--. 3 root root 0 Mar 5 22:26 1 174445 -rw-r--r--. 1 root root 0 Mar 5 22:26 2 174442 -rw-r--r--. 3 root root 0 Mar 5 22:26 3 174442 -rw-r--r--. 3 root root 0 Mar 5 22:26 4 [root@node1 test]# find -inum 174442 -->> 通过inode number查找所有硬链接某个文件的所有文件 ./1 ./3 ./4
35. 显示时间
date +%Y%m%d
36. 如何退出startx
Ctrl+Alt+Backspace
37. IPC
Inter-Process Communication,进程间通信
ipcs是查看进程间通信的信息,ipcs -m是查看的是shared memory segments的信息
38. 如何查看Linux的block size
tune2fs -l /dev/sda1 |grep 'Block size'
39. 如何查看RHEL的发行版本
cat /etc/redhat-release
40. Xshell下如何迁移连接信息
在XShel中,每个保存的Session连接信息都是保存到.xsh(就是ini文件,可以用文本编辑器打开)文件中的。它的默认路径是
"%APPDATA%\NetSarang\Xshell\Sessions"
即:C:\Users\用户名\AppData\Roaming\NetSarang\Xshell\Sessions
可直接拷贝这些xsh文件到新的xshell的相同目录即可使用。
41. VMware如何进入BIOS
1> 首先关闭Vmware中的系统,打开虚拟机配置文件(.vmx文件),该文件位于所安装的虚拟机目录(不是虚拟机软件目录),在最前面中加入一行 bios.forceSetupOnce = "TRUE",开机就自动进入BIOS!不过VMware启动后,会将该参数由TRUE变为FALSE,如果您还要继续使用BIOS,就再手动改成TRUE 即可
2> 延长启动画面时间。在最前面加入:bios.bootDelay = "5000";5000为5秒。
42. 如何关闭SELinux
查看:sestatus
临时关闭:setenforce 0
永久关闭: 修改/etc/sysconfig/selinux文件
43. 如何用wath命令监控结果的输出
watch -n 10 -d 'ls -l boss28 |wc -l'
查看boss28目录下的生成的文件数
其中-n 10指的是以10s为时间间隔进行结果输出,-d后面接的是命令,因为用了管道,故用单引号引起来
44. 如何删除环境变量
unset 变量名
45. 如何删除除特定文件外的其它文件
ls | grep -v .xml | xargs rm -rf
该条语句即是删除当前目录下除xml文件外的其它文件
46. Minimal安装后,ifconfig命令未安装,那么如何查看ip地址呢?
ip addr
47. yumdownloader
用法:yumdownloader 包名
注意:yumdownloader本身是yum-utils包安装的。
[root@node3 ~]# rpm -qf `which yumdownloader` yum-utils-1.1.30-14.el6.noarch
48. 如何使用指定的yum源
yum --disablerepo=\* --enablerepo=BASE list
49. RHEL7中如何修改主机名
# vim /etc/hostname
50. Firefox is already running, but is not responding. To open a new window, you must first close the existing Firefox process, or restart your system
在linux的终端输入:firefox -profilemanager
回车后会出现一个小窗口让你选择使用哪个 profile 来启动 firefox。首先将当前出错的Profile删除掉,然后新建个即可。
51. 关于iptables,可参考
http://www.cnblogs.com/JemBai/archive/2009/03/19/1416364.html
http://www.cnblogs.com/kreo/p/4368811.html
52. CentOS右键没有“打开终端”选项
yum -y install nautilus-open-terminal
重启服务器
53. VIM如何搜索上一个匹配
?pattern 向上搜索 #继续搜索上一个
54. 递归的查找内容
grep -r "LASTHOSTPROBLEMID" /usr/local/icinga/
查找/usr/local/icinga/目录下含有LASTHOSTPROBLEMID的文件,如果只是输出文件名,则另需加-l参数。
grep -lr "LASTHOSTPROBLEMID" /usr/local/icinga/
55. RHEL7下如何关闭防火墙
service firewalld stop
systemctl disable firewalld
56. vim删除多行
:1,10d
57. 如何加载库
ldconfig
58. 163 yum源
其中,6.6指的是6.6版本的yum源,也可以使用其它版本
# CentOS-Base.repo # # The mirror system uses the connecting IP address of the client and the # update status of each mirror to pick mirrors that are updated to and # geographically close to the client. You should use this for CentOS updates # unless you are manually picking other mirrors. # # If the mirrorlist= does not work for you, as a fall back you can try the # remarked out baseurl= line instead. # # [base] name=CentOS-$releasever - Base - 163.com baseurl=http://mirrors.163.com/centos/6.6/os/$basearch/ #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os gpgcheck=1 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6 #released updates [updates] name=CentOS-$releasever - Updates - 163.com baseurl=http://mirrors.163.com/centos/6.6/updates/$basearch/ #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates gpgcheck=1 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6 #additional packages that may be useful [extras] name=CentOS-$releasever - Extras - 163.com baseurl=http://mirrors.163.com/centos/6.6/extras/$basearch/ #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras gpgcheck=1 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6 #additional packages that extend functionality of existing packages [centosplus] name=CentOS-$releasever - Plus - 163.com baseurl=http://mirrors.163.com/centos/6.6/centosplus/$basearch/ #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus gpgcheck=1 enabled=0 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6 #contrib - packages by Centos Users [contrib] name=CentOS-$releasever - Contrib - 163.com baseurl=http://mirrors.163.com/centos/6.6/contrib/$basearch/ #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib gpgcheck=1 enabled=0 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6
59. 只显示文件名,目录名
只显示文件名:basename
只显示目录名:dirname
60. yum install lrzsz
其中rz可用于将远程的文件传输到本地
sz可将本地的文件传输到远程
61. ss -lnpt |grep mysqld
该命令也可查看端口号
62. 如何查看指定文件的总大小
ll txn_proc_result#* |awk 'BEGIN {sum=0;}{sum=sum +$5;}END{print "The size is ",sum/1024/1024,"M"}'
63. CentOS下安装semanage
yum -y install policycoreutils-python
64. 通过inode删除文件
rm `find . -inum 377332`
65. CentOS 7如何关闭防火墙
临时关闭:systemctl stop firewalld
永久关闭:systemctl disable firewalld
66. AWK如何将各行的字符拼凑成一行,并以逗号隔开
awk 'BEGIN{name="";}{name=name""$1""","}END{print name}' host.txt
生成的结果如下:
a,b,c,
替换/home下所有文件中的www.admin99.net为admin99.net
sed -i "s/www.admin99.net/admin99.net/g" `grep www.admin99.net -rl /home
68. 关于too many openfiles
73. 时间戳和date互转
# date -d "@1476244919"
# date -d "2010-07-20 10:25:30" +%s
74. 启动docker mysql容器
# docker run -it -p 3307:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6.34
其中,3307是宿主机端口,3306是容器端口
75. 如何将根目录从只读模式修改为可读可写模式
# mount -o remount, rw /
76. 通过PS1自定义linux命令行格式
get_ps1() { Date=$(date +%F) Time=$(date +%H:%M:%S) PS1="\n\e[1;37m[\e[m\e[1;32m\u\e[m\e[1;33m@\e[m\e[1;35m\h $Date $Time \e[m \e[4m\`pwd\`\e[m\e[1;37m]\e[m\e[1;36m\e[m\n\\$ " } PROMPT_COMMAND=get_ps1
77. 通过grep递归搜索关键词并排除某些目录
# grep -r "innodb_flush_log_at_trx_commit" --exclude-dir=mysql-test *
78. 如何查看Linux软中断信息
# mpstat 2 5
79. 通过inode删除文件
# find -inum 397724 |xargs rm -rf
80. 通过某个进程号显示该进程打开的文件
# lsof -p 4412
81. 批量修改IO调度算法
for device in $(lsblk |grep "disk" |awk '{print $1}' |xargs); do echo "deadline" > /sys/block/${device}/queue/scheduler; cat /sys/block/${device}/queue/scheduler; done sed -i "s#\(kernel[[:space:]].*rd_NO_MD[[:space:]].*quiet\)#\1 elevator=deadline#g" /boot/grub/grub.conf
82. 使用screen管理终端
窗口断开的时候,会导致当前窗口执行的操作被中断,通常会使用nohup &命令来规避这个问题。
但是nohup命令比较简陋,不支持交互,譬如输入密码
[root@node1 ~]# nohup mysql -h 192.168.244.10 -uroot -p -e 'source 1.sql' & [1] 13766 [root@node1 ~]# nohup: ignoring input and appending output to `nohup.out' [1]+ Stopped nohup mysql -h 192.168.244.10 -uroot -p -e 'source 1.sql'
使用screen可解决这个问题
[root@node1 ~]# screen mysql -h 192.168.244.10 -uroot -p -e 'source 1.sql'
输入完密码后,执行C-a d(即Ctrl键+a键,之后再按下d键),Screen会给出detached提示
[root@node1 ~]# screen mysql -h 192.168.244.10 -uroot -p -e 'source 1.sql' [detached]
可关闭当前终端,不影响当前执行的操作
稍后可重新连接会话
首先找到该screen会话
[root@node1 ~]# screen -ls There is a screen on: 14285.pts-7.node1 (Detached) 1 Socket in /var/run/screen/S-root.
重新连接会话:
[root@node1 ~]# screen -r 14285
参考:https://www.ibm.com/developerworks/cn/linux/l-cn-screen/
如何在screen中使用重定向
screen /bin/bash -c 'java Foo > foo.txt'
screen指定日志
screen -L -Logfile log_filename your_command
83. RHEL 7中mysqld的启动文件路径
/etc/systemd/system/multi-user.target.wants/mysqld.service
84. 将man文档cp到/usr/local/man/man1后,如何让man命令可以识别
mandb
85. 如何debug crontab中的任务
首先,通过/etc/rsyslog.conf查看cron对应的日志
cron.* /var/log/cron
通过 /var/log/cron可定位crontab中的任务。
86. 设置chkconfig时报错
# chkconfig mysqld_3307 on
insserv: script mysqld_3307: service mysql already provided!
原因,mysqld_3307和mysqld自启动脚本中的# Provides值相同,都是mysql。只需调整mysqld_3307的值。
87. split切割文件
split -b 100m 1111.log (按照字节分隔) split -l 1000000 1111.log(按照行数分隔)
88. 如何查看服务器的型号
dmidecode | grep "Product Name"
89. sed批量替换字符串
sed -i "s/原字符串/新字符串/g" `grep 原字符串 -rl 所在目录`
90. 安装特定版本的MySQL
[root@node2 mysql]# yum list |grep mysql-community mysql-community-client.i686 8.0.11-1.el7 mysql80-community ... [root@node2 mysql]# yum install mysql-community-server-8.0.11
91. Vmware CentOS 7中如何修改系统分辨率
Applications->System Tools->Settings->Hardware->Displays
92. sed批量替换字符串
sed -i "s/oldstring/newstring/g" filename
93. yum报错
error: rpmdb: BDB0113 Thread/process 17378/139751801231424 failed: BDB1507 Thread died in Berkeley DB library error: db5 error(-30973) from dbenv->failchk: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery error: cannot open Packages index using db5 - (-30973) error: cannot open Packages database in /var/lib/rpm CRITICAL:yum.main:
解决方法:
rm -f /var/lib/rpm/__db* rpm --rebuilddb
94. 如何判断磁盘是否为SSD
lsblk -d -o name,rota NAME ROTA sda 1 sdb 0
这里的name是磁盘名,rota是rotational的缩写,如果返回1则表示磁盘可旋转,那么就是HDD了;反之,如果返回0,则表示磁盘不可以旋转,那么就有可能是SSD了。
95. 对文件按时间进行排序
ll -t,从新到旧
ll -rt,从旧到新
96. 设置/tmp目录的权限
chmod 1777 /tmp
97. 对IP进行排序
sort -n -t . -k 1,1 -k 2,2 -k 3,3 -k 4,4 redis.ini
98. AWK对列求和
# date -d @1571226150 Wed Oct 16 19:42:30 CST 2019 # date +%s 1571226283
103. 文本列转行
cat file.txt |tr "\n" ","|sed -e 's/,$/\n/'
104. 按目录大小排序
du -sm /data/* | sort -g -k 1
其中,-g 按数字排序,-k 第一列
105. 使用ip命令配置地址
ip address add 10.0.0.3/24 dev eth0
107. du排除指定目录
du -sm --exclude=/proc --exclude=/data /*
108. 同步时间
# ntpdate -u ntp.api.bz 17 May 15:45:29 ntpdate[118371]: adjust time server 114.118.7.161 offset -0.043410 sec
109. 使用sort命令对ip进行排序
sort -t "." -k1n,1 -k2n,2 -k3n,3 -k4n,4 ip.txt
110. 通过密文修改用户密码
明文
echo password | passwd --stdin test
密文:
hash=$(echo hello | openssl passwd -1 -stdin) usermod --pass='$hash' test
注意,密文密码要用单引号括起来。
可参考:https://unix.stackexchange.com/questions/81240/manually-generate-password-for-etc-shadow
111. Permission denied, please try again.
可能原因之一:需要设置AllowUsers,且必须带上root用户
vim /etc/ssh/sshd_config
PermitRootLogin yes
AllowUsers root nginx_test
/etc/init.d/sshd restart
112. yum安装指定版本的MySQL
1. 首先安装指定版本的yum源:https://dev.mysql.com/downloads/repo/yum/
2. 查看可安装的mysql版本
yum list --showduplicates | grep mysql-community | grep 8.0.25
mysql-community-client.i686 8.0.25-1.el7 mysql80-community mysql-community-client.x86_64 8.0.25-1.el7 mysql80-community mysql-community-client-plugins.i686 8.0.25-1.el7 mysql80-community mysql-community-client-plugins.x86_64 8.0.25-1.el7 mysql80-community mysql-community-common.i686 8.0.25-1.el7 mysql80-community mysql-community-common.x86_64 8.0.25-1.el7 mysql80-community mysql-community-devel.i686 8.0.25-1.el7 mysql80-community mysql-community-devel.x86_64 8.0.25-1.el7 mysql80-community mysql-community-embedded-compat.i686 8.0.25-1.el7 mysql80-community mysql-community-embedded-compat.x86_64 8.0.25-1.el7 mysql80-community mysql-community-libs.i686 8.0.25-1.el7 mysql80-community mysql-community-libs.x86_64 8.0.25-1.el7 mysql80-community mysql-community-libs-compat.i686 8.0.25-1.el7 mysql80-community mysql-community-libs-compat.x86_64 8.0.25-1.el7 mysql80-community mysql-community-server.x86_64 8.0.25-1.el7 mysql80-community mysql-community-test.x86_64 8.0.25-1.el7 mysql80-community
3. 安装指定版本的devel包
yum install mysql-community-devel-8.0.25
# yum install mysql-community-server-8.0.18 mysql-community-common-8.0.18 mysql-community-client-8.0.18 mysql-communitlibs-8.0.18
113. 查看glibc的版本
ldd --version
getconf GNU_LIBC_VERSION
114. GitHub中如何提交 pull request
https://chinese.freecodecamp.org/news/how-to-make-your-first-pull-request-on-github/
115. Git Token
https://www.cnblogs.com/sober-orange/p/git-token-push.html
116. Git 如何查看代码修改的内容
add 之前,可通过 git diff <file> 查看
commit 之前,可通过 git diff -cached <file>
commit 之后,可通过 git log -p -2
117. 查看磁盘和挂载路径的关系
cat /proc/partitions
118. 如何去掉文件中^M
sed -i 's/\r//g' *
119. TPCH 中生成查询
export DSS_QUERY=queries for i in `seq 1 22` do ./qgen -d ${i} > query_tpch_1/${i}.sql done
120. grep 剔除某些目录
grep "VIEW_CHANGE_LOG_EVENT" -ri * --exclude-dir=mysql-test
121. 配置 NTP 客户端
https://www.cnblogs.com/jjp816/p/15103623.html
122. 磁盘扩展没有生效
yum -y install cloud-utils-growpart gdisk # lsblk /dev/sda NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 120G 0 disk ├─sda1 8:1 0 512M 0 part /boot/efi ├─sda2 8:2 0 8G 0 part [SWAP] └─sda3 8:3 0 38.1G 0 part / # growpart /dev/sda 3 CHANGED: partition=3 start=17827840 old: size=79847424 end=97675264 new: size=233830366 end=251658206 这里的序号 3 就是 sda3。 # lsblk /dev/sda NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 120G 0 disk ├─sda1 8:1 0 512M 0 part /boot/efi ├─sda2 8:2 0 8G 0 part [SWAP] └─sda3 8:3 0 111.5G 0 part / # xfs_growfs / # df -h
123. perl 进度条输出
$n = 30; for($i=1;$i<=$n;$i++){ proc_bar($i,$n); select(undef, undef, undef, 0.2); } <STDIN>; sub proc_bar{ local $| = 1; my $i = $_[0] || return 0; my $n = $_[1] || return 0; print "\r [ ".("\032" x int(($i/$n)*50)).(" " x (50 - int(($i/$n)*50)))." ] "; printf("%2.1f %%",$i/$n*100); local $| = 0; }
$|变量的作用: $|变量设置为真时,每输出一次,STDOUT缓冲会被强制清空
124. 如何生成 SSH 密钥对
ssh-keygen -t rsa -N "" -b 2048
125. 下载 RHEL/CentOS/Fedora 下的 Chrome
wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm yum install ./google-chrome-stable_current_*.rpm google-chrome &
126. chromedrvier error while loading shared libraries: libxcb.so.1
https://blog.csdn.net/tianjiliuhen/article/details/116748290
127. xfs文件系统恢复工具xfs_undelete
https://blog.csdn.net/jycjyc/article/details/122474148
128. MacOS 升级后,如何安装老版本的 Xcode,否则 MySQL 源码编译会报错。
Xcode 12 的下载地址
https://sysin.org/blog/apple-xcode-12/
下载12.3版本
下载 xip 版本,然后解压
如何安装,可参考:
https://blog.csdn.net/prokgtfy9n18/article/details/126049669
重点是
首先将高版本的 Xcode 重命名为 Xcode13,然后解压新下载的 Xcode11 版本,如果直接打开会报 “若要使用“Xcode”,您需要更新到最新版本。” 此时可以不用从应用图标打开,右击刚下载的 Xcode,选择显示包内容,进入 Contents/MacOS 下,点击 XCode 直接打开就可以了。然后在命令行手动切换 XCodebuild 到旧版的 XCode,命令为 `sudo xcode-select -s /Applications/Xcode.app` 如果要切换到新版本 `sudo xcode-select -s /Applications/Xcode13.app`