ls colors : 왜 내 글꼴 중 일부는 검은 색이고 다른 글꼴은 ls 출력에 있습니까?


10

글꼴 파일을 AWS (Amazon Linux 실행)에 업로드 하고 .ebextensions /usr/share/fontscp명령을 사용 하여 디렉토리 로 옮겼습니다 .

Mac에서 SSH를 사용하여 사용할 때 ls -a일부 파일의 색상이 다르게 표시됩니다. 한 글꼴 파일 세트는 검은 색이고 다른 파일은 녹색입니다. 이 원인이 무엇인지 궁금하고 코드에 문제가 발생할 경우 궁금 합니다 .

AWS Linux를 실행하는 Elastic Beanstalk의 fonts 디렉토리

LS -LA 스크린 샷

에서 AskUbuntu에 다른 답변 나는 이러한 색상을 해석하는 방법에 대한이 키를 발견했다. .ttf가 실행 가능한 이유 또는 한 세트의 .ttfs가 다른 것으로 인식되지 않는 이유를 이해할 수 없습니다.

파란색 : 디렉토리

녹색 : 실행 가능하거나 인식 된 데이터 파일

하늘색 : 링크 된 파일

검정색 배경의 노란색 : 장치

분홍색 : 그래픽 이미지 파일

빨간색 : 보관 파일

이 파일들은 모두 업로드하기 전에 다양한 글꼴 사이트에서 mac으로 다운로드되었습니다.


5
특정 색상 (파란색, 분홍색 등)은 아무 의미가 없습니다. 원하는대로 색상을 사용자 지정할 수 있습니다. linux-sxs.org/housekeeping/lscolors.html 특정 시스템의 색상을 확인하려면 echo $ LS_COLORS
beardedlinuxgeek

명확히하기 위해 내 의도는 실제로 색상 자체가 아니라 이것이 스크립트 / 코드에 문제가 있음을 나타내는 지 이해하는 것이 었습니다.
Pranab

답변:


13

ls -l파일이 실행 가능한지 아닌지를 확실히 알려줍니다. 나는 여기에 큰 신비가 없다고 생각합니다. 여러 가지 소스에서 각각 다른 이유로 권한 비트가 다르게 설정되어있는 파일을 다운로드했습니다. * try chmod -x *.ttf... font 파일이없는 색상 및 다른 색상을보고 싶지 않은 경우 실행 가능한 비트 세트가 필요하지 않습니다.

* Matteo Italia의 높은 의견 수렴 의견은 보존해야한다고 말합니다. 대부분 실행 파일을 저장하지 않는 FAT 또는 NTFS 볼륨에서 복사 되었으므로 모든 파일에 실행 파일 세트가 설정되도록 기본적으로 마운트됩니다 .


1
바로 그거죠. '실행 가능'권한이 설정된 일반 파일과 그렇지 않은 파일의 유일한 차이점은 명령 줄에서 파일을 실행하려고 할 때 x 비트가 설정된 파일의 경우 OS가 프로그램을 사용하려고 시도한다는 것입니다 그러한 파일은 시스템에 정의되어 해당 파일을 엽니 다.
그누 디프

2
@Pranab 아니오, 폰트에는 차이가 없어야합니다.
그누 디프

1
@Pranab Glad 도와 드릴 수 있습니다. 키보드가있는 적절한 컴퓨터를 사용하는 경우 좀 더 유용한 정보를 제공하여 더 넓은 컨텍스트를 사용할 수 있도록 노력할 것입니다.
그누 디프

1
실제로, 나는 달리 알지 못하는 사람을 오도하지 않기를 원합니다. 여기에서 나의 원래 의견에서 잘못된 비트를 뺀 것입니다. 비트가 설정 될 수있는 여러 가지 이유가 있습니다. 파일을 "따라갈"수 있습니다. (이것은 그것을 복사하는 각 사람이 원래의 비트를 보존한다고 가정합니다.) 그것은 어떤 경우에도 거의 무해합니다.
B Layer

12
대부분은 실행 가능 비트를 저장하지 않는 FAT 또는 NTFS 볼륨에서 복사 되었으므로 모든 파일에 실행 가능 비트가 설정되도록 기본적으로 마운트됩니다 .
Matteo Italia

6

ls실행중인 명령이 별칭 인 것처럼 보입니다.ls --color

