Linux 명령에서 대문자를 사용할 수 있습니까? 지원된다는 것은 알고 있지만 이것이 "문제"인지 "좋지 않은 것"으로 간주되는지 확인하고 싶습니다.
답변1
예, 가능합니다. 이미 일부가 있습니다. 예를 들어 /usr/bin/X
:)
dennis@lightning:~$ ls {/usr{/local,},}/{s,}bin | grep '[A-Z]'
MAKEDEV
amuFormat.sh
GET
HEAD
Mail
POST
X
X11
Xephyr
Xnest
Xorg
NetworkManager
dennis@lightning:~$ zcat ~/.cache/apt-file /archive.ubuntu.com_ubuntu_dists_precise_Contents-i386.gz | tail -n +33 | cut -f1 | grep -P '^(usr/)?s?bin/.*[A-Z]' | wc -l
758
따라서 Ubuntu 12.04의 총합은 758입니다. 전체 목록:https://gist.github.com/5264777
답변2
Unix에서는 명령 이름에 제한이 없습니다. 모든 파일은 명령이 될 수 있습니다. 파일 이름은 ASCII NUL 또는 ASCII 이외의 하나 이상(그러나 최대 제한된 수의) 문자로 구성된 시퀀스일 수 있습니다 /
. zsh
함수가 모든 문자열을 함수 이름으로 사용할 수 있다는 제한도 해제됩니다.
그러나 몇 가지 주의 사항이 있습니다.
.
또는 ;-)라는 명령 파일을 만드는 데 어려움을 겪을 것입니다..
.- 쉘 내장 또는 키워드(적어도 , 또는 와 같은 가장 일반적인 쉘)가 사용하는 표준 명령이나 이름을 사용하지 마십시오
bash
. 표준 명령에서는 일반적으로 대문자를 사용하지 않으므로 대문자가 도움이 될 수 있습니다.zsh
tcsh
ksh
- ASCII 문자로 제한하는 것이 가장 좋습니다. 비ASCII 문자는 다양한 문자 집합에서 다르게 표현됩니다.
- 이때 문자, 숫자, 대시, 점, 밑줄만 사용하도록 제한하세요. 다른 모든 것은 합법적이지만 이 도구나 저 도구에서 어떤 식으로든 문제를 일으킬 수 있습니다(예:
|
,=
및&
기타 많은 명령은 셸에서 이스케이프해야 하며 ..를:
사용하는 경우 명령을 로그인 셸로 사용할 수 없습니다. .). 사용자가 셸 함수에서 명령을 래핑할 수 있도록 하려면 함수 이름에서 허용하지 않는 많은 셸을 제외할 수도 있습니다.
.-
- 첫 번째 문자를 문자로 만듭니다. 다시 말하지만 이는 엄격한 요구 사항은 아닙니다. 그러나 밑줄은 때때로 특수한 항목(예:
zsh
완성 시스템으로 시작하는 함수_
)에 사용되며 모든 숫자 명령은 과 같은 문제를 일으킬 수 있습니다cmd>output.log
. 이름이 점으로 시작하는 파일은ls
쉘 와일드카드와 많은 파일 관리자에 의해 숨겨집니다.
답변3
STTY
일부 부정확성을 명확히 하기 위한 역사적 명령에 대한 몇 가지 참고 사항기타 답변 및 관련 의견:
다음과 같은 초기 터미널VT05 12월또는VT50이전 텔레타이프는 대문자만 지원했습니다. 이는 소문자를 입력할 수 없거나 대문자 이외의 다른 문자를 표시할 수 없음을 의미합니다.
Unix는 대소문자를 구분하며 대부분의 명령이 소문자로 되어 있으면 거기에서 문제를 확인할 수 있습니다. 그렇기 때문에 이러한 문제를 해결하기 위해 특별한 termio/termios 모드(이러한 터미널은 오래 전에 사라졌지만 여전히 현대 Unices에 존재함)가 있습니다.
termio/termios는 각각 Unix에서 tty 드라이버를 제어하기 위한 이전 인터페이스와 새 인터페이스입니다. 용어에서는 ioctl
입력, 출력, 제어 플래그를 지정합니다. 직렬 회선의 전기 신호가 입력 및 출력 문자로 처리되는 방식과 에코, 라인 편집기와 같은 드라이버의 내부 동작을 지정합니다. 이들 중 대부분 최신 Unix VGA 콘솔이나 의사 터미널과 같은 가상 터미널에 적용됩니다.
명령줄 인터페이스는 termio(s)
단지 stty
명령에 관한 것입니다.
대문자 터미널을 처리하려면 세 가지 termio(s)
플래그가 필요합니다.
IUCLC
(입력을 대문자에서 소문자로 변환): 입력 시 들어오는 문자를 소문자로 변환합니다. 이는A
터미널이 보내는 내용이 으로 처리됨을 의미합니다a
. 즉, 이 기능을 활성화하면 이제LS
VT50에 입력할 수 있고 셸이 에서ls
실행될 수도 있습니다/dev/ttyX
.stty
- 이제
IUCLC
단독 및 터미널을 사용하여echo
를 입력하면LS
드라이버가ls
터미널로 다시 전송하지만(입력한 내용을 볼 수 있도록) 표시할 수 없으므로OLCUC
(소문자를 대문자로 출력)도 필요합니다. 터미널로 보내기 전에 모든 소문자를 대문자로 변환해야 합니다. - 이제 VT50에서 Unix를 실행할 수 있습니다. 하지만 이제 대문자를 입력하고 싶다면 어떻게 해야 할까요? 그건
xcase
현지의로고가 나타납니다. 이를 통해 (표준 입력 모드에서만)A
를 입력하여 대문자를 보낼 수\A
있으며, 출력 시 대문자는A
로 렌더링됩니다\A
. (이 기능은 Linux에서는 구현되지 않습니다.)
이 stty
명령에는 세 가지 모두에 해당하는 iuclc
, olcuc
설정 및 별칭이 있습니다 . 기본 설정과 결과는 꺼져 있습니다 .xcase
lcase
stty sane
lcase
따라서 VT50을 사용할 때 해야 할 일은 다음을 실행하는 것뿐입니다.
stty lcase
무엇이든 할 수 있습니다. 그런데 잠깐, 대문자만 보낼 수 있다면 어떻게 해야 할까요? 여기에서 STTY
별칭으로 명령이 필요하며 stty
, 이것이 바로 별칭이 stty
지원되는 이유입니다 .LCASE
lcase
터미널이 모두 대문자일 때는 별칭을 사용하고 싶지 않기 때문에 그러한 별칭은 없습니다 SANE
.stty sane
일반 터미널에서 실행 중이 stty lcase
거나 stty olcuc
잘못 실행 중인 경우(또는 최신 터미널에서 시도 ) 정상으로 돌아가려면 xterm
입력이 필요합니다 . 하지만 이를 위해서는 명령이 stty sane
필요하지 않습니다 . STTY
를 입력하면 stty sane
,~ 할 것이다에코가 표시되지만 STTY SANE
이것은 번역될 표시된 텍스트일 뿐이며(입력된 명령이 아님) 여전히 stty sane
실행될 명령입니다.
이러한 iuclc
, olcuc
, xcase
플래그는 한때 POSIX에 의해 지정되었지만(아마도 이것이 Linux에서 구현된 이유일 것입니다. 누군가가 이 오래된 터미널을 (재미를 제외하고) Linux 시스템에 연결한 적이 있는지 심각하게 의심스럽기는 하지만) POSIX:2001에서 구현되었습니다. .
답변4
Fedora 18에서:
amuFormat.sh
chkrootkitX
enum_chmLib
enumdir_chmLib
extract_chmLib
fakeCMY
GET
HEAD
Mail
oLschema2ldif
POST
smoltDeleteProfile
smoltGui
smoltSendProfile
smp_conf_zone_man_pass.#prelink#.coLtYv
Terminal
test_chmLib
Thunar
X
Xephyr
xfig-Xaw3d
Xorg
Xvnc
MAKEDEV
NetworkManager
amuFormat.sh
chkrootkitX
enum_chmLib
enumdir_chmLib
extract_chmLib
fakeCMY
GET
HEAD
Mail
oLschema2ldif
POST
smoltDeleteProfile
smoltGui
smoltSendProfile
smp_conf_zone_man_pass.#prelink#.coLtYv
Terminal
test_chmLib
Thunar
X
Xephyr
xfig-Xaw3d
Xorg
Xvnc
MAKEDEV
NetworkManager
총 50명(대부분은 내가 알지 못함)