小编wja*_*rea的帖子

stat 命令上下文中的修改和更改有什么区别?

stat命令的手册页说:

   %x     Time of last access
   %y     Time of last modification
   %z     Time of last change
Run Code Online (Sandbox Code Playgroud)

我无法理解modifychange之间的区别。我明白这些词是同义词(英语不是我的母语),但它们的输出不同。

我尝试了以下命令

stat --printf="Change %z\nAccess %x\nModify %y\n" p.txt
Run Code Online (Sandbox Code Playgroud)

现在当我打开 p.txt 时,访问时间改变了,我进入插入模式,编辑文件,修改和更改时间保持不变。

更改 2010-10-06 12:48:39.286252389 +0500
访问 2010-10-06 12:49:14。962243456 +0500
修改 2010-10-06 12:48:39.234498878 +0500

当我将更改写入 file :w、 modify 和 change 时,两者都会更改但给出不同的值。

更改 2010-10-06 12:51:21。949082169 +0500
访问 2010-10-06 12:51:21.908246082 +0500
修改 2010-10-06 12:51:21。908246082 +0500

那么在这种情况下,“修改”和“更改”的含义是什么?也就是说,修改和更改的时间给出了哪些事件的时间?

谢谢

command-line timestamps files

153
推荐指数
1
解决办法
11万
查看次数

了解 UNIX 权限和文件类型

chmod直到今天,我才真正了解如何工作。我遵循了一个向我解释了很多事情的教程。

