update-os 명령에 대해 알아보기

update-os 명령에 대해 알아보기

저는 Linux 기반 장치를 처음 사용합니다.

update-os 명령을 사용하여 펌웨어를 업데이트해야 하는 장치가 있습니다.

이 명령을 입력하면 사용법을 묻는 메시지가 나타납니다.

Update-os [--dry-run] FILE | URL [-V ]

무슨 뜻이에요? 업데이트할 파일이 두 개 있습니다. 하나는 os-update이고 다른 하나는 update.bin 파일입니다.

이 명령을 사용하는 방법은 무엇입니까? .bin 파일이 포함된 동일한 디렉터리에서 다음 명령을 실행해 보았습니다.

Update-os update.bin

하지만 다시 명령을 사용하라는 메시지가 표시됩니다. 그런 다음 다음을 시도합니다.

Update-os update.bin | /home/test/

하지만 그것은 말한다/home/test/ permission denied

sudo를 사용해봤는데..

Sudo Update-os update.bin | /home/test/

하지만 같은 허가가 거부되었습니다 ...

어떤 도움이라도 대단히 감사하겠습니다... 안부 인사,

답변1

사용법을 읽는 방법:

Update-os [--dry-run] FILE | URL [-V ]

첫 번째 단어는 실행하려는 실행 파일입니다: Update-os.

[--dry-run]- 대괄호는 "선택적 매개변수"를 나타내므로 이 옵션을 추가하거나 추가하지 않을 수 있습니다. 일반적으로 "모의 실행"은 실행 파일이 실제로 실행하지 않고 실행 중에 수행해야 할 작업을 알려주는 것을 의미합니다. 기대한 대로 정확하게 수행된다는 확신이 들 때까지 처음 몇 번의 실행에는 이 방법을 사용하는 것이 좋습니다.

FILE | URL- |여기서 막대 기호는 "또는"을 의미합니다. 명령줄에서 파일이나 URL을 지정할 수 있습니다. 실행 파일은 이 파일이나 URL을 사용하여 작업을 수행합니다.
참고: |명령줄에서 사용되는 것은 다른 의미를 갖습니다. 즉, stdout하나의 명령을 다른 명령으로 전송합니다 stdin. 이렇게 하면 Uodate-os update.bin | /home/test/화면에 인쇄된 모든 내용이 Update-os명령에 의해 처리되기를 원한다는 의미입니다 /home/test/. 그러나 이것은 명령이 아닌 디렉터리이므로 오류가 발생합니다.

[-V ]다시 선택 사항입니다. 그것이 무엇을 하는지는 확실하지 않지만 일반적으로 -v또는 -V옵션은 작업 중에 버전이나 자세한 설명을 인쇄하도록 실행 파일에 지시합니다. 실행 파일의 문서에서 직접 찾아야 합니다. 아니면 그냥 실행하세요( --dry-run바람직하게는).

답변2

질문 제목은 "Linux 명령 이해"입니다.

그래서 나는 당신의 예조차도 주제에서 벗어난 것 같아요.

나는 상향식으로 Unix 명령을 가르치는데, 이것은 학교나 일반적인 교육 방식과는 완전히 다르며, 내 경험상 이것이 전통적인 접근 방식보다 학생들에게 더 잘 작동합니다.


그럼 시작해 보겠습니다.

가장 먼저 알아야 할 것은 programa 와 a 의 차이점 입니다 process.

유닉스에서의 차이점은 매우 간단합니다. program작동하는 일부 코드가 포함된 디스크(파일 시스템)의 어리석은 "죽은" 파일일 뿐입니다(그러나 실행 상태는 아닙니다). program중요하지만 그 자체로는 쓸모가 없습니다. 오래전에 죽은 동물의 해골과 같습니다.

살아있는 동물이 생존하려면 뼈가 필요하지만, 뼈 자체에서 추출된 뼈는 죽은 물체에 불과합니다. 마찬가지로 a program도 죽은 것입니다. 디스크에는 시체처럼 프로그램이 쌓이고, 이러한 프로그램은 기본적으로 저장소에만 존재하는 파일일 뿐입니다.

