[实践OK]CentOS8下ssh登陆出现[error] character map file `UTF-8' not found: No such file or directory
Unix/LinuxC技术 jackxiang 2021-2-3 17:55
问题:
rpm -qa *langpack*
cat /etc/locale.conf
LC_ALL="zh_CN.utf8"
LC_CTYPE="zh_CN.utf8"
LANG="zh_CN.utf8"
解决办法:
yum install glibc-langpack-zh -y
rpm -qa *langpack*
cat /etc/locale.conf
LC_ALL="zh_CN.utf8"
LC_CTYPE="zh_CN.utf8"
LANG="zh_CN.utf8"
解决办法:
yum install glibc-langpack-zh -y
一、现象
Linux关机或重启时提示A stop job is running for ..
导致关机慢。
二、解决方法
编辑/etc/systemd/system.conf
修改下面两个变量为:
DefaultTimeoutStartSec=10s
DefaultTimeoutStopSec=10s
执行:systemctl daemon-reload
来自:https://blog.csdn.net/penge199761/article/details/79136826
Linux关机或重启时提示A stop job is running for ..
导致关机慢。
二、解决方法
编辑/etc/systemd/system.conf
修改下面两个变量为:
DefaultTimeoutStartSec=10s
DefaultTimeoutStopSec=10s
执行:systemctl daemon-reload
来自:https://blog.csdn.net/penge199761/article/details/79136826
[实践OK]用c语言的语法逻辑进行判断是不是质数的重构逻辑学习。
Unix/LinuxC技术 jackxiang 2021-1-14 10:53
质数定义:只有1和它本身两个约数,除此之外再没有其它约数。
示例1:
make zs
cc zs.c -o zs
#./zs
质数
示例2:
for循环介入:
引入scanf:
#./zs
5
质数
#./zs
6
合数
打印出约数:
#./zs
5
质数
#./zs
6
2 3 合数
更快一点,引入break:
#./zs
6
合数
#./zs
1000
合数
任一大于2的偶数都可以写成两个质数之和,采用部分穷举法,可以从1-100,1-10000啥的,但无法穷举所有:
#./zs
100
4=2+2
6=3+3
8=3+5
10=3+7
12=5+7
14=3+11
16=3+13
18=5+13
20=3+17
22=3+19
24=5+19
26=3+23
28=5+23
30=7+23
32=3+29
34=3+31
36=5+31
...
示例1:
make zs
cc zs.c -o zs
#./zs
质数
示例2:
for循环介入:
引入scanf:
#./zs
5
质数
#./zs
6
合数
打印出约数:
#./zs
5
质数
#./zs
6
2 3 合数
更快一点,引入break:
#./zs
6
合数
#./zs
1000
合数
任一大于2的偶数都可以写成两个质数之和,采用部分穷举法,可以从1-100,1-10000啥的,但无法穷举所有:
#./zs
100
4=2+2
6=3+3
8=3+5
10=3+7
12=5+7
14=3+11
16=3+13
18=5+13
20=3+17
22=3+19
24=5+19
26=3+23
28=5+23
30=7+23
32=3+29
34=3+31
36=5+31
...
[要实践么]macOS Big Sur 可写模式挂载root
Unix/LinuxC技术 jackxiang 2020-11-26 10:27
背景:[实践OK]Macbook 升级到catalina 后的一些/data目录不见了等问题
:https://jackxiang.com/post/10397/,现在升级后,这个玩法被苹果给屏蔽更深了,怎么办?有人做这个,我不太敢接着搞下去了:
Big Sur 新增了 Signed System Volume 机制,对系统所在的 APFS Volume 增加了更多的保护
Reboot into recovery mode and run:重启mac,按住Command+R,等到系统进入安全模式。
命令 csrutil disable ,sur还得加上这个:
csrutil authenticated-root disable
Reboot back into MacOS #正常重启进入系统
Find your root mount's device - run mount and chop off the last s, e.g. if your root is /dev/disk1s5s1, you'll mount /dev/disk1s5
Create a new directory, for example ~/mount
Run:sudo mount -o nobrowse -t apfs /dev/disk1s5 ~/mount ,我这想:sudo mount -o nobrowse -t apfs /dev/disk1s5 /var/data
/dev/disk1s5s1 :https://iosre.com/t/big-sur/18051
升级到Big Sur后,以写模式挂载root报错(SIP已disable)
sudo mount -uw /
mount_apfs: volume could not be mounted: Permission denied
mount: / failed with 66
Big Sur 新增了 Signed System Volume 机制,对系统所在的 APFS Volume 增加了更多的保护
Reboot into recovery mode and run:
csrutil authenticated-root disable
Reboot back into MacOS
Find your root mount's device - run mount and chop off the last s, e.g. if your root is /dev/disk1s5s1, you'll mount /dev/disk1s5
Create a new directory, for example ~/mount
Run:sudo mount -o nobrowse -t apfs /dev/disk1s5 ~/mount
Modify the files under the mounted directory
Run:sudo bless --folder MOUNT_PATH/System/Library/CoreServices --bootefi --create-snapshot
Reboot your system, and the changes will take place
缺点:
修改后,无法再启用SSV机制,但是可以启用SIP机制,因为系统已修改,导致签名不一致,若启用SSV,则校验失败,报错禁止启动。
csrutil enable
csrutil authenticated-root disable
Big Sur 引入的 Signed System Volume 机制会给 System APFS Volume 的每个文件 /文件夹都设置一份 hash,在 bootloader 启动后,加载内核前会进行完整性校验,校验不通过的话会拒绝引导,并提示用户重装 macOS 。使用 mount 查看挂载点会发现 /多了个 sealed 标志。系统默认会从 SSV snapshot 启动,对用户无感知。
Big Sur’s Signed System Volume: added security protection
来自:https://www.quwenqing.com/archives/1597.html
:https://jackxiang.com/post/10397/,现在升级后,这个玩法被苹果给屏蔽更深了,怎么办?有人做这个,我不太敢接着搞下去了:
Big Sur 新增了 Signed System Volume 机制,对系统所在的 APFS Volume 增加了更多的保护
Reboot into recovery mode and run:重启mac,按住Command+R,等到系统进入安全模式。
命令 csrutil disable ,sur还得加上这个:
csrutil authenticated-root disable
Reboot back into MacOS #正常重启进入系统
Find your root mount's device - run mount and chop off the last s, e.g. if your root is /dev/disk1s5s1, you'll mount /dev/disk1s5
Create a new directory, for example ~/mount
Run:sudo mount -o nobrowse -t apfs /dev/disk1s5 ~/mount ,我这想:sudo mount -o nobrowse -t apfs /dev/disk1s5 /var/data
/dev/disk1s5s1 :https://iosre.com/t/big-sur/18051
升级到Big Sur后,以写模式挂载root报错(SIP已disable)
sudo mount -uw /
mount_apfs: volume could not be mounted: Permission denied
mount: / failed with 66
Big Sur 新增了 Signed System Volume 机制,对系统所在的 APFS Volume 增加了更多的保护
Reboot into recovery mode and run:
csrutil authenticated-root disable
Reboot back into MacOS
Find your root mount's device - run mount and chop off the last s, e.g. if your root is /dev/disk1s5s1, you'll mount /dev/disk1s5
Create a new directory, for example ~/mount
Run:sudo mount -o nobrowse -t apfs /dev/disk1s5 ~/mount
Modify the files under the mounted directory
Run:sudo bless --folder MOUNT_PATH/System/Library/CoreServices --bootefi --create-snapshot
Reboot your system, and the changes will take place
缺点:
修改后,无法再启用SSV机制,但是可以启用SIP机制,因为系统已修改,导致签名不一致,若启用SSV,则校验失败,报错禁止启动。
csrutil enable
csrutil authenticated-root disable
Big Sur 引入的 Signed System Volume 机制会给 System APFS Volume 的每个文件 /文件夹都设置一份 hash,在 bootloader 启动后,加载内核前会进行完整性校验,校验不通过的话会拒绝引导,并提示用户重装 macOS 。使用 mount 查看挂载点会发现 /多了个 sealed 标志。系统默认会从 SSV snapshot 启动,对用户无感知。
Big Sur’s Signed System Volume: added security protection
来自:https://www.quwenqing.com/archives/1597.html
linux tmux/screen rz/sz 文件卡死快速退出方法
Unix/LinuxC技术 jackxiang 2020-10-12 23:49
linux tmux/screen rz/sz 文件卡死快速退出方法
按住Ctrl键, 再按五次x键 (强行终断传输)
怎么在screen下用rz/sz传输文件?
screen 可以用zmodem模式传输文件
同时按 CTRL和A键 然后输入 :zmodem pass
回车即可
tmux 未找到rz/sz传输文件办法
From:https://blog.csdn.net/qq_34104669/article/details/105231853
按住Ctrl键, 再按五次x键 (强行终断传输)
怎么在screen下用rz/sz传输文件?
screen 可以用zmodem模式传输文件
同时按 CTRL和A键 然后输入 :zmodem pass
回车即可
tmux 未找到rz/sz传输文件办法
From:https://blog.csdn.net/qq_34104669/article/details/105231853
管道菜单“/usr/bin/obamenu”的输出无效
Unix/LinuxC技术 jackxiang 2020-9-29 15:06
Linux shell 获取目录下时间最新的文件的文件名
Unix/LinuxC技术 jackxiang 2020-9-28 17:27
ls -lt /dirname/ | grep filename | head -n 1 |awk '{print $9}'
逐条解释:
ls -lt /dirname/
列出此目录下的所有文件并按照时间先后排序
grep filename
过滤出包含关键字的文件
head -n 1
查看排名第一的文件
awk '{print $9}'
打印出第九字段,此处为文件名
来自:https://www.cnblogs.com/echo-valley/p/8268527.html
[实践OK]mac 终端粘贴 URL 反斜杠的问题,Term 2 的自动转义,不喜欢应该可以关掉。
Unix/LinuxC技术 jackxiang 2020-7-13 14:50
最近几天我在 mac 命令终端下粘贴 URL 出现了反斜杠,带&符号的就会在前面出现一个反斜杠
有人遇到么?怎么解决?
那是 oh-my-zsh 的 feature ,不是 bug ,见:
参考: http://stackoverflow.com/questions/25614613/how-to-disable-autocomplete-with-backslak-in-zsh
如果你不想看到这个反斜杠,就在粘贴网址之前打一个引号,单引号就行,粘贴完再打一个:
1)直接粘贴:
~/scdh2020/public master http://partner.xxx.xxxx.com/scdh2020/index.php\?name\=xiangdong
2)先加一个单引号或者双引号直接粘贴,还是会有反斜杠:
"http://partner.xxx.xxxx.com/scdh2020/index.php\?name\=xiangdong
3)自己输入是正常的。但是我想要粘贴也没有反斜杠怎么办?
成功解决办法:
在`~/.zshrc`中加入一句`ISABLE_MAGIC_FUNCTIONS=true`(需要放在 source $ZSH/oh-my-zsh.sh 前面)
vi ~/.zshrc
DISABLE_MAGIC_FUNCTIONS=true
source $ZSH/oh-my-zsh.sh
有人遇到么?怎么解决?
那是 oh-my-zsh 的 feature ,不是 bug ,见:
参考: http://stackoverflow.com/questions/25614613/how-to-disable-autocomplete-with-backslak-in-zsh
如果你不想看到这个反斜杠,就在粘贴网址之前打一个引号,单引号就行,粘贴完再打一个:
1)直接粘贴:
~/scdh2020/public master http://partner.xxx.xxxx.com/scdh2020/index.php\?name\=xiangdong
2)先加一个单引号或者双引号直接粘贴,还是会有反斜杠:
"http://partner.xxx.xxxx.com/scdh2020/index.php\?name\=xiangdong
3)自己输入是正常的。但是我想要粘贴也没有反斜杠怎么办?
成功解决办法:
在`~/.zshrc`中加入一句`ISABLE_MAGIC_FUNCTIONS=true`(需要放在 source $ZSH/oh-my-zsh.sh 前面)
vi ~/.zshrc
DISABLE_MAGIC_FUNCTIONS=true
source $ZSH/oh-my-zsh.sh
[实践OK]secureCRT拖动上传,SFTP拖动上传文件到家目录。
Unix/LinuxC技术 jackxiang 2020-7-1 15:51
secureCRT拖动上传,SFTP拖动上传文件到家目录:
https://blog.csdn.net/kxj19980524/article/details/85246778
https://blog.csdn.net/kxj19980524/article/details/85246778
[实践OK]ps在FreeBSD中截断的列宽,linux ps命令显示完整命令。
Unix/LinuxC技术 jackxiang 2020-6-29 23:23
一)ps在FreeBSD中截断的列宽:
ps aux | grep php
在zsh中,例如,输出
root 50282 0.0 1.4 49512 29584 - Ss 23:03 0:00.05 php-fpm: master process (/usr/local/
您可以看到它在屏幕上运行并在结束时被截止.
在FreeBSD中,如何查看完整输出?
最佳答案 使用-w选项(必要时重复).尝试:
ps auxwww|grep php
root 50282 0.0 1.4 49512 29584 - Ss 23:03 0:00.06 php-fpm: master process (/usr/local/php7/etc/php-fpm.conf) (php-fpm)
有关更多信息,请参见the manual page
二)linux ps命令显示完整命令:
在linux上执行ps命令,输出往往被截断
ps -f -p5457
UID PID PPID C STIME TTY TIME CMD
root 5457 5449 0 4月26 pts/1 00:00:00 Worker***: master process start_file=/data/www/manage.**
可以使用以下形式,显示完整的命令
ps -w -w -f -p5457
UID PID PPID C STIME TTY TIME CMD
root 5457 5449 0 4月26 pts/1 00:00:00 Worker***: master process start_file=/data/www/manage.****.***.cn/********/GatewayWorker/start.php
或者
ps -f -p5457|cat
UID PID PPID C STIME TTY TIME CMD
root 5457 5449 0 4月26 pts/1 00:00:00 Worker***: master process start_file=/data/www/manage.****.***.cn/********/GatewayWorker/start.php
ps aux | grep php
在zsh中,例如,输出
root 50282 0.0 1.4 49512 29584 - Ss 23:03 0:00.05 php-fpm: master process (/usr/local/
您可以看到它在屏幕上运行并在结束时被截止.
在FreeBSD中,如何查看完整输出?
最佳答案 使用-w选项(必要时重复).尝试:
ps auxwww|grep php
root 50282 0.0 1.4 49512 29584 - Ss 23:03 0:00.06 php-fpm: master process (/usr/local/php7/etc/php-fpm.conf) (php-fpm)
有关更多信息,请参见the manual page
二)linux ps命令显示完整命令:
在linux上执行ps命令,输出往往被截断
ps -f -p5457
UID PID PPID C STIME TTY TIME CMD
root 5457 5449 0 4月26 pts/1 00:00:00 Worker***: master process start_file=/data/www/manage.**
可以使用以下形式,显示完整的命令
ps -w -w -f -p5457
UID PID PPID C STIME TTY TIME CMD
root 5457 5449 0 4月26 pts/1 00:00:00 Worker***: master process start_file=/data/www/manage.****.***.cn/********/GatewayWorker/start.php
或者
ps -f -p5457|cat
UID PID PPID C STIME TTY TIME CMD
root 5457 5449 0 4月26 pts/1 00:00:00 Worker***: master process start_file=/data/www/manage.****.***.cn/********/GatewayWorker/start.php
FreeBSD 采用从 LLVM 衍生而来的新社区行为准则
Unix/LinuxC技术 jackxiang 2020-6-11 16:45
FreeBSD 社区宣布接下来项目将采用新的从 LLVM 衍生而来的行为准则(Code of Conduct,CoC)。
此前 2018 年对于 CoC 的调查中,FreeBSD 开发者给出的反馈是:
94% 的开发人员相信项目中尊重沟通很重要;1% 的人不同意
89% 的人认为 FreeBSD 应该欢迎所有背景的人;2% 反对
73% 的人表示行为不好的人应从项目中剔除,不论他们的技术贡献如何;9% 反对
35% 的人不满意 2018 年通过的行为守则,34% 保持中立,30% 表示满意
今年 6 月,通过审查其它开源行为准则,FreeBSD 核心团队进行了新一轮调查,不过将问题限定为:采用 LLVM 衍生的 CoC 还是 Go 衍生的版本,亦或是保持不变。结果是 63% 的人赞成采用 LLVM 衍生的行为准则。
通过前后两次社区开发者的调查,FreeBSD 最终采用了基于 LLVM 的 CoC。该 CoC 要求社区开发者:
友好耐心
热情好客
体贴
相互尊敬
对他人友善,并注意不要乱说话
持不同见解时多换位思考
具体内容可以查看:https://www.freebsd.org/internal/code-of-conduct.html
此前 2018 年对于 CoC 的调查中,FreeBSD 开发者给出的反馈是:
94% 的开发人员相信项目中尊重沟通很重要;1% 的人不同意
89% 的人认为 FreeBSD 应该欢迎所有背景的人;2% 反对
73% 的人表示行为不好的人应从项目中剔除,不论他们的技术贡献如何;9% 反对
35% 的人不满意 2018 年通过的行为守则,34% 保持中立,30% 表示满意
今年 6 月,通过审查其它开源行为准则,FreeBSD 核心团队进行了新一轮调查,不过将问题限定为:采用 LLVM 衍生的 CoC 还是 Go 衍生的版本,亦或是保持不变。结果是 63% 的人赞成采用 LLVM 衍生的行为准则。
通过前后两次社区开发者的调查,FreeBSD 最终采用了基于 LLVM 的 CoC。该 CoC 要求社区开发者:
友好耐心
热情好客
体贴
相互尊敬
对他人友善,并注意不要乱说话
持不同见解时多换位思考
具体内容可以查看:https://www.freebsd.org/internal/code-of-conduct.html
[实践OK]linxu下umask 000 为什么执行下来不是 777而是666呢??
Unix/LinuxC技术 jackxiang 2020-6-8 15:18
#! /bin/sh
umask 000
touch abcde.txt
mkdir abcde
-rw-rw-rw- 1 root root 0 Feb 18 16:38 abcde.txt #666 文件
drwxrwxrwx 2 root root 4096 Feb 18 16:38 abcde #文件夹777
umask 0022 #没有了w权限
-rw-r--r-- 1 root root 0 Feb 18 16:40 abcde.txt #644文件
drwxr-xr-x 2 root root 4096 Feb 18 16:40 abcde #文件夹755
umask 命令会从新创建的文件权限中减去一个掩码,以确定文件的实际权限。这个掩码默认值为 022,即将文件默认权限的写权限屏蔽掉,使其不能写入。因此,当 umask 设置为 022 时,新创建的文件的权限就会变成 644,新创建的目录权限则会变成 755。
执行脚本后,根据 umask 的设置:
abcde.txt 文件的权限为 -rw-rw-rw-,即666,因为umask没有屏蔽任何权限,所以新建文件的权限完全由 umask 以外的部分决定,umask 之前的权限就是实际权限。
abcde 目录的权限为 drwxrwxrwx,即777,同理,因为umask没有屏蔽任何权限,所以新建目录的权限完全由 umask 以外的部分决定,umask 之前的权限就是实际权限。
接着,如果你执行 umask 0022 将umask设置为 0022,则权限掩码会屏蔽掉文件的写权限,目录的写权限不受影响,具体计算方式为:
文件的实际权限为:原权限 (666) - 掩码 (022) = 新权限 (644),即 -rw-r--r--。
目录的实际权限为:原权限 (777) - 掩码 (022) = 新权限 (755),即 drwxr-xr-x。
八进制 → 十进制
方法:八进制数从低位到高位(即从右往左)计算,第0位的权值是8的0次方,第1位的权值是8的1次方,第2位的权值是8的2次方,依次递增下去,把最后的结果相加的值就是十进制的值了。
八进制就是逢8进1,八进制数采用 0~7这八数来表达一个数。
例:将八进制的(53)O转换为十进制的步骤如下:
1. 第0位 3 x 8^0 = 3;
2. 第1位 5 x 8^1 = 40;
3. 读数,把结果值相加,3+40=43,即(53)O=(43)D。
权限二进制值和八进制值的表格如下:https://blog.csdn.net/hnhygkx/article/details/104280304
umask 的作用是从文件的默认权限中减去一些权限,所以 umask 为什么数值就会影响最终的文件权限。777 权限表示所有用户都具有读、写、执行权限,因此它的二进制表示为 111 111 111,也就是说所有的权限位都被设置了。
umask 的作用是从默认权限中减去相应的权限。如果我们希望最终的权限是 777,那么 umask 就应该设置为 000。因为 000 与 777 相与后,仍然保持了 777 的权限,即:
```
777 (111 111 111)
&
000 (000 000 000)
=
777 (111 111 111)
```
因此,在这种情况下,umask 设置为 000。
在 Unix 系统中,umask 影响文件和目录的默认权限,但它们的默认权限是不同的。默认情况下:
对于新创建的文件,默认权限为 666。
对于新创建的目录,默认权限为 777。
umask 的作用是从这些默认权限中减去一些权限位。假设 umask 设置为 000,则文件的默认权限为 666,目录的默认权限为 777。
============================================================
root如果没有umask(umask 000)则文件权限为666,目录权限为777,但是默认有的如下:
root的缺省zhiunmask是022,一般用户是002。
所以,root用户umask
0022
一般目录是:755,原因是777-022=755.
文件,默认是644,666-022=644。
=============umask 000 为什么执行下来不是 777而是666呢??==================
umask 000
umask
0000
touch index2.php
touch index3.php
-rw-rw-rw- 1 root root 0 Jun 8 15:08 index2.php
-rw-rw-rw- 1 root root 0 Jun 8 15:08 index3.php
原因:因为这是个普通文件,普通文件是不能在创建时具有执行权限的,所以要去掉x 权限位(7-1),所以权限是6(可读写,7-1-0),0就是umask。
ll -d bdc
drwxrwxrwx 2 root root 4096 Jun 8 15:23 bdc #目录就是777了。
解释:unmask制定bai了新文件创建时的权限,unmask是个8进制的数du字。root的缺省zhiunmask是022,一般用户是002。如dao果用户的umask为000,则创建的文件权限为666,目录权限为777,运行umask命令可以查看用户自己的umask值。
当我们登录系统之后创建一个文件总是有一个默认权限的,那么这个权限是怎么来的呢?这就是umask干的事情。umask设置了用户创建文件的默认 权限,它与chmod的效果刚好相反,umask设置的是权限"补码",而chmod设置的是文件权限码。一般可在/etc/profile、/etc/bashrc、$ [HOME]/.bash_profile、$[HOME]/.profile或$[HOME]/.bashrc中设置umask值。具体取决于Linux发行版,比如Fedora19下要更改自己的umask值,在$[HOME]/.profile或$[HOME]/.bash_profile下的增加umask的值覆盖不了/etc/profile中的配置值的,必须在$[HOME]/.bashrc下增加umask值才可以永久定义自己的umask值。
umask 000
touch abcde.txt
mkdir abcde
-rw-rw-rw- 1 root root 0 Feb 18 16:38 abcde.txt #666 文件
drwxrwxrwx 2 root root 4096 Feb 18 16:38 abcde #文件夹777
umask 0022 #没有了w权限
-rw-r--r-- 1 root root 0 Feb 18 16:40 abcde.txt #644文件
drwxr-xr-x 2 root root 4096 Feb 18 16:40 abcde #文件夹755
umask 命令会从新创建的文件权限中减去一个掩码,以确定文件的实际权限。这个掩码默认值为 022,即将文件默认权限的写权限屏蔽掉,使其不能写入。因此,当 umask 设置为 022 时,新创建的文件的权限就会变成 644,新创建的目录权限则会变成 755。
执行脚本后,根据 umask 的设置:
abcde.txt 文件的权限为 -rw-rw-rw-,即666,因为umask没有屏蔽任何权限,所以新建文件的权限完全由 umask 以外的部分决定,umask 之前的权限就是实际权限。
abcde 目录的权限为 drwxrwxrwx,即777,同理,因为umask没有屏蔽任何权限,所以新建目录的权限完全由 umask 以外的部分决定,umask 之前的权限就是实际权限。
接着,如果你执行 umask 0022 将umask设置为 0022,则权限掩码会屏蔽掉文件的写权限,目录的写权限不受影响,具体计算方式为:
文件的实际权限为:原权限 (666) - 掩码 (022) = 新权限 (644),即 -rw-r--r--。
目录的实际权限为:原权限 (777) - 掩码 (022) = 新权限 (755),即 drwxr-xr-x。
八进制 → 十进制
方法:八进制数从低位到高位(即从右往左)计算,第0位的权值是8的0次方,第1位的权值是8的1次方,第2位的权值是8的2次方,依次递增下去,把最后的结果相加的值就是十进制的值了。
八进制就是逢8进1,八进制数采用 0~7这八数来表达一个数。
例:将八进制的(53)O转换为十进制的步骤如下:
1. 第0位 3 x 8^0 = 3;
2. 第1位 5 x 8^1 = 40;
3. 读数,把结果值相加,3+40=43,即(53)O=(43)D。
权限二进制值和八进制值的表格如下:https://blog.csdn.net/hnhygkx/article/details/104280304
umask 的作用是从文件的默认权限中减去一些权限,所以 umask 为什么数值就会影响最终的文件权限。777 权限表示所有用户都具有读、写、执行权限,因此它的二进制表示为 111 111 111,也就是说所有的权限位都被设置了。
umask 的作用是从默认权限中减去相应的权限。如果我们希望最终的权限是 777,那么 umask 就应该设置为 000。因为 000 与 777 相与后,仍然保持了 777 的权限,即:
```
777 (111 111 111)
&
000 (000 000 000)
=
777 (111 111 111)
```
因此,在这种情况下,umask 设置为 000。
在 Unix 系统中,umask 影响文件和目录的默认权限,但它们的默认权限是不同的。默认情况下:
对于新创建的文件,默认权限为 666。
对于新创建的目录,默认权限为 777。
umask 的作用是从这些默认权限中减去一些权限位。假设 umask 设置为 000,则文件的默认权限为 666,目录的默认权限为 777。
============================================================
root如果没有umask(umask 000)则文件权限为666,目录权限为777,但是默认有的如下:
root的缺省zhiunmask是022,一般用户是002。
所以,root用户umask
0022
一般目录是:755,原因是777-022=755.
文件,默认是644,666-022=644。
=============umask 000 为什么执行下来不是 777而是666呢??==================
umask 000
umask
0000
touch index2.php
touch index3.php
-rw-rw-rw- 1 root root 0 Jun 8 15:08 index2.php
-rw-rw-rw- 1 root root 0 Jun 8 15:08 index3.php
原因:因为这是个普通文件,普通文件是不能在创建时具有执行权限的,所以要去掉x 权限位(7-1),所以权限是6(可读写,7-1-0),0就是umask。
ll -d bdc
drwxrwxrwx 2 root root 4096 Jun 8 15:23 bdc #目录就是777了。
解释:unmask制定bai了新文件创建时的权限,unmask是个8进制的数du字。root的缺省zhiunmask是022,一般用户是002。如dao果用户的umask为000,则创建的文件权限为666,目录权限为777,运行umask命令可以查看用户自己的umask值。
当我们登录系统之后创建一个文件总是有一个默认权限的,那么这个权限是怎么来的呢?这就是umask干的事情。umask设置了用户创建文件的默认 权限,它与chmod的效果刚好相反,umask设置的是权限"补码",而chmod设置的是文件权限码。一般可在/etc/profile、/etc/bashrc、$ [HOME]/.bash_profile、$[HOME]/.profile或$[HOME]/.bashrc中设置umask值。具体取决于Linux发行版,比如Fedora19下要更改自己的umask值,在$[HOME]/.profile或$[HOME]/.bash_profile下的增加umask的值覆盖不了/etc/profile中的配置值的,必须在$[HOME]/.bashrc下增加umask值才可以永久定义自己的umask值。
[实践OK]如何关闭centos6x/7x中的sunrpc 111端口,linux如何关闭无用端口/Linux禁用111端口。和关闭rpc.statd服务。
Unix/LinuxC技术 jackxiang 2020-6-1 17:34
一)关闭sunrpc 111端口的步骤:
ss -lnt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:111 *:*
lsof -i :111
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root 34u IPv6 27796 0t0 TCP *:sunrpc (LISTEN)
systemd 1 root 35u IPv4 27797 0t0 TCP *:sunrpc (LISTEN)
rpcbind 52067 rpc 4u IPv6 27796 0t0 TCP *:sunrpc (LISTEN)
rpcbind 52067 rpc 5u IPv4 27797 0t0 TCP *:sunrpc (LISTEN)
查看正在监听的111端口,由哪个服务使用
cat /etc/services | grep -w 111
sunrpc 111/tcp portmapper rpcbind # RPC 4.0 portmapper TCP
sunrpc 111/udp portmapper rpcbind # RPC 4.0 portmapper UDP
systemctl list-unit-files --all |grep rpcbind
rpcbind.service indirect
rpcbind.socket disabled
rpcbind.target static
核心语句:
CentOS6.X系统:
chkconfig rpcbind off
service rpcbind stop
核对是否真关了:
systemctl list-unit-files --all |grep rpcbind
111消失了:
ss -lnt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:*
LISTEN 0 128 *:10050 *:*
LISTEN 0 128 :::22 :::*
参考自:https://www.qiuvps.com/1595.html
https://my.oschina.net/u/1189928/blog/1824327
三)关闭rpc.statd服务
lsof -i tcp:10588
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rpc.statd 1828 rpcuser 9u IPv4 13392 0t0 TCP *:10588 (LISTEN)
which rpc.statd
/sbin/rpc.statd
rpm -qf /sbin/rpc.statd
nfs-utils-1.2.3-39.el6_5.3.x86_64
rpm -ql nfs-utils|grep '/etc/rc.d'
/etc/rc.d/init.d/nfs
/etc/rc.d/init.d/nfslock
/etc/rc.d/init.d/rpcgssd
/etc/rc.d/init.d/rpcidmapd
/etc/rc.d/init.d/rpcsvcgssd
/etc/init.d/nfslock stop
lsof -i tcp:631
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
cupsd 1865 root 6u IPv6 13530 0t0 TCP [::1]:ipp (LISTEN)
cupsd 1865 root 7u IPv4 13531 0t0 TCP xy.xxxx.xx:ipp (LISTEN)
rpm -qf `which cupsd`
cups-1.4.2-78.el6_9.x86_64
netstat -anp|grep 631
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1865/cupsd
tcp 0 0 ::1:631 :::* LISTEN 1865/cupsd
udp 0 0 0.0.0.0:631 0.0.0.0:* 1865/cupsd
1865 1 01:29:04 Mon Jun 1 17:53:58 2020 cupsd -C /etc/cups/cupsd.conf
1890 1 01:29:04 Mon Jun 1 17:53:58 2020 hald
1891 1890 01:29:04 Mon Jun 1 17:53:58 2020 \_ hald-runner
1923 1891 01:29:04 Mon Jun 1 17:53:58 2020 \_ hald-addon-input: Listening on /dev/input/event2 /dev/input/event0
kill -9 1865 # 干死,端口消失。
参考:http://coolnull.com/4038.html
三)特殊端口服务可能是mount 产生的端口:
mount端口是看不到程序的,只显示一个小横杠。
netstat -lntp|grep 54086
tcp 0 0 0.0.0.0:54086 0.0.0.0:* LISTEN -
umount /data/webdata # umount后端口消失
实践来自:https://jackxiang.com/post/10577/
ss -lnt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:111 *:*
lsof -i :111
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root 34u IPv6 27796 0t0 TCP *:sunrpc (LISTEN)
systemd 1 root 35u IPv4 27797 0t0 TCP *:sunrpc (LISTEN)
rpcbind 52067 rpc 4u IPv6 27796 0t0 TCP *:sunrpc (LISTEN)
rpcbind 52067 rpc 5u IPv4 27797 0t0 TCP *:sunrpc (LISTEN)
查看正在监听的111端口,由哪个服务使用
cat /etc/services | grep -w 111
sunrpc 111/tcp portmapper rpcbind # RPC 4.0 portmapper TCP
sunrpc 111/udp portmapper rpcbind # RPC 4.0 portmapper UDP
systemctl list-unit-files --all |grep rpcbind
rpcbind.service indirect
rpcbind.socket disabled
rpcbind.target static
核心语句:
CentOS6.X系统:
chkconfig rpcbind off
service rpcbind stop
核对是否真关了:
systemctl list-unit-files --all |grep rpcbind
111消失了:
ss -lnt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:*
LISTEN 0 128 *:10050 *:*
LISTEN 0 128 :::22 :::*
参考自:https://www.qiuvps.com/1595.html
https://my.oschina.net/u/1189928/blog/1824327
三)关闭rpc.statd服务
lsof -i tcp:10588
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rpc.statd 1828 rpcuser 9u IPv4 13392 0t0 TCP *:10588 (LISTEN)
which rpc.statd
/sbin/rpc.statd
rpm -qf /sbin/rpc.statd
nfs-utils-1.2.3-39.el6_5.3.x86_64
rpm -ql nfs-utils|grep '/etc/rc.d'
/etc/rc.d/init.d/nfs
/etc/rc.d/init.d/nfslock
/etc/rc.d/init.d/rpcgssd
/etc/rc.d/init.d/rpcidmapd
/etc/rc.d/init.d/rpcsvcgssd
/etc/init.d/nfslock stop
lsof -i tcp:631
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
cupsd 1865 root 6u IPv6 13530 0t0 TCP [::1]:ipp (LISTEN)
cupsd 1865 root 7u IPv4 13531 0t0 TCP xy.xxxx.xx:ipp (LISTEN)
rpm -qf `which cupsd`
cups-1.4.2-78.el6_9.x86_64
netstat -anp|grep 631
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1865/cupsd
tcp 0 0 ::1:631 :::* LISTEN 1865/cupsd
udp 0 0 0.0.0.0:631 0.0.0.0:* 1865/cupsd
1865 1 01:29:04 Mon Jun 1 17:53:58 2020 cupsd -C /etc/cups/cupsd.conf
1890 1 01:29:04 Mon Jun 1 17:53:58 2020 hald
1891 1890 01:29:04 Mon Jun 1 17:53:58 2020 \_ hald-runner
1923 1891 01:29:04 Mon Jun 1 17:53:58 2020 \_ hald-addon-input: Listening on /dev/input/event2 /dev/input/event0
kill -9 1865 # 干死,端口消失。
参考:http://coolnull.com/4038.html
三)特殊端口服务可能是mount 产生的端口:
mount端口是看不到程序的,只显示一个小横杠。
netstat -lntp|grep 54086
tcp 0 0 0.0.0.0:54086 0.0.0.0:* LISTEN -
umount /data/webdata # umount后端口消失
实践来自:https://jackxiang.com/post/10577/
[nio]noblock的IO到底是啥意思?阻塞是啥意思。
Unix/LinuxC技术 jackxiang 2020-5-26 21:16
man 2 socket #非阻塞的真实含义是没有连接时accept返回-1(Java里返回Null,C语言返回-1),没有数据时read返回0.
SOCK_NONBLOCK Set the O_NONBLOCK file status flag on the new open file description. Using this
flag saves extra calls to fcntl(2) to achieve the same result. #fcntl设置也成。
java里设置:ss.configureBlocking(false); #重点 OS NOBLOCK。
C里:
int listenfd = socket(AF_INET, SOCK_STREAM, 0);
fcntl(listenfd, F_SETFL, O_NONBLOCK); // 设置非阻塞方式
for(i=0; i<wait_fds; ++i ) // for循环中以进程处理epoll事件,更稳定。
{
if( events[i].data.fd == listenfd ){
connfd = accept( listenfd, (struct sockaddr *)&clientaddr, &clilen );
printf("accept return listenfd=%d\n",connfd);
if( connfd < 0 ){
perror("connfd < 0");
exit(1);
}
// 设置非阻塞
if (fcntl( connfd, F_SETFL, fcntl( connfd, F_GETFD, 0)|O_NONBLOCK) == -1){
continue;
}
accept、read、write: -1 不会阻塞。默认recv(5...阻塞。NIO在Java里指:
1)Java New:文件和楼socket都封装成新的东西,可以select统一侦听状态。
2)Unix NOBLOCKING。
BLOCKING的缺点弊端:每客户端、每线程【阻塞】。
man 2 accept #此调用在发生错误时返回-1.若成功则返回一个非负整数标识这个 连接套接字. NOBLOCKING -1
man 2 read #生错误时返回-1,并置 errno 为相应值.在这种情况下无法得知文件偏移位置是否有变化.在读取了一定量的数据后被信号所中断,并返回 -1(且 errno 被设置为EINTR),或者返回已读取的数据量.
1万个连接 1个人发来数据:
accept返回都是-1,来了数据读了一部分后,你又回去处理连接了,数据读不全。于是出现粘包。
但是你在一个循环里,全量遍历O(n)系统调用。
man 2 select:
多少条路、有多少个读的、多少个写的。
select(3,5) # 3有没有连接,5有没有连接。
selec(t3,5,6,7,8,9,10,11) O(1)只需要调一次即可。
accept (3) = 6
recv(5) O(m) #多路复用只能给你返回状态,程序需要自己调用R/W你的IO ,只要自己去读去取就叫同步模型。Netty里全是同步IO模型:无论是在当前线程还是其它线程NIO BIO New IO(指文件、socket一块给弄成一个NewIO),N:还有一个是Noblocking,也就是没来连接时返回-1,读取不到socket数据时返回立即0。
#异步:有阻塞么?没有阻塞的。 调用内核的一个方法(callback)(内核帮你把数据读写)
man 2 epoll_create:
man 2 epoll_ctl
strace -ff -o out ./nginx
SOCK_NONBLOCK Set the O_NONBLOCK file status flag on the new open file description. Using this
flag saves extra calls to fcntl(2) to achieve the same result. #fcntl设置也成。
java里设置:ss.configureBlocking(false); #重点 OS NOBLOCK。
C里:
int listenfd = socket(AF_INET, SOCK_STREAM, 0);
fcntl(listenfd, F_SETFL, O_NONBLOCK); // 设置非阻塞方式
for(i=0; i<wait_fds; ++i ) // for循环中以进程处理epoll事件,更稳定。
{
if( events[i].data.fd == listenfd ){
connfd = accept( listenfd, (struct sockaddr *)&clientaddr, &clilen );
printf("accept return listenfd=%d\n",connfd);
if( connfd < 0 ){
perror("connfd < 0");
exit(1);
}
// 设置非阻塞
if (fcntl( connfd, F_SETFL, fcntl( connfd, F_GETFD, 0)|O_NONBLOCK) == -1){
continue;
}
accept、read、write: -1 不会阻塞。默认recv(5...阻塞。NIO在Java里指:
1)Java New:文件和楼socket都封装成新的东西,可以select统一侦听状态。
2)Unix NOBLOCKING。
BLOCKING的缺点弊端:每客户端、每线程【阻塞】。
man 2 accept #此调用在发生错误时返回-1.若成功则返回一个非负整数标识这个 连接套接字. NOBLOCKING -1
man 2 read #生错误时返回-1,并置 errno 为相应值.在这种情况下无法得知文件偏移位置是否有变化.在读取了一定量的数据后被信号所中断,并返回 -1(且 errno 被设置为EINTR),或者返回已读取的数据量.
1万个连接 1个人发来数据:
accept返回都是-1,来了数据读了一部分后,你又回去处理连接了,数据读不全。于是出现粘包。
但是你在一个循环里,全量遍历O(n)系统调用。
man 2 select:
多少条路、有多少个读的、多少个写的。
select(3,5) # 3有没有连接,5有没有连接。
selec(t3,5,6,7,8,9,10,11) O(1)只需要调一次即可。
accept (3) = 6
recv(5) O(m) #多路复用只能给你返回状态,程序需要自己调用R/W你的IO ,只要自己去读去取就叫同步模型。Netty里全是同步IO模型:无论是在当前线程还是其它线程NIO BIO New IO(指文件、socket一块给弄成一个NewIO),N:还有一个是Noblocking,也就是没来连接时返回-1,读取不到socket数据时返回立即0。
#异步:有阻塞么?没有阻塞的。 调用内核的一个方法(callback)(内核帮你把数据读写)
man 2 epoll_create:
man 2 epoll_ctl
strace -ff -o out ./nginx
实际测试结果
创建 10000 个 TCP socket 会使用 31552 KB 内存(通过比较 /proc/meminfo 得出),即每个 TCP socket 占用 3.155 KB,这个数字很接近上面考虑 SLAB overhead 之后的计算结果。
代码:https://github.com/chenshuo/recipes/blob/master/tpc/bin/footprint.cc
小结
中文网络上这种似是而非、以讹传讹的说法很多,常见的还包括“epoll 快是因为用了共享内存来避免拷贝数据”等等,不可轻信。
来自:https://zhuanlan.zhihu.com/p/25241630
创建 10000 个 TCP socket 会使用 31552 KB 内存(通过比较 /proc/meminfo 得出),即每个 TCP socket 占用 3.155 KB,这个数字很接近上面考虑 SLAB overhead 之后的计算结果。
代码:https://github.com/chenshuo/recipes/blob/master/tpc/bin/footprint.cc
小结
中文网络上这种似是而非、以讹传讹的说法很多,常见的还包括“epoll 快是因为用了共享内存来避免拷贝数据”等等,不可轻信。
来自:https://zhuanlan.zhihu.com/p/25241630
[实践OK]Linux中查看日志文件的正确姿势,求你别tail走天下了!
Unix/LinuxC技术 jackxiang 2020-3-20 10:58
摘录作为一个后端开发工程师,在Linux中查看查看文件内容是基本操作了。尤其是通常要分析日志文件排查问题,那么我们应该如何正确打开日志文件呢?对于笔者这种小菜鸡来说,第一反应就是 cat,tail,vi(或vim)了,是的,我曾经用过好多次vim编辑器来查看日志文件(可耻)。
千万不要使用vi命令来查看大文件内容, 尤其对于那些几十G的大文件。因为vi仅仅是一个编辑器(可以理解为windows中的记事本),使用vi命令后则会把文件所有内容加载到内存中,如果内存不够大的话,则可能会导致服务器瘫痪。
cat test.txt
第1行
第2行
第3行
第4行
第5行
第6行
第7行
第8行
第9行
第10行
不按脚本,直接每一行都有行号:
cat test.txt
第1行
第2行
第3行
第4行
第5行
第6行
第7行
第8行
第9行
第10行
第11行
第12行
第13行
第14行
第15行
第16行
第17行
第18行
第19行
第20行
第21行
less
less命令比more更加有弹性,可以前后翻页,不止可以向上查找,也可以向下查找。
按键/命令
[pagedown] :向下翻页
[pageup] :向上翻页
/字符串:在当前显示的内容(翻页进度位置),向下查找这个字符串关键字
?字符串:向上查找字符串
n :重复前一个查找,与/或?有关, 比如前一个命令是?表示向上查找,此时n会向上查找
N: 反向的重复前一个查找
g :跳转到当前文件数据的第一行
G :跳转到当前文件数据的最后一行
q :退出当前文件的浏览
范例演示
数据截取
head
head命令用来提取文件的前n行,一般配合使用-n选项。当指定的行数为负数-x时,则会打印出除了后面x行的其他所有数据。
范例1:查看前10行数据
head -n 10 test.txt
head -n 10 test.txt
cat test.txt
第1行
第2行
第3行
第4行
第5行
第6行
第7行
第8行
第9行
第10行
范例2(一共10000行,没有空行):head -n -9989 test.txt
tail
从文件尾部截取数据。tail也是工作中最常用的命令,因为可以利用-f选项,一直刷新获取文件尾部最新数据。
选项与参数
-n : 查看后n行数据,注意当n后面值带“+”号表示从第x行开始, 如 tail -n +1000 test.txt
-f : 展示文件后面
范例1:查看尾部5行数据【tail -n 5 test.txt】
范例2:查看文件尾部数据,并实时刷新数据
tail -f test.txt
范例3:查看文件尾部5行数据,并实时刷新数据
tail -n 5 -f test.txt
通用命令
管道:Shell 还有一种功能,就是可以将两个或者多个命令(程序或者进程)连接到一起,把一个命令的输出作为下一个命令的输入,以这种方式连接的两个或者多个命令就形成了管道(pipe),管道命令用"|"来表示。
范例:查看ll命令输出的前10行
ll | head -n 3
ll | head -n 10
grep :命令用于查找文件里符合条件的字符串,这两个命令也是linux中最常用的的,而在查看日志文件也通常会结合这两个命令一起使用。
范例:查看文件文件中那些行包含‘999’
cat -n test.txt | grep '999'
>> : 文件追加重定向命令,可以往文件末尾追加数据,正如上文 echo "第$i行" >> test.txt。
范例:将一个文件的最后10行复制到helloworld.txt中
tail -n 10 >> helloworld.txt
wc:文件字节数,字数,行数查看wc [-clw] [文件...],
-c或--bytes或--chars 只显示Bytes数。
-l或--lines 只显示行数。
-w或--words 只显示字数。
范例:查看文件行数
wc -l
案例实战
案例1:打印日志文件中第11到20行。
思路:首先获取前20行,然后在获取20行的后10行即可,需要使用管道命令。
head -n 20 text.txt | tail -n 10 #head和tail都是-n ,head -n 是头n行,tail -n是从第n+1行到行尾
cat -n test.txt | head -n 20 | tail -n 10(如果需要显示行号)
分解:
head -n 20 text.txt
cat test.txt
第1行
第2行
第3行
第4行
第5行
第6行
第7行
第8行
第9行
第10行
第11行
第12行
第13行
第14行
第15行
第16行
第17行
第18行
第19行
第20行
第二步,将上在输出通过管道从11行到最后:
head -n 20 test.txt |tail -n 10
第11行
第12行
第13行
第14行
第15行
第16行
第17行
第18行
第19行
第20行
来自:https://mp.weixin.qq.com/s/Q-NfY2sr4n2XiJwy8SsXDA
千万不要使用vi命令来查看大文件内容, 尤其对于那些几十G的大文件。因为vi仅仅是一个编辑器(可以理解为windows中的记事本),使用vi命令后则会把文件所有内容加载到内存中,如果内存不够大的话,则可能会导致服务器瘫痪。
cat test.txt
第1行
第2行
第3行
第4行
第5行
第6行
第7行
第8行
第9行
第10行
不按脚本,直接每一行都有行号:
cat test.txt
第1行
第2行
第3行
第4行
第5行
第6行
第7行
第8行
第9行
第10行
第11行
第12行
第13行
第14行
第15行
第16行
第17行
第18行
第19行
第20行
第21行
less
less命令比more更加有弹性,可以前后翻页,不止可以向上查找,也可以向下查找。
按键/命令
[pagedown] :向下翻页
[pageup] :向上翻页
/字符串:在当前显示的内容(翻页进度位置),向下查找这个字符串关键字
?字符串:向上查找字符串
n :重复前一个查找,与/或?有关, 比如前一个命令是?表示向上查找,此时n会向上查找
N: 反向的重复前一个查找
g :跳转到当前文件数据的第一行
G :跳转到当前文件数据的最后一行
q :退出当前文件的浏览
范例演示
数据截取
head
head命令用来提取文件的前n行,一般配合使用-n选项。当指定的行数为负数-x时,则会打印出除了后面x行的其他所有数据。
范例1:查看前10行数据
head -n 10 test.txt
head -n 10 test.txt
cat test.txt
第1行
第2行
第3行
第4行
第5行
第6行
第7行
第8行
第9行
第10行
范例2(一共10000行,没有空行):head -n -9989 test.txt
tail
从文件尾部截取数据。tail也是工作中最常用的命令,因为可以利用-f选项,一直刷新获取文件尾部最新数据。
选项与参数
-n : 查看后n行数据,注意当n后面值带“+”号表示从第x行开始, 如 tail -n +1000 test.txt
-f : 展示文件后面
范例1:查看尾部5行数据【tail -n 5 test.txt】
范例2:查看文件尾部数据,并实时刷新数据
tail -f test.txt
范例3:查看文件尾部5行数据,并实时刷新数据
tail -n 5 -f test.txt
通用命令
管道:Shell 还有一种功能,就是可以将两个或者多个命令(程序或者进程)连接到一起,把一个命令的输出作为下一个命令的输入,以这种方式连接的两个或者多个命令就形成了管道(pipe),管道命令用"|"来表示。
范例:查看ll命令输出的前10行
ll | head -n 3
ll | head -n 10
grep :命令用于查找文件里符合条件的字符串,这两个命令也是linux中最常用的的,而在查看日志文件也通常会结合这两个命令一起使用。
范例:查看文件文件中那些行包含‘999’
cat -n test.txt | grep '999'
>> : 文件追加重定向命令,可以往文件末尾追加数据,正如上文 echo "第$i行" >> test.txt。
范例:将一个文件的最后10行复制到helloworld.txt中
tail -n 10 >> helloworld.txt
wc:文件字节数,字数,行数查看wc [-clw] [文件...],
-c或--bytes或--chars 只显示Bytes数。
-l或--lines 只显示行数。
-w或--words 只显示字数。
范例:查看文件行数
wc -l
案例实战
案例1:打印日志文件中第11到20行。
思路:首先获取前20行,然后在获取20行的后10行即可,需要使用管道命令。
head -n 20 text.txt | tail -n 10 #head和tail都是-n ,head -n 是头n行,tail -n是从第n+1行到行尾
cat -n test.txt | head -n 20 | tail -n 10(如果需要显示行号)
分解:
head -n 20 text.txt
cat test.txt
第1行
第2行
第3行
第4行
第5行
第6行
第7行
第8行
第9行
第10行
第11行
第12行
第13行
第14行
第15行
第16行
第17行
第18行
第19行
第20行
第二步,将上在输出通过管道从11行到最后:
head -n 20 test.txt |tail -n 10
第11行
第12行
第13行
第14行
第15行
第16行
第17行
第18行
第19行
第20行
来自:https://mp.weixin.qq.com/s/Q-NfY2sr4n2XiJwy8SsXDA
[实践OK]Mac 下安装使用tac命令
Unix/LinuxC技术 jackxiang 2020-3-20 10:18
Mac 下安装使用tac命令:
1. 安装coreutils软件包:
brew install coreutils
ln -s /usr/local/bin/gtac /usr/local/bin/tac
2. 在MAC 上使用tail命令代替:
tail -r filename
Error: Cannot install coreutils because conflicting formulae are installed.
md5sha1sum: because both install `md5sum` and `sha1sum` binaries
Please `brew unlink md5sha1sum` before continuing.
来自:https://blog.csdn.net/dongwuming/article/details/50836723?utm_source=blogxgwz6
1. 安装coreutils软件包:
brew install coreutils
ln -s /usr/local/bin/gtac /usr/local/bin/tac
2. 在MAC 上使用tail命令代替:
tail -r filename
Error: Cannot install coreutils because conflicting formulae are installed.
md5sha1sum: because both install `md5sum` and `sha1sum` binaries
Please `brew unlink md5sha1sum` before continuing.
来自:https://blog.csdn.net/dongwuming/article/details/50836723?utm_source=blogxgwz6