路径含有空格导致误删文件
史上最经典的要数下面这个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/
vimdiff 的优势在于能同时查看各个文件的差别,而:
vimdiff *   则对整个目录的文件进行比对,如果复制:
yy 后再control+w(w按两次)跳到另一个文件里按p粘贴上去,
发现原来那行不需要了,于是得dd删掉,而此时再通过control+w(w按两次)到第仨文件,再按p时,则是粘贴的内容是刚删的那行内容,怎么办?



用寄存器:
a-z26个命名寄存器中的a即可,如下:
可以用"{register}y来拷贝到{register}中, 用"{register}p来粘贴{register}中的内容。

实践:
"ayy可以拷贝当前行到寄存器a中,而"ap则可以粘贴寄存器a中的内容。

结论:合理地使用可以极大地提高效率。


===========================================================================
"+p可以粘贴剪切板的内容,
":p可以粘贴上一个Vim命令(比如你刚刚费力拼写的正则表达式),
"/p可以粘贴上一次搜索关键词(你猜的没错,正是normal模式下的/foo搜索命令)。
在Vim中可通过:reg来查看每个寄存器当前的值。


来自:https://harttle.land/2016/07/25/vim-registers.html
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
说明:Keka支持解压和压缩,基本这个软件全部格式都搞定。
下载:
(链接: https://pan.baidu.com/s/1kVmsj8z 密码: pydh)

官方网站:https://www.keka.io/en/

https://www.keka.io/en/


Keka,使用 p7zip(7-zip 在类 UNIX 系统上的移植版本)压缩内核。经年累月,在美丽优雅的 Mac 平台上,你一如既往,霸道地,丑!Keka 不光丑,压缩要用手,文件拖图标,很难不粗口。
语言已经不能表达我对这款软件的畏惧(珍爱视力,拒绝 Keka 的软件截图)。基本上,它只有三项优势,就是免费,免费和免费。支持压缩:7z, Zip, Tar, Gzip, Bzip2。支持解压:RAR, 7z, Lzma, Zip, Tar, Gzip, Bzip2, ISO, EXE, CAB, PAX, ACE (PPC)。雪豹系统可以加入右键菜单。
Docker里的php-fpm 错误日志级别由notice修改为warning 不指定,原因是默认的notice日志太多关于PHP-FPM接受设置的请求数后通出的notice:
[24-May-2019 16:22:58] NOTICE: [pool www] child 281 exited with code 0 after 5.861800 seconds from start
[24-May-2019 16:22:58] NOTICE: [pool www] child 282 started
[24-May-2019 16:23:01] NOTICE: [pool www] child 282 exited with code 0 after 2.919651 seconds from start
[24-May-2019 16:23:01] NOTICE: [pool www] child 283 started




1、php-fpm 错误日志

#默认位置 安装目录下的 log/php-fpm.log  
error_log = log/php-fpm.log  

#错误级别 alert(必须立即处理), error(错误情况), warning(警告情况), notice(一般重要信息), debug(调试信息). 默认: notice.
log_level = notice


来自:https://www.cnblogs.com/siqi/p/3656823.html
yum install lshw
lshw 这个命令是一个比较通用的工具,它可以详细的列出本机的硬件信息。但这个命令并非所有的发行版都有,比如 Fedora 就默认没有,需要自己安装。

lshw 可以从各个 /proc 文件中提取出硬件信息,比如:CPU、内存、usb 控制器、硬盘等。如果不带选项的话,列出的信息将很长,加上 -short 选项时,将只列出概要信息。

lshw -short
H/W path            Device      Class      Description
======================================================
                                system     NF5280M2 (To Be Filled By O.E.M.)
/0                              bus        2U
/0/0                            memory     64KiB BIOS
/0/4                            processor  Xeon (To Be Filled By O.E.M.)
/0/4/5                          memory     256KiB L1 cache
/0/4/6                          memory     1MiB L2 cache
/0/4/7                          memory     12MiB L3 cache
/0/8                            processor  Xeon (To Be Filled By O.E.M.)
/0/8/9                          memory     256KiB L1 cache
/0/8/a                          memory     1MiB L2 cache


lspci 列出所有 PCI 总线,以及与 PCI 总线相连的所有设备的详细信息,比如 VGA 适配器、显卡、网络适配器、usb 端口、SATA 控制器等。
lspci
00:00.0 Host bridge: Intel Corporation 5520 I/O Hub to ESI Port (rev 22)
00:01.0 PCI bridge: Intel Corporation 5520/5500/X58 I/O Hub PCI Express Root Port 1 (rev 22)
00:03.0 PCI bridge: Intel Corporation 5520/5500/X58 I/O Hub PCI Express Root Port 3 (rev 22)
00:07.0 PCI bridge: Intel Corporation 5520/5500/X58 I/O Hub PCI Express Root Port 7 (rev 22)
00:09.0 PCI bridge: Intel Corporation 7500/5520/5500/X58 I/O Hub PCI Express Root Port 9 (rev 22)
00:13.0 PIC: Intel Corporation 7500/5520/5500/X58 I/O Hub I/OxAPIC Interrupt Controller (rev 22)
00:14.0 PIC: Intel Corporation 7500/5520/5500/X58 I/O Hub System Management Registers (rev 22)


lsusb 列出与本机相连的所有 USB 设备的信息。默认情况下,只列出概要信息,使用 -v 选项可以列出每一个 USB 口的详细信息。

lspci
00:00.0 Host bridge: Intel Corporation 5520 I/O Hub to ESI Port (rev 22)
00:01.0 PCI bridge: Intel Corporation 5520/5500/X58 I/O Hub PCI Express Root Port 1 (rev 22)
00:03.0 PCI bridge: Intel Corporation 5520/5500/X58 I/O Hub PCI Express Root Port 3 (rev 22)
00:07.0 PCI bridge: Intel Corporation 5520/5500/X58 I/O Hub PCI Express Root Port 7 (rev 22)
用ls直接显示文件名称和grep -rl .一样,
man ls 之后 你 /-1 搜索 , -1     list one file per line :
ls -1

/tmp/yaml
$ls -1
jack.txt
jackxiang.txt
xiang.txt

/tmp/yaml
$for i in $(ls -1); do echo $i;cat $i;done
jack.txt
jack
jackxiang.txt
jackxiang
xiang.txt
xiang

加一个换行:
for i in `ls -1`;do echo $i;cat $i;echo;done


     在Linux系统中/tmp文件夹下的文件是会被清理、删除的,文件清理的规则是如何设定的呢? 以Redhat为例,这个主要是因为作业里面会调用tmpwatch命令删除那些一段时间没有访问的文件。

那么什么是tmpwatch呢?其实tmpwatch是一个命令或者说是一个包。如下所示

tmpwatch - removes files which haven’t been accessed for a period of time

[root@DB-Server ~]# rpm -qa | grep tmpwatch
tmpwatch-2.9.7-1.1.el5.5
[root@DB-Server ~]# whereis tmpwatch
tmpwatch: /usr/sbin/tmpwatch /usr/share/man/man8/tmpwatch.8.gz
[root@DB-Server ~]# file /usr/sbin/tmpwatch
/usr/sbin/tmpwatch: ELF 64-bit LSB executable, AMD x86-64, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped
[root@DB-Server ~]#

关于tmpwatch命令的参数,不同版本可能有所不同,下面以Red Hat Enterprise Linux Server release 5.7下TMPWATCH(8)为列

作用:

删除一段时间没有被访问的文件。

参数:

-u 按照文件的最后access时间,即最后访问时间为参考。默认选项。可通过ls -lu查看。

-m 按照文件的最后modified时间,即最后修改时间为参考。可通过ls -l查看。

-c 按照文件的-ctime时间做参考,ctime更新的条件为写入、更改属主、权限。可通过ls -lc查看。

-M 按照目录的修改时间来删除目录而不是访问时间。

-a 删除所有类型文件。包括目录和symbolic links

-d --nodirs 排除目录文件,即使是空目录。

-d --nosysmlinks 排除symbolic links类型文件。

-f 强制删除那些root没有写权限的文件。比如root的readonly文件

-q 只报告错误信息。

-x /PATH 排除特定目录,即不删除该子目录里的文件。

-U user_name 排除属于特定用户的文件,即不删除该用户的文件。

-v 显示删除过程。默认是不显示删除了什么文件,直接删除的。

-t 用于测试,并不真正删除文件,能显示出要删除文件的过程。

-d 不删除文件里的子目录,但是子目录里面的文件还是会被删除。



参数后加时间,默认是hours。也可以使用30d表示30天,但是有些版本只支持hours。 时间后是要检查的目录。可以多个目录用空格分开。如下所示表示720小小时~=30天。

[root@DB-Server ~]#  more /etc/cron.daily/tmpwatch
flags=-umc
/usr/sbin/tmpwatch "$flags" -x /tmp/.X11-unix -x /tmp/.XIM-unix \
        -x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix \
        -X '/tmp/hsperfdata_*' 240 /tmp
/usr/sbin/tmpwatch "$flags" 720 /var/tmp
for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}; do
    if [ -d "$d" ]; then
        /usr/sbin/tmpwatch "$flags" -f 720 "$d"
    fi