남자 ls

--color [= WHEN]은 출력물을 채색합니다. WHEN은 'always'(생략시 기본값), 'auto'또는 'never'일 수 있습니다. 아래에 더 많은 정보

원점을 실행하여 확인할 수 있습니다 ls.

  • 따옴표 사용 :

    "ls"-a

  • 전체 경로를 사용하여 (예 : ls위치가에있는 경우 /bin/ls) 색상이 표시되는지 여부를 확인하십시오.

    / bin / ls -a

참고 : running ls -la은 파일의 세부 정보를 표시하며 각 파일의 전체 세부 정보를 볼 수 있으므로 예상되는 출력을 확인할 수 있습니다.ls --color


핵심 명령을 얻는 방법이 얼마나 흥미 롭습니다. 따옴표로 묶은 서라운드 방법을 알지 못했습니다. 적어도 bash를 사용하면 명령 앞에 백 슬래시를 \ls -a사용하거나 'command'내장을 사용할 수 있습니다 command ls -a. 명령을 실행하지 않고 해결하는 방법을 보려면 다음이 type -a ls있습니다.
B 레이어

@BlairM. 따옴표와 백 슬래시 메서드는 별칭 확장 만 방지합니다. 쉘 함수 나 내장 함수가 있으면 아무런 영향을 미치지 않습니다 ls.
shadowtalker 2016 년

@ssdecontrol 맞습니다. 나는 다른 제안을하지 않았습니다 ... 우리는에 관한 별칭에 대해 이야기하고있었습니다 ls. 그러나 좋은 정보입니다.
B 레이어

4

색상은 파일이 "실행 가능"으로 표시되어 있음을 나타냅니다 *

실행 권한 비트 (하나는 사용자, 하나는 그룹, 하나는 다른 하나)는 파일 이름이 exec 시스템 호출 중 하나로 전달되면 커널이 계속 진행하여 예상한다는 것을 의미합니다.

실제로 예상되는 파일 만 실행 가능 비트가 설정되어 있습니다. 그러나 특히 다중 플랫폼 환경에서 파일을 이동 / 복사 할 때 실수로 실행 비트를 얻거나 잃기 쉽습니다.

유닉스 권한 (fat, ntfs 등)을 지원하지 않는 파일 시스템에 저장된 파일은 시스템에 실행 파일로 나타날 수 있습니다. 권한을 유지하는 도구를 사용하여 이러한 파일을 유닉스 파일 시스템으로 이동하거나 복사하면 해당 실행 비트가 유지됩니다.

반면, 권한을 보존 할 수 없거나 권한을 선택 취소하는 옵션과 함께 사용되는 파일을 이동하는 도구를 사용하면 원본이 원본 인 경우에도 사본이 실행 가능으로 표시되지 않을 수 있습니다.

따라서 다양한 도구를 사용하여 다양한 플랫폼을 이동 한 후에는 실행 권한 비트가 상당히 임의의 상태가 될 수 있습니다.

* 실행 비트가 전부는 아니지만 일부가 설정된 경우 ls가 어떻게 처리되는지 확실하지 않습니다.


2

이전 답변에서 말했듯이 색상은 파일이 실행 가능한 것으로 간주되는지 여부를 나타냅니다.

Linux 및 대부분의 다른 유닉스에서 "실행"권한 (= 비트)은 파일과 디렉토리에 대한 하나의 의미를 갖습니다.

디렉토리의 경우, 실행 권한이 있으면 해당 내용을 볼 수 있습니다. 그렇지 않으면 디렉토리에 대한 읽기 및 쓰기 액세스 권한이 있더라도 디렉토리로 CD를 넣거나 파일을 나열 할 수 없습니다.

장치 파일 및 기타 특수 Unix 파일 형식과 달리 일반 파일의 경우 실행 비트는 명령 줄에서 파일 이름을 사용하는 경우 O / S (또는보다 정확하게는 셸)가 "실행"또는 실행을 시도 함을 의미합니다. 파일을 명령으로 사용합니다. 반대로 파일에 대한 실행 권한이 없으면 명령 줄에서 실행할 수 없습니다.

예를 들어, / bin / cat 파일 (Unix 명령 인)의 모든 사용자로부터 x 권한을 제거하면 다른 사람이나 "cat"명령을 사용하려는 모든 프로그램이 실패합니다.