이제 a는 process컴퓨터 메모리에 있는 모든 프로그램의 "실시간" 인스턴스입니다.

즉, 유닉스에서 프로그램을 실행할 때 시스템은 파일(스켈레톤)을 가져와 process메모리 어딘가에 하나("살아있는 동물")를 구성하고 해당 스켈레톤(프로그램)을 동물(프로세스) 중간에 넣습니다. 프로세스는 프로세스보다 "그 이상"이지만 program내부 프로세스 없이는 생존할 수 없습니다 program(내부 프로세스가 있음).

따라서 "프로그램 실행" 명령이 끝나면 실행이 시작되므로 "살아있다"는 것은 processprogram안에 넣은 뼈대(a)를 기반으로 한 "모양"과 "행동"을 갖게 됩니다. 메모리와 CPU에서 "라이브"로 처리됩니다.

이제 중요한 질문은 예를 들어 프로그램이 얼마나 많은 프로세스를 생성할 수 있는가 하는 것입니다.

많은 답변이 있습니다(무한대, 실제로 또는 오히려 기억할 수 있는 만큼 많음).

실제로 프로그램과 이를 실행하는 프로세스 사이에는 1:N 매핑이 있습니다.

이 정보를 통해 당신은 이미 다른 초보자보다 더 많은 것을 알고 있을 것입니다.


이제 우리가 볼 수 있듯이 프로세스는 실행 중인 프로그램 그 이상입니다.

프로세스에 CPU가 할당되었습니다. 프로세스에는 메모리와 기타 여러 컴퓨터 리소스가 할당됩니다.

프로세스에는 이라는 또 다른 항목이 할당되어 있습니다 argument vector.

이건 뭐죠?

"주문한 단어주머니" 입니다. Ordered는 패키지에 있는 단어의 순서가 중요하다는 것을 의미합니다. 프로그래밍을 안다면 배열이라고 생각할 수 있습니다.


왜 필요한가요?

시스템이 프로세스를 생성하는 순간으로 돌아가 보겠습니다. 시스템은 최소한 새로운 프로세스를 구성할 프로그램의 이름을 알아야 합니다.

프로세스를 구성하는 데 사용되는 프로그램 이름은 항상 입니다 argument vector.

이는 많은 간단한 프로그램에서 잘 작동하지만 일부 프로그램은 훨씬 더 복잡한 목적을 가지고 있습니다. 예를 들어 무언가를 처리하고, 이를 다른 것으로 변환하고, 무언가를 수행하고, 결과를 반환할 수도 있습니다.

사용할 프로그램 파일의 이름을 지정하는 것 외에도 이것이 바로 의 목적입니다 argument vector. 작업을 수행하는 데 필요한 모든 정보를 빌드 프로세스에 전달하는 데 사용됩니다.


의 단어 수에는 제한이 없지만 argument vector서로 구별되어야 합니다. ( 안의 ) 단어는 argument vector있는 그대로 프로세스에 전달됩니다. 지금까지는 argument vector배열의 각 요소를 단순히 "단어"라고 부르는 것이 약간 어리석습니다. "일반적인" "텍스트" 단어와 구별하기 위해 다음을 호출하는 것이 좋습니다: arguments.

매개변수의 의미와 그 순서는 "처리"되는(즉, 매개변수가 전송되는) 프로그램에 의해서만 이해될 수 있습니다. 그러므로 각 프로그램은 자신만의 세계, 자신만의 언어, 자신이 이해하는 단어/매개변수입니다.

그런 다음 생성된 프로세스는 단어를 하나씩 읽고 argument vector내용에 따라 작업을 시작합니다. 이는 다시 프로그램에 의해 제어됩니다.

일반적으로 의 독립형 단어/인수는 arg. vector파일이나 파일(또는 디렉터리)에 대한 경로를 나타냅니다.


쉘은 입력 라인을 공백 ​​문자 경계의 벡터 단어로 자동으로 분할합니다. mv oldfile newfile껍질 와이어는 결국 argument vector절단 됩니다 ["mv","oldfile","newfile"].

