command+shift+k删除整行代码

正则替换注意后现在括号才能用$1引用:([0-9]) ==》 $1': '  :
    '10.71.1.63 my.cntv.cn  ==》    '10.71.1.63': ' my.cntv.cn

查看快捷键列表:command+k,command+s

切换同一编辑器不同的标签页:control+tab

跳转一个单词:option+←,option+→

Mac的Shell快捷键: Contro+Command+t
vscode mac 怎么打开终端,vscode怎么打开终端:control+ESC下面那个键(.~`) (esc下边那个)  ,control+`  (ESC按键下面那个`)
附:VS Code 的终端字体的方法 https://jackxiang.com/post/10027/

选择左上角Code ,选择【首选项】选择 【设置】搜索 终端 选择【终端】在右侧下翻,找到如下位置Terminal › Integrated: Font Family,修改红色方框中的值即可修改终端字体大小。Terminal › Integrated: Font Size字号设置大一些就好了。monospace 字体。 终端里的Iterm符号显示不出来,换字体:https://yq.aliyun.com/articles/691268  VS Code 内置的终端就能正确显示 Zsh 主题的箭头:https://www.jianshu.com/p/6837eaa4f4aa


通过匹配文本打开文件:Mac: command + T

切换标签:control + option + 左剪头或右剪头。

一次搜索所有文件的文本:Mac: Command + Shift + F

鼠标列选择:option  + 左键单击,选列块是 option + shift + 左键单击,尾不一样长度如何到尾部:shift+command+→ 。(五颗星,想直接到列的行尾,可列选择后再command+→到列尾再反向前面列选择)

鼠标多光标:option+在需要创建多光标的地方点鼠标左键

选中相同内容列编辑: 选中空格后,command+ d #这个用来进行快捷替换IP之间空格为竖线很有用,192.168.1 192.168.2 192.168.3 =》192.168.1|192.168.2|192.168.3

前提是先选中多行shift + 鼠标左键,再在所选中列的末尾进行列编辑: shift+option+i

多光标列编辑之批量替换当前文件中所有匹配的文本:Mac: command + F2。

多光标列编辑之复制光标向上或者向上批量添加内容:Mac: Control + Option +向上箭头,向下则是:Shift+Control + Option +向上箭头。

多光标列选择之单词左选择:shift+option+command+向左键

多光标列选择之单词右选择:shift+option+command+向右键

多光标选择查找匹配的所有匹配项: option+enter  
在选定内容中查找:option+command+shift+l(大写的L) ,选中后再替换:Optio+command+f

多光标的使用
技巧1:按住 「Option」键(windows 用户是按住「Alt」键) ,然后在页面中希望中现光标的位置点击鼠标。

技巧2:选中某个文本,然后反复按住快捷键「 Cmd + D 」键(windows 用户是按住「Ctrl + D」键), 即可将全文中与光标当前所在位置的词相同的词逐一加入选择。

技巧3:选中一堆文本后,按住「Option + Shift + i」键(windows 用户是按住「Alt + Shift + I」键),既可在每一行的末尾都创建一个光标。


将选择添加到下一个查找匹配,依次找出文中所有的当前选中的单词: command + d
一次性找出文所有的当前选中的单词: contorl + shift + l
切换侧栏可见:command+b

光标到行首:command+向左键
光标到行尾:command+向右键

Vscode从文本过滤所有IP并粘贴到新文档的步骤:
1)command + option + F 替换
2)([0-9]{1,3}[\.]){3}[0-9]{1,3}
3)点选上后面的*
4)option + enter 选中所有匹配项。
(一次性正则选中所有匹配到的代码:option + enter 选中所有匹配项。)
5)command + c 复制所有所选择IP。

VS Code 匹配中文: [\u4e00-\u9fa5]

Mac下的Vscode鼠标选择列:
Shift+Option+鼠标左键

移至文件的开头/结尾:
Mac: command + Home键开头,Mac: command + End键结尾。(Home/End分别是向左和向右键)

向上/向下移动一行:Mac: option+ 向下箭头,Mac: option向上箭头。

重复的行之向上向下复制一行:
option+shift+向上键/option+shift+向下键

插入一行: Shift + enter

删除一行:Mac: command + Shift + K。

删除上一个单词:Mac: option + delete。

逐个选择文本
Mac: option + Shift +右箭头
Mac: option + Shift +左箭头

选择左侧/右侧的所有内容:
Mac: command + Shift + Home/End
苹果笔记本没home键,可以用组合键实现

tab标签选项卡选择
option+commad+左/右

右侧滚动条上下移动长文阅读:
control+option+上/下

查看正在运行插件
打开命令面板(Ctrl + Shift + P)并输入Show running extensions来查看所有你安装的正在运行的插件。

vscode删空行: ^\s*$\n

vscode 字符串尾加换行符:
option+command+F替换
正则:$
换成:\n

删除光标所在行尾多余空格:
command + K command + X

附:
左方向键是HOME
右方向键是END
上方向键是page up
下方向键是page down

来自:https://blog.csdn.net/d_lds/article/details/63683624
更多:https://www.2cto.com/kf/201904/804824.html
背景:关于Go的一协程和通道,PHP也是可以的。

实践中发现swoole去获取微信授权,在单队列网卡和多队列(2个物理核心,8逻辑CPU)的一个情况:
单队列:
8CPU8G:1000并发。
两队列:
8CPU8G:10000并发1W的TPS。

#ls /sys/class/net/enp0s3/queues/
rx-0  tx-0

Top的Cache有点多:
7111104 buff/cache

队列来自:https://jackxiang.com/post/10079/

阅读全文
背景:在CentOS里修改错了,怎么办呢?于是用下面的方法实现了重新还原,再修改,这种情况修改后最后新开终端,否则发现错了再也进不去root后,无法修改,还好有这个办法可行。

通过 pkexec visudo 修改了 /etc/sudoers 文件,文件格式错误,结果无法使用 sudo,无法修改回去了,咋办?

在网上搜索半天,找到一个风骚的解决办法:

假设你是通过 ssh 连接服务器,那就创建两个连接会话。
在第一个会话中,使用这个命令获取进程 PID:
echo $$
在第二个会话中,用下面的命令启动授权代理:
pkttyagent --process [PID]
回到第一个会话,运行命令:
pkexec visudo
再回到第二个会话,输入当前用户的密码。
回到第一个会话,发现已经可以编辑 /etc/sudoers 了!!!
谁能告诉我这里的授权机制是什么?原文链接在这里:
https://askubuntu.com/a/1053617/297291
背景:发现Nginx启动时都会去创建/usr/lcoal/nginx/logs下面的文件,且越写越大,而能不能去掉或不写入日志,乃至放别的非nginx 的安装目录呢,说是不能,也有说能的。
禁用错误日志的语法是可以的,但是文档声明在读取配置之前使用默认日志文件。(这似乎是合理的,因为它会如何告诉你你的配置有错误)
mkdir /usr/local/nginx/logs/  #先让它启动起来,但是经过下面配置后不会再写入日志了。
nginx.conf里:
user www;                  
worker_processes 3;

worker_rlimit_nofile 51200;
error_log /dev/null crit;
http {
      access_log off;
}

结果:
du -sh /usr/local/nginx/logs/*
4.0K    /usr/local/nginx/logs/access.log
4.0K    /usr/local/nginx/logs/error.log

来自:https://cloud.tencent.com/developer/ask/54829


我在启动nginx时使用-p参数解决了这个问题,例如:

/home/ubuntu/nginx/sbin/nginx -c /home/ubuntu/nginx/conf/nginx.conf -p /data/logs/nginx
这将在配置中指定的任何日志路径前面加上前缀目录。

这个能指向别的目录,但是Nginx会加个 logs/error.log 这样的log,如:
/data/logs/nginx/logs/error.log

来自:https://cloud.tencent.com/developer/ask/54829
FreeBSD 上的成功步骤:


来自:https://mp.weixin.qq.com/s?__biz=MzU3NTgyODQ1Nw==&mid=2247486217&idx=1&sn=0bc9d610e69a32f0a8f230a554cd8489&chksm=fd1c738fca6bfa9994751642ed544f5a4db957ee58a816b57c10c3da2d26d5be5e108a27b322&scene=27#wechat_redirect


个人电脑macbook上部署:
source ~/.zshrc
source ~/.config/up/up.sh

/Users/jackXiang/.config/up.sh
对于SNAT这种转换,肯定是跨网段了,怎么个意思呢?
对于家里网想访问公网,肯定会把家里电脑的如:192.168.1.100转为申请的公网出口IP地址。
而对于武哥讲到的:

tcpdump -q -tttt  -nn 'tcp and dst 10.73.234.1** and dst port 8080' -P in -i eth0
参数解释:
-P:指定要抓取的包是流入还是流出的包。可以给定的值为"in"、"out"和"inout",默认为"inout"。

tcpdump -q -tttt  -nn 'tcp and dst 10.10.0.45 and dst port 9500' -P in -i enp0s3
Warning: -P switch is not compatible with the upstream version. You should use -Q instead.
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp0s3, link-type EN10MB (Ethernet), capture size 262144 bytes
2021-07-29 10:00:14.149878 IP 10.10.2.1.37566 > 10.10.0.45.9500: tcp 0
2021-07-29 10:00:14.157827 IP 10.10.2.1.37566 > 10.10.0.45.9500: tcp 0
2021-07-29 10:00:14.158114 IP 10.10.2.1.37566 > 10.10.0.45.9500: tcp 522
2021-07-29 10:00:14.165897 IP 10.10.2.1.37566 > 10.10.0.45.9500: tcp 0

10.10.2.1 指公网XX云VPN虚拟地址。

更多:SLB健康检测的IP和VIP不是同一个IP,且NAT模式VIP下在的机器访问自己的VIP肯定出现1/N的访问不到的情况,于是淘宝采用了FullNat模型,其本质是通过会话查表规避出现源和目的一样的情况。Tcpdump查检测IP方法:https://jackxiang.com/post/10128/

也就是说LVS的浮动IP向内转到里面的Jenkins某一台服务器时,其源IP和LVS浮动IP不一样且有可能是俩IP(主A备B),也就是同一台客户机发起请求,居然有可能是从A过来,也可能是从B过来,此时在Jenkins(10.73.234.180)配置的防火墙上面配置的IP可能只有A,而没有B,那么从B过来的包被拦截后,也就无法通过外包服务器触发里面的这台Jenkins进行部署代码,起码有一半的概率。
同理:对于GitLab里也出现类似问题,探测IP在探测后端机时,也是因为有俩IP,IPtable里面只写了一个,导致探测出现认为后端两机器都活着,在用户作SSH里连接Gitlab(10.73.234.179)时,出现LVS发现后端另一台也活着,Git Client在SSH 时会时而连接另外一台,在另一台日志出现被攻击的提示,且要修改/home/xiangdong/.ssh/known_hosts 的IP地址,因为另一个SNAT的IP过来连接了,会认为不安全,得删掉。



对于同一个SLB下的服务器N台访问自己的VIP,会出现1/N的的概率访问不通的解释:
S-->SLB-->D
16.1.1.1 -> 18.1.1.1->出现在SLB里访问的口当SLB的VIP向自己进行回包时,查路由表时,发现源地址一样,导致SLB不再转包,原因是源的目的地址都一样:
X@eth10 IP 18.1.1.1 > 18.1.1.1: S 4229408411:4229408411(0) win 64240 cmss  #这俩地址一样了于是不再转发,于是发的包没有回收到,于是出现业务上卡住了。



防火墙经过地址转换抓包详解:
https://blog.csdn.net/shiyuqi_blog/article/details/90230186
防火墙DNAT与SNAT详谈:
https://blog.51cto.com/luosea/1686022

R表示收到,X表示发出,R@eth1是从eth1口收到数据包。X@eth2是从2口发出数据包
16.1.1.1>18.1.1.2 表示IP 16.1.1.1发给IP 18.1.1.2
Seq后面的数是序列号 request和reply的号一致就是一个数据包

抓包过程详解:
防火墙eth1口收到16.1.1.1发给18.1.1.2的request数据包
接着从eth2口这个request数据包转发出去
然后防火墙eth2口收到18.1.1.2发给16.1.1.1的reply数据包
防火墙再从eth1口转发这个reply给16.1.1.1
---------------------
作者:一只认真的鱼
来源:CSDN
原文:https://blog.csdn.net/shiyuqi_blog/article/details/90230186
版权声明:本文为博主原创文章,转载请附上博文链接!



echo strrpos("jack.txt",".");
4

如果你有一个文件名,你需要从PHP中删除扩展名(extension),有很多方法可以做到这一点。这里有三种方法。


substr(strrchr($file, '.'), 1);

https://www.cnblogs.com/justdoityangbo/p/11113579.html

使用pathinfo()函数

pathinfo()函数返回一个包含dirname,basename,extension和filename的数组。或者,您可以传递一个PATHINFO_常量,并返回完整文件名的那一部分:

$filename ='filename.html';
$without_extension = pathinfo($filename, PATHINFO_FILENAME);
如果文件名包含完整路径,则仅返回不带扩展名的文件名。


使用basename()函数

如果扩展名是已知的并且对于所有文件名是相同的,则可以将第二个可选参数传递给basename()以告诉它从文件名中删除该扩展名:

$filename ='filename.html';
$without_extension = basename($filename,'.html');
如果文件名包含完整路径,则仅返回不带扩展名的文件名。

使用substr和strrpos

$filename ='filename.html';
$without_extension = substr($filename, 0, strrpos($filename, "."));
如果文件名包含完整路径,则返回没有扩展名的完整路径和文件名。您可以使用basename()来删除路径,例如:

basename(substr($filename, 0, strrpos($filename, ".")));
尽管它比使用pathinfo慢。

速度比较

使用PHP 5.4在Mac上以10,000,000次循环运行其中的每一个:

pathinfo:10.13秒
basename:7.87秒
substr / strrpos:6.05秒
basename(substr / strrpos):11.98秒
如果文件名不包含完整路径,或者如果它不重要,那么substr / strrpos选项似乎是最快的。

如果文件名包含路径并且您不想要路径但确实知道要删除的扩展名是什么,那么basename似乎是最快的。

如果文件名包含路径,则不需要路径,也不知道扩展名是什么,那么使用pathinfo()选项。

结论

还有很多其他方法可以做到这一点,有些可能会更快。在很多情况下,速度可能并不那么重要(运行pathinfo的10秒钟毕竟是10万次)。这篇文章的目的是展示一些用PHP从文件名中删除扩展名的方法。


来自:http://www.webkaka.com/tutorial/php/2019/050857/
Centos7修改grub启动菜单等待时间:
vi /boot/grub2/grub.cfg  #以下实践不如直接修改 vim  /etc/default/grub    GRUB_TIMEOUT=3,grub2-mkconfig -o /boot/grub2/grub.cfg ,下面timeout全是3,是实践了的。

找到并更改启动时间(timeout)


vim /boot/efi/EFI/centos/grub.cfg  #centos8

if [ x$feature_timeout_style = xy ] ; then
  set timeout_style=menu
  set timeout=1
# Fallback normal timeout code in case the timeout_style feature is
# unavailable.
else
  set timeout=2
fi

From:https://www.cnblogs.com/OceanF/p/9837554.html




二、MBR修复:
现象:Reboot and Select proper Boot device or Insert Boot Media in selected Boot device and press a key
两步:1、在磁头上加分区。2、用grub生成MBR和生成grub配置文件。来源参考:https://blog.hostonnet.com/grub-install-warning-this-gpt-partition-label-contains-no-bios-boot-partition-embedding-wont-be-possible
遇到问题分区没有,
怎么在磁盘头部加上分区:
grub-install /dev/sdb Installing for i386-pc platform. grub-install: warning: this GPT partition label contains no BIOS Boot Partition; embedding won't be possible. grub-install

再才是进行grub生成MBR和生成grub配置文件:





https://blog.csdn.net/Strive_For_Future/article/details/120821404


显示无错误,使用sync写入磁盘





AQUOS
Reboot and Select proper Boot device
or Insert Boot Media in selected Boot device and press a key

OHOS
bash-4.28 grub2-install --root-directory=unt/sysimage/deu/sda
Installing for 1386-pc platform.
WARNING: Failed to connect to lunetad. Falling back to device scanning.
WARNING: Failed to connect to lunetad. Falling back to device scanning.
WARNING: Failed to connect to lunetad. Falling back to device scanning.
¿grubZ-Install: warning: this GPT partition label contains no BIOS Boot Partition: en
1 grubz-install: error: embedding is not possible, but this is required for BAID and
(bash-4.28 grubz-install/dev/sda
Installing for 1386-pc platfarm.
agrub2-install: warning: this GPT partition label contains no BIOS Bool
GRUB can only de installen
1 bash-4.24 parted
I bash-4.28 parted /dev/sda print
1 Model: ATA ST950042BAS (scsi)
IDisk /dev/sda: 500GB
3 Sector size (logical/physical): 5128/512B
[Partition Table: gpt
(Disk Flags:
1 Number
Start
End
Size
Pile syst
1049kB
211MB
210MB
fat16
211MB
1285MB 107410 sis
1285MB
SABGB
4996B
sible
Mocklists
discouraged..


I bash-4.20 grubZ-Install--root-directory=/unt/sysimage/dev/sda
Installing for 1386-pc platform.
WARNING: Pailed to connect to lumetad. Falling back to device scanning.
WARNING: Palled to connect to lunetad. Palling back to device scanning.
WARNInG: Palled to connect to Ivnetad. Falling back to device scanning.
1grub?-install: warning: this 6PT partition labe! contains no DiuS toot vartith
igrub2-Install; error: embedding is not possible, but this is required for i
| bash-4.28 grubZ-Install
/dev/sda
i Installing for 1386-pc platform.
¡grub2-Install: warning: this GPT partition label contains no BIOS Boot Pa
GRUB can only be
¡bash-4.21 parted
/dev/sda set 1 bios grub on
I Information: You may need to update retc/istab.
(bash 4.20 parted /dev/sda print
(Model: ATA ST95BB4ZBAS (sCSI)
IDisk /dev/sda: 500GB
?Sector size (logical/physical): 5128/5128
Partition Table: upt
Disk Flags:
1 Number
Start
End
Size
Pile susti
1049kB
2111
ZLAMB
Lat16
211MB
1285MB
107490
sis
1285MB
500GB
49961
IDe
Instar.
(bash-4.20
ub2-install
/dew/sda
1386-pe platform.
shed. No error reparted.

] Started Replay Read-Ahead Data.
Starting Remount Root and Kernel File Systems.
Starting Apply Kernel Variables...
OR
Starting Create Static Device Nodes in /dev.
] Started Remount Root and Kernel File Systems.
Starting dev Coldplug all Devices...
OR
Starting Configure read-only root support...
] Started Journal Service.
OR
] Started Read and set NIS domainname from /etc/sysconf lg network.
OK
Starting Flush Journal to Persistent Storage...
1 Started udev Coldplug all Devices.
DR
Starting dev Wait for Complete Device Initialization..
] Started LUM2 metadata daemon.
] Started Plush Journal to Persistent Storage.
=.
] Started Apply Kernel Variables.
1 Started Configure read-only root support.
Starting Load/Save Random Seed.
1
Ok
OK
1 Started Load/Save Random Seed.
] Started Create Static Device Modes in /dev.
Starting udev Kernel Device Manager...
IL
Ir
OK
] Started udev Kernel Device Manager.
OK
] Created slice system-systemdzdbacklight.slice.
Starting Load/Save Screen Backlight Brightness of backlight:acpi_vldeob...
OR
1 Started Load/Save Screen Backlight Brightness of backlight:acpi_videob.
OR
] Found device /dev/mapper/centosb@-swap.
Activating swap /dev/ mapper/centos@0-swap...
|r
OK
] Activated swap /dev /mapper/centosd0-swap.
Ir
OR
] Reached target Swap.
1〔
OR
] Created slice system-lum2 x2dpuscan.slice.
Starting LUM2 PU scan on device 8:3..
OR
OK
I Found device ST9500420AS 2.
] Started udev Walt for Complete Device Initialization.
Starting Activation of DM RAID sets...
[
OR
] Started Activation of DM RAID sets.
OK
] Reached target Local Encrypted Volumes.
[
OR
] Started Monitoring of LUMZ mirrors, snapshots etc, using dmeventd or progress polling.
OK
J Reached target Local File Systems (Pre),
Mounting /boot...
OK
UK
] Mounted boot.
1 Found device /dev /mapper centosb0-home.
Mounting /home. o•
OK
I Started LUM2 PU scan on device 8:3.
OK
I Mounted /home.
arr] A start job 1s running for dev-disk-bux2duuld-0803 ›2a6470 .device (45s 1min 30s)

(bash-4.21 grubZ-mkconf1g
-D /boot/ef i/EFI/centos/grub.cfg
) Generating grub configuration file
.00
WARNING: Failed to connect to lumetad. Palling back to device scanning.
WARNING: Failed to connect to lumetad. Falling back to device scanning.
Found linux image: /boot/umlinuz-3.10.0-1160.42.2.el7.x86_64
[Found initrd image: /boot/initramfs-3.10.0-1160.42.2.el7.x86_64.ing
I Found linux image: /boot/umlinuz-3.10.0-1160.25.1.el7.x86_64
(Found initrd image: /boot/initramfs-3.10.0-1160.25.1.el7.x86_64.img
( Found linux image: /boot/umlinuz-3.10.0-1160.el7.x86_64
(Found initrd image: /boot/initramfs-3.10.0-1160.el7.x86_64.ing
(Found linux image: /boot/unlinuz-@-rescue-51a66e0b746544209('ed6B073214fd70
I Found initrd image: /boot/initramfs-@-rescue-51a66e074654d209fed68073214 d70. ing
WARMING: Failed to connect to lumetad. Falling back to device scanning.
HARNING: Failed to connect to lunetad. Falling back to device scaming•


https://blog.csdn.net/Strive_For_Future/article/details/120821404

阿阔斯
重新启动并选择正确的启动设备
或将引导媒体插入选定的引导设备,然后按一个键

欧霍斯
bash-4.28 grub2-install --root-directory=unt/sysimage/deu/sda
正在安装 1386-pc 平台。
警告:无法连接到 lunetad。回退到设备扫描。
警告:无法连接到 lunetad。回退到设备扫描。
警告:无法连接到 lunetad。回退到设备扫描。
¿grubZ-安装: 警告: 此 GPT 分区标签不包含 BIOS 启动分区: en
1 grubz-install: 错误: 嵌入是不可能的,但这是 BAID 和
(bash-4.28 grubz-install/dev/sda
安装1386-pc平台农场。
agrub2-install: 警告: 此 GPT 分区标签不包含 BIOS 布尔
GRUB 只能 de installen
1 bash-4.24 分手
I bash-4.28 parted /dev/sda print
1 型号: ATA ST950042BAS (SCSI)
磁盘 /开发/sda: 500GB
3 扇区大小(逻辑/物理):5128/512B
[分区表: gpt
(磁盘标志:
1 数字
开始
结束
大小
桩系统
1049千字节
211兆字节
210兆字节
脂肪16
211兆字节
1285MB 107410 sis
1285兆字节
断续器
4996B
可食用
模拟列表
气馁。。

I bash-4.20 grubZ-Install--root-directory=/unt/sysimage/dev/sda
正在安装 1386-pc 平台。
警告:已暂停以连接到 lumetad。回退到设备扫描。
警告:苍白以连接到lunetad。返回设备扫描。
WARNInG:Palled连接到Ivnetad。回退到设备扫描。
1格鲁布?-安装:警告:这个6PT分区拉贝!不包含 DiuS toot vartith
igrub2-Install;错误:嵌入是不可能的,但这是i所必需的
|bash-4.28 grubZ-Install
/dev/sda
i 安装1386-pc平台。
●grub2-安装:警告:此 GPT 分区标签不包含 BIOS 启动 Pa
GRUB 只能是
■bash-4.21 分手
/dev/sda set 1 bios grub on
I 信息:您可能需要更新 retc/istab。
(bash 4.20 parted /dev/sda print
(型号: ATA ST95BB4ZBAS (sCSI)
磁盘 /开发/sda: 500GB
?扇区大小(逻辑/物理):5128/5128
分区表: upt
磁盘标志:
1 数字
开始
结束
大小
桩苏斯蒂
1049千字节
2111
兹兰姆
拉特16
211兆字节
1285兆字节
107490
妹妹
1285兆字节
500GB
49961
西德;
龄。
(抨击-4.20
ub2-安装
/露水/sda
1386-pe 平台。
棚。未重新出现任何错误。

] 已开始重播预读数据。
启动重新挂载根系统和内核文件系统。
正在启动应用内核变量...

在 /dev 中启动创建静态设备节点。
] 已开始重新挂载根系统和内核文件系统。
正在启动开发 冷插拔所有设备...

正在启动配置只读根用户支持...
] 已启动日记服务。

] 已从 /etc/sysconf lg 网络读取并设置 NIS 域名。
还行
正在启动 Flush 日志到持久性存储...
1 已启动 udev 冷插拔所有设备。
博士
正在启动 dev 等待设备初始化完成。.
] 启动了 LUM2 元数据守护程序。
] 已启动 Plush 日志到持久性存储。
=.
] 已启动应用内核变量。
1 已启动 配置只读根支持。
开始加载/保存随机种子。
1
还行
还行
1 已开始加载/保存随机种子。
] 已开始在 /dev 中创建静态设备模式。
正在启动 udev 内核设备管理器...
伊利诺伊州
红外
还行
] 已启动 udev 内核设备管理器。
还行
] 创建了 slice system-systemdzdbacklight.slice。
启动加载/保存屏幕背光背光亮度:acpi_vldeob...

1 开始加载/保存屏幕背光背光亮度:acpi_videob。

] 找到设备 /dev/mapper/centosb@-swap。
正在激活交换 /dev/ 映射器/centos@0交换...
|r
还行
] 激活的交换 /dev /mapper/centosd0-swap。
红外

] 已达到目标交换。
1〔

] 创建了 slice system-lum2 x2dpuscan.slice。
在设备 8:3 上启动 LUM2 PU 扫描。

还行
我找到了设备ST9500420AS 2。
] 启动了 udev Walt 以进行完整的设备初始化。
正在启动 DM RAID 集的激活...
[

] 已开始激活 DM RAID 集。
还行
] 已到达目标本地加密卷。
[

] 已开始使用 dmeventd 或进度轮询监视 LUMZ 镜像、快照等。
还行
J 已达到目标本地文件系统(预),
正在安装/启动...
还行
英国
] 已装载的启动。
1 找到设备 /dev /mapper centosb0-home.
安装/主页。o•
还行
我在设备上以 8:3 启动了 LUM2 PU 扫描。
还行
我骑/回家。
arr] 为 dev-disk-bux2duuld-0803 ›2a6470 .device 运行的启动作业 1s (45s 1min 30s)

(bash-4.21 grubZ-mkconf1g
-D /boot/ef i/EFI/centos/grub.cfg
) 生成 grub 配置文件
.00
警告:无法连接到 lumetad。返回设备扫描。
警告:无法连接到 lumetad。回退到设备扫描。
找到 linux 映像: /boot/umlinuz-3.10.0-1160.42.2.el7.x86_64
[找到的 initrd 映像: /boot/initramfs-3.10.0-1160.42.2.el7.x86_64.ing
我发现 linux 映像: /boot/umlinuz-3.10.0-1160.25.1.el7.x86_64
(在 iitrd 映像中找到: /boot/initramfs-3.10.0-1160.25.1.el7.x86_64.img
( Found linux image: /boot/umlinuz-3.10.0-1160.el7.x86_64
(在 iitrd 映像中找到:/boot/initramfs-3.10.0-1160.el7.x86_64.ing
(找到 linux 映像: /boot/unlinuz-@-rescue-51a66e0b746544209('ed6B073214fd70
我找到了initrd映像:/boot/initramfs-@-rescue-51a66e074654d209fed68073214 d70。wn9
WARMING:无法连接到 lumetad。回退到设备扫描。
哈宁:无法连接到 lunetad。回退到设备诈骗•



参考:https://blog.csdn.net/qq_28641401/article/details/99428192
https://cloud.tencent.com/developer/article/1499344
路径含有空格导致误删文件
史上最经典的要数下面这个bumblebee项目了,这个项目本来不出名,不过,程序在其安装脚本install.sh里的一个bug让这个项目一下子成了全世界最瞩目的项目。



那我们该如何防范这种问题呢?

(1)良好的编程习惯:变量加引号防止扩展

path="/usr/local /sbin"

# rm -rf $path

rm -rf "$path"



那我们该如何防范这种问题呢?

(1)良好的编程习惯:变量加引号防止扩展

rm -rf "~"

(2)如果不确定,删除之前 echo 或 find 一下,看变量被扩展成啥了

echo rm -rf "~"

rm -rf ~

echo rm -rf ~

rm -rf /home/work



cd 切换目录失败,导致文件被误删

cd ooxx_path_not_exsit

rm -rf *.exe


5、终极解决方案



不要使用 root 操作系统资源,这样至少不会删除系统文件。

6、在登录 shell 下使用友好的提示符

友好的命令提示符能时刻提醒操作者当前在哪个路径下,避免错误的路径下操作文件。


来自:https://mp.weixin.qq.com/s/_aRRFK4fwnp4uSLQ4tOOhA
#VAR1="2323232"
#VAR2="VAR1"

#eval echo \$$VAR2
2323232
这个用法的确可行,但是看起来十分的不舒服,很难只管的去理解,我们并不推荐。而且事实上我们本身就不推荐使用eval这个命令。
比较舒服的写法是下面这样:
#echo ${!VAR2}
2323232

From:
https://mp.weixin.qq.com/s/U1KirpXB4G82mqa0H9ylKQ


二)Centos安装shellcheck的方法
shellcheck
shellcheck是用来检查shell脚本的工具。
采用haskell语言开发。
在ubuntu中,可以直接采用apt install shellcheck安装完成
但是在Centos,yum是没有shellcheck的包的,因此,需要另一种方法安装

Centos安装shellcheck
由于shellcheck是haskell语言开发的,

因此,会想到使用haskell的包管理工具cabal来安装。

yum install cabal-install
这样,就可以使用cabal install 来安装东西了

在cabal install shellcheck之前还有些功夫要做。

注意,以下指令都会安装在~/.cabal/bin目录下

cabal update
cabal install cabal
cabal install shellcheck
cabal install cabal的意思是安装必要的cabal库,否则安装shellcheck时会报错,必须的。

有意思的是,在A用户安装了以上的东西,
su到B用户,以上的步骤还得来一次,呵呵

来自:https://www.cnblogs.com/wenxingxu/p/9547611.html
https://www.cnblogs.com/zqb-all/p/10054594.html
当我们需要删除Chrome历史记录时,打开chrome://history页面会发现,没有全选按钮,如果要删除的历史记录较多,简直要崩溃了。

由于这个页面chrome://history采用了自定义标签,导致不能在控制台通过document.getElement...的方式批量选择需要删除的条目。

其实在这个页面是有个隐藏的全选功能的,具体如下

勾选一个要删除的记录
按住shift
滚动到页面底部
再勾选一个要删除的记录
然后会发现两个勾选记录中的所有的条目都被选中了
点击删除,大功告成

来自:http://www.jouypub.com/2018/49cc99d7432638bcfa3a79b51ea51475/
#cat stdouterr.c


解答:这段代码的输出是什么呢?你可以快速的将代码敲入你电脑上(当然,拷贝更快),然后发现输出是
World!Hello
果然:
./stdouterr
World!Hello

这是为什么呢?在默认情况下,stdout是行缓冲的,他的输出会放在一个buffer里面,只有到换行的时候,才会输出到屏幕。而stderr是无缓冲的,会直接输出,举例来说就是printf(stdout, "xxxx") 和 printf(stdout, "xxxx\n"),前者会憋住,直到遇到新行才会一起输出。而printf(stderr, "xxxxx"),不管有么有\n,都输出。


stdout憋住,证明换行才会输出:
#cat stdouterr.c


#./stdouterr
Hello Hello   #stdout换行输出
World! Hello  #World!是stderr输出,会立即输出,在它上面Hello的前面输出。



make stdouterr
cc     stdouterr.c   -o stdouterr

./stdouterr
Can't open it!
Can't open it!
Can't open it!


./stdouterr > tmp.txt              
Can't open it!

这3句效果不是一样啊,有什么区别吗?

有区别。
stdout -- 标准输出设备 (printf("..")) 同 stdout。
stderr -- 标准错误输出设备
两者默认向屏幕输出。
但如果用转向标准输出到磁盘文件,则可看出两者区别。stdout输出到磁盘文件,stderr在屏幕。


cat tmp.txt
Can't open it!
Can't open it!



实践来自:https://blog.csdn.net/qingzhuyuxian/article/details/80391143
systemctl status rpcbind -l
● rpcbind.service - RPC bind service
   Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled)
   Active: failed (Result: start-limit) since Wed 2019-06-12 22:54:51 CST; 27min ago
  Process: 7679 ExecStart=/sbin/rpcbind -w $RPCBIND_ARGS (code=exited, status=0/SUCCESS)
Main PID: 7680 (code=exited, status=1/FAILURE)

Jun 12 22:54:51 mother_virtualbox_bj_sjs_10_10_0_108 systemd[1]: Starting RPC bind service...
Jun 12 22:54:51 mother_virtualbox_bj_sjs_10_10_0_108 systemd[1]: Started RPC bind service.
Jun 12 22:54:51 mother_virtualbox_bj_sjs_10_10_0_108 rpcbind[7680]: cannot get uid of 'rpc': Success
Jun 12 22:54:51 mother_virtualbox_bj_sjs_10_10_0_108 systemd[1]: rpcbind.service: main process exited, code=exited, status=1/FAILURE
Jun 12 22:54:51 mother_virtualbox_bj_sjs_10_10_0_108 systemd[1]: Unit rpcbind.service entered failed state.
Jun 12 22:54:51 mother_virtualbox_bj_sjs_10_10_0_108 systemd[1]: rpcbind.service failed.
Jun 12 22:54:51 mother_virtualbox_bj_sjs_10_10_0_108 systemd[1]: start request repeated too quickly for rpcbind.service
Jun 12 22:54:51 mother_virtualbox_bj_sjs_10_10_0_108 systemd[1]: Failed to start RPC bind service.
Jun 12 22:54:51 mother_virtualbox_bj_sjs_10_10_0_108 systemd[1]: rpcbind.service failed.




先删除rpcbind

rpm –e –nodeps rpcbind

再重新安装一次

yum install rpcbind



http://www.it610.com/article/4385613.htm

Linux 下修改用户的UID和所在组的GID实践如下:


useradd  jackX -u 798
usermod -u 863 jackX
groupmod -g 863 www



修改UID
Usage:

usermod -u NEW-UID username
1
Examples:

## original UID is 1007
root@pts/0 $ id newjames
uid=1007(newjames) gid=1008(james) 组=1008(james)

## change 1007 to 2007
root@pts/0 $ usermod -u 2007 newjames

## modified to 2007
root@pts/0 $ id newjames
uid=2007(newjames) gid=1008(james) 组=1008(james)

修改GID/group-name
Usage:

groupmod -g NEW-GID groupname
1
Examples:

## james to newjames, but james's group is still 'james'
root@pts/0 $ groupmod -g 2007 newjames
groupmod:“newjames”组不存在

root@pts/0 $ id newjames
uid=2007(newjames) gid=1008(james) 组=1008(james)

root@pts/0 $ groupmod -g 2007 james


修改群组名称:
## try to rename group

root@pts/0 $ groupmod --help
用法:groupmod [选项] 组

选项:
  -g, --gid GID                 将组 ID 改为 GID
  -h, --help                    显示此帮助信息并推出
  -n, --new-name NEW_GROUP      改名为 NEW_GROUP
  -o, --non-unique              允许使用重复的 GID
  -p, --password PASSWORD   将密码更改为(加密过的) PASSWORD
  -R, --root CHROOT_DIR         chroot 到的目录


root@pts/0 $ groupmod -n newjamesgroup james


## find that group was renamed
root@pts/0 $ id newjames
uid=2007(newjames) gid=1008(newjamesgroup) 组=1008(newjamesgroup)


## try to change GID
root@pts/0 $ groupmod -g 2007 james

root@pts/0 $ id newjames
uid=2007(newjames) gid= 2007(newjamesgroup) 组= 2007(newjamesgroup)


修改用户名称
Usage:

usermod -l login-name old-name
1
修改用户的名称 old-name 改成 login-name,别的都没有改变。其实我们也应该考虑是否把用户的HOME目录也改成新的用户。

另外这里有个问题需要注意

如果出现如下报错

root@pts/0 $ usermod -l newjames james
usermod: user James is currently used by process 12345
1
2
说明有用james用户运行的程序,需要把相关的程序停掉之后再执行上面的命令

Examples:

## add user 'james' for test
root@pts/0 $ useradd james

## check original id
root@pts/0 $ id james
uid=1007(james) gid=1008(james) 组=1008(james)

## check HOME directory
root@pts/0 $ ls -ld /home/james/
drwx------ 2 james james 4096 12月 23 11:46 /home/james/

## try to change or rename and verify
root@pts/0 $ usermod -l newjames james

root@pts/0 $ id james
id: james: no such user

root@pts/0 $ id newjames
uid=1007(newjames) gid=1008(james) 组=1008(james)


## check HOME folder
root@pts/0 $ ls -ld /home/james/
drwx------ 2 newjames james 4096 12月 23 11:46 /home/james/

root@pts/0 $ ls -ld /home/newjames
ls: 无法访问/home/newjames: 没有那个文件或目录
Dev-web-solr [~] 2016-12-23 11:47:22

从上面可以看出,变化只仅仅是username,UID/GUID/HOME目录都没有改变
---------------------

原文:https://blog.csdn.net/eagle5063/article/details/53842528
使用注册表
当然,大家也可以更改注册表配置来实现 Windows 10 自动登录,步骤如下:

1 在运行中执行 regedit 打开注册表

2 浏览到如下路径:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
3 在右侧窗口中找到名为 AutoAdminLogon 的字符串值,并将其设置为 1

AutoAdminLogon

4 在右侧窗口中找到名为 DefaultUserName 的字符串值,在里面填入要自动登录的默认账户

DefaultUserName

5 在右侧窗口中找到名为 DefaultPassword 的字符串值(如果没有就新建一个),将其值设置为所选账号的默认密码。

DefaultPassword

注册表更改完成后,下次重启 Windows 10 就会无需密码自动登录了。以上两种方式我都测试过,可以正常使用。相对来说比较推荐大家使用第一种方式,配置起来比较简单。


来自:https://www.sysgeek.cn/auto-login-windows-10/
我先把光标停留在第一行上,按下yy命令,将第一行复制,然后再移到第二行,按下dd命令,删除第二行。此时如果我们想要粘贴第一行的内容的话,直接按p是不行的,因为此时的p将引用无名寄存器中的内容,而它的内容已经被第二行的内容给覆盖了,所以此时就轮到复制专用寄存器大显身手了,此时如果按下这个命令:
"0p
这时,将会粘贴复制专用寄存器中的内容。这里直接贴结果图可能看不出什么效果,那我就贴一下用dd删除了第二行后所有寄存器的内容给大家看看吧:
  l  ""   ddline^J     当前寄存器是",里存的是删除的内容。
  l  "0   yyline^J     0 是复制专用寄存器

从这里可以看出,无名寄存器保存的是dd命令删除的内容,而复制专用寄存器(0)保存的是y命令复制的内容。
"0p 就能打印出yyline,而直接p就会打印删的内容ddline。



阅读全文
find . -name "jack.txt" -exec vim {} \;    # 这个没有问题

s |xargs vim
Vim: Warning: Input is not from a terminal   #终端卡了,应该是标准输入被截断了。
3 files to edit



失败:
find . -name "jackxiang.txt" |vim -  #里面是文件名,不是读取文件。
=======================================

vim 本身没有直接从 stdin 读入信息。而 - 参数相当于一个开关,表示从标准输入读入信息。而管道的功能就是把前一个程序的 stdout 作为下一个程序的 stdin

Many commands use a hyphen (-) in place of a filename as an argument to indicate when the input should come from stdin rather than a file.

man vim
- The file to edit is read from stdin. Commands are read from stderr, which should be a tty.

Cmd | vim -
参考 VIM USER MANUAL 26.4 Using Vim from a shell script
cmd | vim -
- 表示vim开启从stdin读数据  #我想作为文件名传入呢???
====================================================================================

ls | xargs vim # 同时打开多个文件
:n [file_name] #切换文件





From:https://www.v2ex.com/t/61163
分页: 11/339 第一页 上页 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 下页 最后页 [ 显示模式: 摘要 | 列表 ]