그런 다음 "cat"및 "grep"와 같은 OS 명령으로 / * / bin / 디렉토리 (/ bin, / usr / bin, / sbin, / usr / sbin 등)에서 일반적으로 실행할 수있는 파일이 있습니다.

그리고 컴파일되지 않은 해석 된 스크립트가있을 수 있습니다.이 스크립트는 Python 또는 셸 스크립트와 같은 일부 프로그래밍 언어로 작성됩니다 (기본적으로 서버에 sshing 할 때 명령 줄에서와 같이 작성하는 명령).

이제 스크립트 파일 (예 : 파일 foobar)에서 실행 비트를 설정하고 셸에서 "./foobar"로 실행하려고하면 셸에서 파일을 분석하고 스크립트를 전달할 올바른 프로그램을 찾습니다. 에.

이것은 쉘이 파일의 첫 번째 행을 읽고 이것이 실행되어야하는 프로그램 의 "shebang"표기법 을 찾아서 수행합니다.

따라서 foobar가 다음과 같이 첫 줄이있는 텍스트 파일 인 경우 :

#!/usr/bin/python

그런 다음 쉘은 /usr/bin/python foobar기본적으로 파이썬 인터프리터를 호출하고 foobar 파일의 이름을 파이썬 스크립트로 전달하여 command :을 실행하려고 시도합니다 .

쉘이 파일에서 첫 줄을 찾지 못하면 쉘 명령을 포함하는 것처럼 foobar 자체를 실행하려고 시도합니다.

실행 비트가있는 파일에 유효한 쉘 명령이 포함되어 있지 않으면 쉘은 단순히 불평합니다.

따라서 exec 비트가 설정된 TTF 파일이 있고 명령 줄에서 실행하려고 시도한 경우 이런 일이 발생합니다.

$./FreeMonoOblique.ttf
-bash: ./FreeMonoOblique.ttf: cannot execute binary file: Exec format error
$

따라서 글꼴의 경우 exec 비트가 설정되지 않았지만 실제로 아무것도 변경하지 않으면 더 깔끔합니다.

추신. 단지 관련없는 정보. 일부 명령 또는 스크립트에서 실행 비트를 제거하면 여전히 다른 프로그램에 인수로 전달 될 수 있습니다. 다른 프로그램이 명령을 실행하는 방법을 알고 있다면 exec 비트 제거는 중요하지 않습니다. 예를 들어, foobar Python 스크립트는 단순히 명령 행에서 수행 한 경우 Python 인터프리터에서 계속 실행됩니다.

$python foobar

대신에

$./foobar

"cat"과 같은 시스템 명령의 예와 동일합니다. "cat"에서 exec 비트를 제거해도 여전히 실행을 위해 쉘의 새 인스턴스로 전달할 수 있습니다.

$sh -c 'cat myfile'

고양이에서 exec 비트를 제거한 경우에도 작동합니다.

$cat myfile

하지 않습니다.


2
내 시스템에서, 적어도 같은 바이너리 실행 파일의 실행 비트를 설정 해제 cat또는 echo않습니다 하지 당신이를 통해 그것을 실행하자 sh -c 'cat myfile'와 함께, 나 system("cat", "myfile")루비 같은 언어이다. 파이썬이 실행 불가능한 .py파일을 실행할 수있는 이유 는 파일을 텍스트 문자열로 읽은 다음 인터프리터를 사용하여 해당 텍스트를 마치 코드처럼 작동하게하기 때문입니다.
Ethan Kaminski

@EthanKaminski 재미있는. 나는 그것이 나를 위해 일하는 것을 분명히 기억하지만 세부 사항을 확인해야합니다.
Gnudiff

1
@Gnudiff 바이너리 실행 파일의 경우 execve시스템 호출은 실행 권한을 요구합니다. glibc 기반 시스템에서 동적 링커를 프로그램으로 호출하여 shebang 행 ( /lib64/ld-linux-x86-64.so.2 /bin/cat)과 거의 동일한 효과를 얻을 수 있으며 명령 행의 파일이 실행 가능 sh -c cat하지 않더라도 작동합니다. 당신을 위해.
zwol

파일을 예측할지 여부와 방법을 결정하는 것은 쉘이 아니라 커널입니다. 셸은 실행 파일 이름과 매개 변수를 커널에 전달합니다.
plugwash
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.