이제 우리가 말했듯이 시스템은 항상 첫 번째 단어를 argument vector"처리"될 프로그램(인스턴스화)에 대한 경로로 해석합니다. 따라서 이 예에서 실행할 프로그램은 입니다 mv.

따라서 지금까지 우리가 가지고 있는 모든 정보를 사용하여 의 벡터는 ["mv","oldfile","newfile"]대략 다음과 같이 해석됩니다. 라는 프로그램을 실행 하고 두 개의 인수 를 mv제공합니다 .oldfilenewfile

이제 우리가 이미 말했듯이 각 매개변수의 의미는 mv프로그램 자체에 의해 완전히 해석됩니다.

mv그래서 프로그램에서 일반적으로행동전달된 인수(마지막 인수 제외)와 동일한 이름을 가진 파일은 파일(존재하지 않는 경우) 또는 디렉토리(이미 존재하는 경우)에 배치되며 에 전달된 마지막 단어로 사용됩니다 argument vector.

따라서 ["mv","oldfile","newfile"]기본적으로 이는 "oldfile"이라는 파일을 "newfile"이라는 파일로 "이동"(또는 "이름 바꾸기")하거나 "oldfile"이라는 파일을 "newfile"이라는 파일로 "이동"하는 것을 의미하게 됩니다. 존재한다면.

다시 말하지만, 결과 프로시저가 인수를 처리하는 방법은 전적으로 호출되는 프로그램(즉, mv프로그램)에 따라 다릅니다.


arg. vector우리는 일반적으로 의 각 개별 단어가 경로를 나타내는 것이 관례라고 말했습니다(필수는 아니지만!!!) .

그러나 때때로 우리는 프로그램의 동작을 약간 변경하기 위해 경로뿐만 아니라 다른 정보를 프로그램에 전달하고 싶을 수도 있습니다.

-수십 년 동안 사용된 후, 또는 --문자로 시작하는 매개변수는 프로세스의 동작을 수정하는 매개변수 라는 비공식적인 합의가 이루어졌습니다 .

우리는 이러한 각 인수를 "인수"라고 부릅니다 a flag. 다시 말하지만, 플래그의 의미는 전적으로 프로그램에 따라 다릅니다!


예를 들어, 프로그램은 mv또한 하나의 인수, 명명된 플래그 -v와 명명된 플래그를 허용합니다 --verbose. 두 가지 모두 동일한 작업을 수행합니다. 즉, 수행 중인 작업에 대한 정보를 인쇄합니다.

따라서 mv -v oldfile newfile결국 결과는 잘라내어 argument vector인쇄 ["mv","-v","oldfile","newfile"]됩니다 mv.

$ mv -v oldfile newfile
renamed 'oldfile' -> 'newfile'

"oldfile"의 이름을 "newfile"로 바꿉니다.


일부 프로그램은 유용한 작업을 수행하기 위해 최소한 하나의 매개 변수를 제공해야 할 정도로 복잡합니다.

이것은 귀하의 프로그램의 경우입니다.

따라서 인수 없이 호출될 때 이러한 프로그램은 아무 작업도 수행하지 않고 최소한 프로그램 사용 방법을 설명하는 몇 가지 힌트를 인쇄합니다.

수십 년 동안 사용되면서 "미니 언어"는 이러한 단서를 중심으로 발전했습니다.

하지만 조심하세요!

당신이 발견했듯이, 이 작은 프롬프트 언어는 쉘 언어와 아무 관련이 없습니다.

프롬프트 라인이 기껏해야 잘못된 쉘 라인인 경우, 최악의 경우 쉘에 있는 그대로 피드백하면 완전히 잘못된 작업을 수행하여 잠재적으로 치명적인 손상을 초래할 수 있습니다.

따라서 이전처럼 프롬프트 라인을 쉘에 반환하지 마십시오!