例如,我了解到您拥有三个不同的权限组:

  • 业主 ( u)
  • 组 ( g)
  • 大家(o

基于这三个群体,我现在知道:

  • 如果文件归用户所有,则用户权限决定访问权限。
  • 如果文件所在的组与用户所在的组相同,则组权限决定访问权限。
  • 如果用户不是文件所有者,并且不在组中,则使用其他权限。

我还了解到您拥有以下权限:

  • 读 ( r)
  • 写 ( w)
  • 执行 ( x)

我创建了一个目录来测试我新获得的知识:

mkdir test
Run Code Online (Sandbox Code Playgroud)

然后我做了一些测试:

chmod u+rwx test/
# drwx------
chmod g+rx test/
# drwxr-x---
chmod u-x test/
# drw-r-x---
Run Code Online (Sandbox Code Playgroud)

经过一段时间的鬼混后,我想我终于掌握chmod了使用此命令设置权限的方法。


但...

我还有几个问题:

  • 什么是d在开始代表什么?
  • 包含插槽的名称和用途是什么?它还能容纳哪些其他值?
  • 如何设置和取消设置?
  • 这有什么价值d?(因为你只有 7=4+2+1 7=4+2+1 7=4+2+1)
  • 为什么人们有时会使用0777而不是777来设置他们的权限?

但因为我不应该问多个问题,所以我会尝试用一个问题来问它。

在基于 UNIX 的系统(例如所有 Linux 发行版)中,关于权限,第一部分 ( d) …

linux ls permissions chmod

85
推荐指数
4
解决办法
7万
查看次数

sed 中的斜线和反斜线

我想用来将sed斜杠更改为反斜杠和斜杠,即/-> \/。但它不起作用。这里有一个小例子:

#!/bin/bash
TEST=/etc/hallo
echo $TEST
echo $TEST | sed "s/hallo/bello/g"
echo $TEST | sed "s/\//\\\//g"
Run Code Online (Sandbox Code Playgroud)

前三行的输出是假设的。但是最后一个不起作用。为什么?如何修正最后一部分?

bash sed quoting

51
推荐指数
2
解决办法
18万
查看次数

bc:为什么`ibase=16; obase=10; FF` 返回 FF 而不是 255?

我一直在使用bc二进制到十六进制、八进制到十进制等之间的数字转换。

在以下示例中,我试图将基数为 16(十六进制)的数字转换为二进制、八进制和十进制。

前 2 次尝试我没有任何问题。

$ echo 'ibase=16; obase=2; FF' | bc  
11111111
$ echo 'ibase=16; obase=8; FF' | bc 
377
Run Code Online (Sandbox Code Playgroud)

但是当我尝试将基数 16(十六进制)数字转换为基数 10(十进制)时,我得到了错误的答案。答案应该是255

$ echo 'ibase=16; obase=10; FF' | bc 
FF
Run Code Online (Sandbox Code Playgroud)

bc

23
推荐指数
1
解决办法
2088
查看次数

为什么 [ -n ] false 不像 [ -n "" ]?

我的问题是关于这段代码产生的返回值:

if [ -n ]; then echo "true"; else echo "false"; fi
Run Code Online (Sandbox Code Playgroud)

这打印true.

它的补充测试[ -z ]还使用打印true

if [ -z ]; then echo "true"; else  echo "false"; fi
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,为什么[ -n ]测试假设根本没有通过的字符串值,作为非空?

下面的代码打印false. 这是预期的,因为传递的字符串值为空且长度为零。

if [ -z ]; then echo "true"; else  echo "false"; fi
Run Code Online (Sandbox Code Playgroud)

bash

21
推荐指数
3
解决办法
1733
查看次数

循环变量

我正在编写一个 bash 脚本来在大约 20 个不同的服务器上使用 rsync 和更新文件。

我已经弄清楚了 rsync 部分。我遇到的问题是通过变量列表。

到目前为止,我的脚本如下所示:

#!/bin/bash
SERVER1="192.xxx.xxx.2"
SERVER2="192.xxx.xxx.3"
SERVER3="192.xxx.xxx.4"
SERVER4="192.xxx.xxx.5"
SERVER5="192.xxx.xxx.6"
SERVER6="192.xxx.xxx.7"

for ((i=1; i<7; i++))
do
    echo [Server IP Address]
done
Run Code Online (Sandbox Code Playgroud)

哪里[Server IP Address]应该是关联变量的值。因此,当 i = 1 时,我应该回显 $SERVER1 的值。

我已经尝试了几次迭代,包括

echo "$SERVER$i"    # printed the value of i
echo "SERVER$i"     # printer "SERVER" plus the value of i ex: SERVER 1 where i = 1
echo $("SERVER$i")  # produced an error SERVER1: command not found where i = 1
echo …
Run Code Online (Sandbox Code Playgroud)

bash shell-script

19
推荐指数
4
解决办法
2万
查看次数

为什么 pwd 不接受像 --physical 这样的长选项?

当我显示pwd命令手册时,它说--physical支持长选项

$ man pwd
PWD(1)                           User Commands                          PWD(1)

NAME
       pwd - print name of current/working directory

SYNOPSIS
       pwd [OPTION]...

DESCRIPTION
       Print the full filename of the current working directory.

       -L, --logical
              use PWD from environment, even if it contains symlinks

       -P, --physical
              avoid all symlinks
Run Code Online (Sandbox Code Playgroud)

但是,当我输入以下内容时它失败了

$ pwd --physical
-bash: pwd: --: invalid option
pwd: usage: pwd [-LP]
Run Code Online (Sandbox Code Playgroud)

为什么多头期权对我不起作用?

我正在使用 RHEL 6.4。没有为 pwd 配置别名。看起来是标准密码:

$ which pwd
/bin/pwd
Run Code Online (Sandbox Code Playgroud)

bash rhel pwd

11
推荐指数
2
解决办法
2486
查看次数

为什么 sed 默认不使用扩展正则表达式模式?

我正在使用 sed。据我所知,我使用的是正确的正则表达式,但 sed 没有做任何事情。原来我使用的是\s+哪个 sed 无法理解,当我切换到[ ]+它时,它起作用了。

所以总而言之,我做了一个正则表达式,为了让它工作,我必须逃避几乎所有的事情并删除\sfor 空格。似乎有一种模式可以避免所有这些,-r所以我想问:

  1. 为什么不是-rsed 的默认模式?为什么我要费那么多心思来逃避一切?
  2. man说有选项--posix并且“应该支持POSIX.2 BRE”这是指什么?NFA/DFA 模式?

linux sed regular-expression

10
推荐指数
1
解决办法
4920
查看次数

退出外壳后后台作业会发生什么?

从我的理解,工作是管道从某一个shell启动的,你可以管理这些作业(fgbg,按Ctrl-Z)从该壳体内。一个作业可以由多个进程/命令组成。

我的问题是当原始的包含 shell 退出时这些作业会发生什么?假设未设置 huponexit 以便后台进程在 shell 退出后继续运行。

假设我已经做了:

$ run.sh | grep 'abc' &
[1] job_id
Run Code Online (Sandbox Code Playgroud)

然后我退出这个shell。我将进入一个新的 shell 并运行jobs,但显然什么也看不到。但是我可以执行ps aux | grep run.sh并查看此进程的运行情况,我也会执行ps aux | grep grep并查看grep 'abc'运行的进程。

有没有办法只获取完整管道的作业 ID,以便我可以一次性杀死它,或者我是否必须在退出原始 shell 后与另一个 shell 分开杀死所有进程?(我尝试过后者并且它有效,但跟踪所有过程似乎很麻烦。)

shell process kill jobs

10
推荐指数
2
解决办法
1万
查看次数

KSH/BASH 数组的最大大小

ksh 和 bash 脚本的最大数组大小是多少?

示例:假设我有一个包含 10 个元素的数组。数组的特定索引可以容纳的最大字符串数是多少?相同的数组的最大大小是多少?

我是 Unix 的新手。我想这是一个常见问题,但我没能找到答案,所以我决定在这里提问。

bash ksh shell-script

8
推荐指数
1
解决办法
1万
查看次数