rm 와일드카드는 Raspberry Pi OS에서 작동하지 않습니다.

rm 와일드카드는 Raspberry Pi OS에서 작동하지 않습니다.

다음과 같은 디렉토리 목록이 있습니다.

  0 -rw-r--r-- 1 root root      0 Sep  2 15:19 aws.greengrass.LambdaLauncher.log
  0 -rw-r--r-- 1 root root      0 Sep  2 15:19 aws.greengrass.LambdaRuntimes.log
  0 -rw-r--r-- 1 root root      0 Sep  2 14:53 aws.greengrass.Nucleus.log
 80 -rw-r--r-- 1 root root  75017 Sep  2 15:55 greengrass_2022_09_02_15_0.log
 40 -rw-r--r-- 1 root root  36930 Sep  2 16:50 greengrass_2022_09_02_16_0.log
216 -rw-r--r-- 1 root root 217065 Sep  2 20:40 greengrass_2022_09_02_20_0.log
 96 -rw-r--r-- 1 root root  92764 Sep  2 21:54 greengrass_2022_09_02_21_0.log
 64 -rw-r--r-- 1 root root  58307 Sep  2 22:57 greengrass_2022_09_02_22_0.log
 48 -rw-r--r-- 1 root root  46475 Sep  6 14:37 greengrass_2022_09_06_14_0.log
 16 -rw-r--r-- 1 root root  14845 Sep  6 17:57 greengrass_2022_09_06_17_0.log
 40 -rw-r--r-- 1 root root  39037 Sep  6 18:11 greengrass_2022_09_06_18_0.log
184 -rw-r--r-- 1 root root 186318 Sep  6 19:48 greengrass_2022_09_06_19_0.log
 12 -rw-r--r-- 1 root root  10793 Sep  6 20:25 greengrass_2022_09_06_20_0.log
124 -rw-r--r-- 1 root root 122363 Sep  6 21:43 greengrass.log

이름이 greengrass로 시작하는 파일을 삭제하고 싶습니다. 다음 와일드카드 명령을 시도했지만 아무 것도 작동하지 않습니다.

sudo rm /greengrass/v2/logs/greengrass*.*
sudo rm /greengrass/v2/logs/greengrass*
sudo rm /greengrass/v2/logs/greengrass*.log

나는 얻다:

rm: cannot remove '/greengrass/v2/logs/greengrass*.*': No such file or directory

답변1

지금 일어나고 있는 모든 일은 글로벌 확장에 관한 것입니다.

실행할 때:

 sudo rm dir/*

sudo를 실행하는 셸은 "*" 와일드카드 문자를 확장하려고 시도합니다. 디렉토리를 읽을 수 없는 경우 와일드카드는 그대로 sudo에 전달됩니다.

sudo는 실행 rm되고 dir/*rm은 전역 확장을 실행하지 않고 쉘 실행만 실행합니다. rm은 *합법적이지만 특이한 파일 이름인 이라는 파일을 찾고 있습니다 .

sudo를 실행하는 사용자가 디렉터리를 읽을 수 있는 경우 acutall sudo 명령은 다음과 같습니다.

sudo rm dir/filea dir/fileb dir/filec

이것은 작동합니다. 루트를 전역으로 확장하려면 다음과 같이 셸을 사용해야 합니다.

sudo sh -c "rm dir/*"

그런 다음 sudo는 "rm dir/*" 명령을 실행하는 루트로 쉘을 실행합니다. 쉘은 glob을 확장하는 방법을 알고 있으므로 "rm dir/filea dir/fileb ..."가 됩니다.

답변2

일반 사용자가 /greengrass/v2/logs 디렉터리를 읽을 수 있습니까? 그렇지 않은 경우 쉘이 파일 목록과 일치하도록(파일을 전달하기 전에 sudo) 와일드카드를 확장해야 rm하고 쉘이 디렉토리의 내용을 나열할 수 없는 경우에는 그런 일이 발생하지 않기 때문에 그렇게 합니다 .

가장 간단한 해결책은 아마도 sudo -s루트 셸을 열고 rm /greengrass/v2/logs/greengrass*.*해당 루트 셸에서 실행하는 것입니다. 그런 다음 또는 Control-D를 사용하여 exit루트 쉘을 종료하고 정상으로 돌아갑니다.

관련 정보