[프롬프트 라인의 문자는 쉘 라인의 문자와 완전히 다른 의미를 갖습니다 [. 두 가지를 혼동하지 마십시오!

마찬가지로 |프롬프트 라인의 의미는 쉘 라인의 의미와 완전히 다릅니다! 다시 한번 두 가지를 혼동하지 마십시오!


White Owl@이 이미 말했듯이, 전통적으로 []괄호 안의 매개변수는 매개변수가 선택사항임을 의미합니다.

|프롬프트 라인의 의미는 or여러 가능한 호출 중에서 선택하는 것입니다.

형식 등에 입력된 매개변수 BIG LETTERS는 매개변수/단어가 "객체"의 주어진 "클래스"로 해석된다는 것을 의미합니다. 즉, 해당 단어는 인터넷 서버의 경로 또는 URL로 이해됩니다.FILEURL

프로그램이 어느 것을 결정하는지는 전적으로 프로그램 자체에 달려 있지만, 예를 들어 일반적으로 "file" 매개변수가 URL 패턴 문자(예: "https://")로 시작하는 경우 프로그램은 이를 URL이라고 가정합니다. .


지금까지 알아차렸듯이 프롬프트 라인을 읽는(그리고 쓰는(!)) 것은 예술이 될 수 있습니다(심지어 어두운 라인이라도). 솔직히 말해서, 여러분의 프로그램이 정확히 무엇을 할지는 아무도 모릅니다. 프롬프트 라인은 바로 프롬프트입니다.

확실히 알 수 있는 유일한 방법은 특정 프로그램에 대한 설명서를 읽는 것입니다.

이것은 프로그램이 실제로 어떻게 작동하는지 설명하는 유일한 권위 있는 소스입니다(항상 사실이 아닌 경우에도 - 예를 들어 문서(!!) 또는 프로그램(!!!)에 버그가 있을 수 있음).

그러나 보시다시피, 우리 고급 사용자는 삶에서 프롬프트 라인을 충분히 보았고 많은 프로그래머는 삶에서 충분한 프로그램을 작성했기 때문에 이 프로그램이 무엇을 할 것인지, 언제 수행할지에 대해 대략적인 가정을 할 수 있습니다.

이름과 자체 보고된 프롬프트 라인을 통해 다음과 같이 "추측"할 수 있습니다.

  • 이 절차는 장치의 운영 체제를 업데이트합니다. ( update-os참고: unices는 대소문자를 구분하며 문자 크기는 중요합니다!!!)
  • 프로그램에는 실제로 실제 업데이트를 수행하지 않고 테스트 실행을 수행하고, 장치를 업데이트하는 척하고, 마치 장치를 업데이트하는 것처럼 모든 작업을 수행할 수 있는 옵션이 있습니다. 이는 [--dry-run]일반적으로 다음을 의미합니다.
  • 프로그램은 로컬 파일( )에서 장치를 업데이트 FILE하거나 인터넷에서 직접 업데이트를 다운로드하여( ) 업데이트할 수 있습니다.URL
  • 프로그램은 -V- 이 플래그가 무엇인지는 모르지만 경험상 다음과 같은 선택적 플래그를 허용합니다.
    • 프로그램 버전이 인쇄됩니다: as -V=version
    • -V또는 = 와 같이 해당 작업에 대해 더 자세한 출력을 인쇄합니다 verbose(그러나 전통적으로 verboseflags에서 더 일반적임 -v).
    • 마지막으로, -V실제로 의미하는 것은 쉽습니다.Voldemort

결국, 프로그램 작성자만이 그것이 실제로 무엇을 할 것인지 알고 있습니다. 때로는 그렇지 않더라도…


이제 질문 뒤에 숨겨진 모든 중요한 사항을 이해하고 어리석은 실수를 깨닫기를 바랍니다.

그것은 어떤 상황에서도 이해하지 못할 수도 있는 일관되지 않고 중얼거리는 넌센스를 쉘에 먹이는 것과 같습니다.

또한 프롬프트 줄에 "위험한" 쉘 문자가 포함되어 있지 않고 컴퓨터에 손상을 주지 않는다는 사실도 감사해야 합니다.

관련 정보