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

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

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

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

LS -LA 스크린 샷

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

파란색 : 디렉토리

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

하늘색 : 링크 된 파일

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

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

빨간색 : 보관 파일

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



답변

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

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


답변

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

남자 ls

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

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

  • 따옴표 사용 :

    “ls”-a

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

    / bin / ls -a

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


답변

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

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

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

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

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

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

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


답변

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

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

하지 않습니다.


답변