done
[root@DB-Server ~]#

如果你想将强制删除30天没有访问的文件改为7天,只需"/usr/sbin/tmpwatch "$flags" 720 /var/tmp"和"/usr/sbin/tmpwatch "$flags" -f 720 "$d" 里面的720改为189即可。

来自:http://www.cnblogs.com/kerrycode/p/5759941.html


==========================实践================================
rpm -qa | grep tmpwatch
tmpwatch-2.9.16-6.el6.x86_64

whereis tmpwatch
tmpwatch: /usr/bin/tmpwatch /usr/sbin/tmpwatch /usr/share/man/man8/tmpwatch.8.gz

cat /etc/cron.daily/tmpwatch
#! /bin/sh
flags=-umc
/usr/sbin/tmpwatch "$flags" -x /tmp/.X11-unix -x /tmp/.XIM-unix \
        -x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix \
        -X '/tmp/hsperfdata_*' -X '/tmp/.hdb*lock' -X '/tmp/.sapstartsrv*.log' \
        -X '/tmp/pymp-*' 10d /tmp
/usr/sbin/tmpwatch "$flags" 30d /var/tmp
for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}; do
    if [ -d "$d" ]; then
        /usr/sbin/tmpwatch "$flags" -f 30d "$d"
    fi
done
分页: 1/265 第一页 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 下页 最后页 [ 显示模式: 摘要 | 列表 ]