Unix & Linux

คำถาม & คำตอบสำหรับผู้ใช้ Linux, FreeBSD และระบบปฏิบัติการ Un * x อื่น ๆ

3
หน่วยเวลาที่ strace ใช้คืออะไรเมื่อแสดงเวลาที่ใช้ใน syscalls
เมื่อใช้คำสั่งstraceกับการตั้งค่าสถานะ-Tฉันต้องการที่จะรู้ว่าหน่วยเวลาที่ใช้ในการแสดงเวลาที่ใช้ใน syscalls คืออะไร? ฉันคิดว่ามันควรจะเป็นในไม่กี่วินาที แต่ฉันไม่แน่ใจและดูเหมือนว่าจะถูกตัดออกจากคู่มือ

2
ทำไมหน้า man apt-key ไม่แนะนำให้ใช้คำสั่ง add
หน้าคน Ubuntu สำหรับ apt-ที่สำคัญรวมถึงการบันทึกต่อไปนี้เกี่ยวกับapt-key add: หมายเหตุ: แทนที่จะใช้คำสั่งนี้คุณควรวางพวงกุญแจโดยตรงในไดเรกทอรี /etc/apt/trusted.gpg.d/ ด้วยชื่ออธิบายและ "gpg" หรือ "asc" เป็นนามสกุลไฟล์ ฉันไม่คิดว่าฉันเคยเห็นคำแนะนำนี้มาจากที่อื่น apt-keyโครงการส่วนใหญ่ที่โฮสต์ที่เก็บของตัวเองบอกว่าจะดาวน์โหลดไฟล์สำคัญของพวกเขาและเพิ่มด้วย แรงจูงใจเบื้องหลังคำแนะนำนี้คืออะไร? นี่คือ Ubuntu-ism หรือไม่หรือใช้กับ distro ที่ใช้ APT หรือไม่
10 apt 

2
พฤติกรรมที่แปลกประหลาดของ TR ใช้ช่วง
ฉันมีเซิร์ฟเวอร์หนึ่งที่แสดงพฤติกรรมแปลก ๆ เมื่อใช้ tr นี่คือตัวอย่างจากเซิร์ฟเวอร์ที่ใช้งานได้: -bash-3.2$ echo "abcdefghijklmnopqrstuvwxyz1234567890"|tr -d [a-z] 1234567890 -bash-3.2$ นั่นทำให้รู้สึกที่สมบูรณ์แบบสำหรับฉัน อย่างไรก็ตามสิ่งนี้มาจากเซิร์ฟเวอร์ 'พิเศษ': [root@host~]# echo "abcdefghijklmnopqrstuvwxyz1234567890"|tr -d [a-z] abcdefghijklmnpqrstuvwxyz1234567890 อย่างที่คุณเห็นการลบอักขระตัวพิมพ์เล็กทั้งหมดล้มเหลว แต่มันได้ลบตัวอักษร 'o' ส่วนที่น่าสนใจคือสองตัวอย่างต่อไปนี้ซึ่งไม่สมเหตุสมผลกับฉันเลย: [root@host~]# echo "abcdefghijklmnopqrstuvwxyz1234567890"|tr -d [a-n] opqrstuvwxyz1234567890 [root@host~]# echo "abcdefghijklmnopqrstuvwxyz1234567890"|tr -d [a-o] abcdefghijklmnpqrstuvwxyz1234567890 [root@host~]# (อีกครั้งเครื่องหมาย 'o' จะถูกลบในตัวอย่างสุดท้าย) ไม่มีใครมีความคิดอะไรเกิดขึ้นที่นี่? ฉันไม่สามารถทำซ้ำในกล่อง linux อื่น ๆ ที่ฉันใช้


1
ตัวเลือกทางเลือกเพื่อ rm -f
ฉันต้องการเรียกใช้บรรทัดคำสั่ง: cd ~/www/tmp/; rm -P 2* แต่ฉันได้รับข้อผิดพลาดหากไม่มีไฟล์ที่ขึ้นต้นด้วย 2 คุณคิดว่าฉันต้องการใช้-fอย่างไรก็ตาม: -f Attempt to remove the files without prompting for confirmation, regardless of the file's permissions. If the file does not exist, do not display a diagnostic message or modify the exit status to reflect an error. และฉันทำดูแลเกี่ยวกับแฟ้ม permissions- ถ้ามีบางสิ่งบางอย่างที่แปลกที่เกิดขึ้นผมต้องการยกเลิกคำสั่ง ฉันต้องการระงับข้อผิดพลาด 'ไม่มีอยู่' …
10 command-line  rm 

2
ฉันจะพิมพ์เนื้อหาแทนชื่อไฟล์โดยใช้คำสั่ง linux find ได้อย่างไร
ฉันมีหลายพันไฟล์ UNL cbs_cdr_vou_20180624_603_126_239457.unlชื่ออะไรเช่นนี้ ฉันต้องการพิมพ์ทุกบรรทัดจากไฟล์เหล่านั้นโดยใช้คำสั่งต่อไปนี้ แต่มันให้ฉันชื่อไฟล์เท่านั้น ฉันไม่ต้องการชื่อไฟล์ฉันแค่ต้องการเนื้อหาจากไฟล์เหล่านั้น find -type f -name 'cbs_cdr_vou_20180615*.unl' > /home/fifa/cbs/test.txt กระแสไฟขาออก: ./cbs_cdr_vou_20180615_603_129_152023.unl ./cbs_cdr_vou_20180615_603_128_219001.unl ./cbs_cdr_vou_20180615_602_113_215712.unl ./cbs_cdr_vou_20180615_602_120_160466.unl ./cbs_cdr_vou_20180615_603_125_174428.unl ./cbs_cdr_vou_20180615_601_101_152369.unl ./cbs_cdr_vou_20180615_603_133_193306.unl ผลลัพธ์ที่คาดหวัง: 8801865252020|200200|20180613100325|; 8801837463298|200200|20180613111209|; 8801845136955|200200|20180613133708|; 8801845205889|200200|20180613141140|; 8801837612072|200200|20180613141525|; 8801877103875|200200|20180613183008|; 8801877167964|200200|20180613191607|; 8801845437651|200200|20180613200415|; 8801845437651|200200|20180613221625|; 8801839460670|200200|20180613235936|; โปรดทราบว่าสำหรับคำสั่ง cat ฉันได้รับข้อผิดพลาดแบบ-bash: /bin/logger: Argument list too longนั้นเป็นเหตุผลที่ต้องการใช้findแทนcatคำสั่ง
10 linux  find  cat 

3
ไพพ์เนม, ตัวอธิบายไฟล์และ EOF
สองหน้าต่างผู้ใช้เดียวกันพร้อมกับ bash พร้อมต์ ในประเภท window-1: $ mkfifo f; exec <f ดังนั้นทุบตีอยู่ในขณะนี้พยายามอ่านจากไฟล์อธิบาย 0 fซึ่งถูกแมปไปไปป์ที่มีชื่อ ในประเภท window-2: $ echo ls > f ตอนนี้ window-1 จะพิมพ์ ls แล้วเชลล์ก็จะตาย ทำไม? ทดลองถัดไป: เปิดหน้าต่าง-1 exec <fอีกครั้งกับ ในประเภท window-2: $ exec 3>f $ echo ls >&3 หลังจากบรรทัดแรกด้านบน window-1 จะปลุกและพิมพ์พรอมต์ ทำไม? หลังจากบรรทัดที่สองข้างต้น window-1 จะพิมพ์lsเอาต์พุตและเชลล์ยังมีชีวิตอยู่ ทำไม? อันที่จริงตอนนี้ใน window-2 echo …

2
มีทางเลือกอื่นสำหรับคำสั่ง `find 'บน linux สำหรับ SunOS หรือไม่?
findคำสั่งบนลินุกซ์มีตัวเลือกมากเมื่อเทียบกับfindคำสั่งบน SunOS หรือ Solaris ฉันต้องการใช้findคำสั่งเช่นนี้: find data/ -type f -name "temp*" -printf "%TY-%Tm-%Td %f\n" | sort -r มันทำงานได้ดีอย่างสมบูรณ์บนเครื่อง Linux แต่คำสั่งเดียวกันไม่มีตัวเลือก-printfในเครื่อง SunOS ฉันต้องการปรับแต่งผลงานของฉันใน"%TY-%Tm-%Td %f\n"รูปแบบ โปรดแนะนำทางเลือกใด ๆ สำหรับ SunOS

1
มีสิทธิ์ของกลุ่ม แต่ไม่สามารถสร้างไฟล์ได้
ฉันพบสิ่งที่แปลกในขณะที่เล่นกับ pi3B ฉันต้องการที่จะสร้างไฟล์ใน/sys/class/gpio( เพียง poking รอบไม่มีเหตุผลที่เฉพาะเจาะจง ) แต่ผมได้รับอนุญาตปฏิเสธ ด้านล่างเป็นข้อมูลบางส่วน pi@raspberrypi:/sys/class/gpio $ groups pi adm dialout cdrom sudo audio video plugdev games users input netdev gpio i2c spi pi@raspberrypi:/sys/class/gpio $ ls -ld . drwxrwx--- 2 root gpio 0 May 6 00:28 . pi@raspberrypi:/sys/class/gpio $ touch somefile touch: cannot touch 'somefile': Permission …

3
sudo ตัดสินใจอย่างไรว่าจะขอรหัสผ่านเมื่อได้รับคำสั่งที่ไม่ต้องการ `sudo 'จริง ๆ
เมื่อใช้sudoคำสั่งซึ่งไม่จำเป็นต้องจริงsudo, บางครั้งมันไม่ถามรหัสผ่าน ตัวอย่างเช่นภายใต้ของฉัน$HOME, sudo ls. แต่ฉันจำได้ว่ามันทำเพื่อคำสั่งอื่น ๆ แม้ว่าฉันจะลืมที่หนึ่ง ดังนั้นฉันสงสัยว่าsudoจะตัดสินใจว่าจะขอรหัสผ่านเมื่อได้รับคำสั่งที่ไม่ต้องการจริงsudoหรือไม่ มีกฎบางอย่างในการ/etc/sudoersระบุว่า? ปัญหาที่แท้จริงของฉันคือเมื่อฉันใช้duบางครั้งก็แสดง "สิทธิ์ถูกปฏิเสธ" สำหรับบางไดเรกทอรีและบางครั้งอาจไม่ใช่เพราะฉันไม่ได้รับอนุญาตในบางไดเรกทอรี ผมใช้sudoไปduโดยไม่คำนึงถึงและคิดว่าฉันจะถามรหัสผ่านโดยไม่คำนึงถึง แต่จริง ๆ แล้วไม่ได้อยู่ในไดเรกทอรีของตัวเอง
10 sudo  password 

2
อ่านบันทึกจากกระบวนการหนึ่งระหว่างการรันคำสั่งบางอย่าง
logs.logฉันมีบริการบางส่วนซึ่งเป็นผู้ผลิตบันทึกในไฟล์ ฉันมีคำสั่งอื่นที่โต้ตอบกับบริการนี้ foo.shสมมติว่ามันเป็นบางส่วน สิ่งที่ฉันต้องการคือการตัดและบันทึกบันทึกจากlogs.logว่าในระหว่างการfoo.shทำงาน กล่าวอีกนัยหนึ่งฉันต้องการบันทึกส่วนหนึ่งของบริการเมื่อมีการโต้ตอบกับของฉันfoo.sh(ดังนั้นฉันไม่สนใจfoo.shบันทึกของ) ฉันคาดว่าคำสั่งนี้จะทำเคล็ดลับ แต่มันยังคงอ่านไฟล์เมื่อfoo.shเสร็จแล้ว: > foo.sh | tail -f logs.log > foo_part.log เป็นวิธีที่ดีในการทำเคล็ดลับนี้หรือไม่?
10 bash  tail 

5
awk / sed / perl one liner + วิธีพิมพ์เฉพาะบรรทัดคุณสมบัติจากไฟล์ json
วิธีพิมพ์เฉพาะคุณสมบัติบรรทัดจากไฟล์ json ตัวอย่างของไฟล์ json { "href" : "http://master02:8080/api/v1/clusters/HDP/configurations?type=kafka-env&tag=version1527250007610", "items" : [ { "href" : "http://master02:8080/api/v1/clusters/HDP/configurations?type=kafka-env&tag=version1527250007610", "tag" : "version1527250007610", "type" : "kafka-env", "version" : 8, "Config" : { "cluster_name" : "HDP", "stack_id" : "HDP-2.6" }, "properties" : { "content" : "\n#!/bin/bash\n\n# Set KAFKA specific environment variables here.\n\n# The java implementation to …
10 awk  sed  perl  json  jq 

3
เหตุใดไฟล์ที่มีสิทธิ์ 400 รายการที่รูทเครื่องสามารถอ่านได้ แต่อ่านอย่างเดียวโดยผู้ใช้
หากฉันสร้างไฟล์ในฐานะผู้ใช้ที่ไม่มีสิทธิ์และเปลี่ยนโหมดการอนุญาต400เป็นผู้ใช้นั้นจะเห็นว่าเป็นแบบอ่านอย่างเดียวอย่างถูกต้อง: $ touch somefile $ chmod 400 somefile $ [ -w somefile ] && echo rw || echo ro ro ทั้งหมดเป็นอย่างดี. แต่แล้วรากก็มาพร้อม: # [ -w somefile ] && echo rw || echo ro rw ห่า? แน่นอนว่ารูทสามารถเขียนไปยังไฟล์แบบอ่านอย่างเดียวได้ แต่ไม่ควรทำให้เป็นนิสัย: แนวปฏิบัติที่ดีที่สุดมีแนวโน้มที่จะกำหนดว่าฉันควรจะสามารถทดสอบบิตการอนุญาตการเขียนได้และถ้าไม่ใช่ก็เป็นไปได้ ทางนั้นด้วยเหตุผล ผมคิดว่าผมต้องการที่จะเข้าใจทั้งสองเหตุผลนี้เกิดขึ้นและวิธีการที่ฉันจะได้รับเท็จรหัสการส่งคืนเมื่อการทดสอบไฟล์ที่ไม่ได้มีการเขียนชุดบิตหรือไม่?

3
`_` ตัวแปรสภาพแวดล้อมของ bash shell เมื่อใด
Bash Manual พูดว่า (manpage, การเน้นของฉัน): เมื่อ Bash เรียกใช้คำสั่งภายนอกตัวแปร$_จะถูกตั้งค่าเป็นชื่อพา ธ เต็มของคำสั่งและส่งไปยังคำสั่งนั้นในสภาพแวดล้อมของมัน และ ( พารามิเตอร์พิเศษ ): _ ( $_ขีดล่าง.) ที่การเริ่มต้นเชลล์ตั้งค่าชื่อพา ธ สัมบูรณ์ที่ใช้เพื่อเรียกใช้เชลล์หรือสคริปต์เชลล์ที่จะดำเนินการตามที่ส่งผ่านในสภาพแวดล้อมหรือรายการอาร์กิวเมนต์ ต่อจากนั้นขยายไปยังอาร์กิวเมนต์สุดท้ายไปยังคำสั่งก่อนหน้าหลังจากการขยาย นอกจากนี้ยังตั้งเป็นชื่อพา ธ แบบเต็มที่ใช้เพื่อเรียกใช้คำสั่งแต่ละคำสั่งที่ดำเนินการและวางไว้ในสภาพแวดล้อมที่ส่งออกไปยังคำสั่งนั้น เมื่อตรวจสอบเมลพารามิเตอร์นี้เก็บชื่อของไฟล์เมล ใน bash shell ฉันรัน: $ bash $ export | grep '_=' ตามคู่มือ_ควรเป็นตัวแปรสภาพแวดล้อมของ bash shell ใหม่ exportควรจะส่งออกทั้งหมดตัวแปรสภาพแวดล้อมของเปลือกทุบตีใหม่ _แต่มันไม่ออก ดังนั้นฉันสงสัยว่า_ตัวแปรสภาพแวดล้อมของ bash shell ใหม่เป็นอย่างไร ที่จริงแล้วใน bash shell ใด …

1
ฉันจะยกเลิกรายการคำสั่งที่เหลือใน Bash ได้อย่างไร?
ใน Bash บางครั้งฉันจะพิมพ์รายการคำสั่งและการเข้าชมEnterและต่อมาก็ตระหนักว่ามีข้อผิดพลาดบางคำสั่งใกล้จะจบรายการ ฉันรู้ว่าถ้าฉันกดCtrl+ Cมันจะยุติคำสั่งที่กำลังทำงานอยู่และยกเลิกรายการที่เหลือ มีวิธีการยกเลิกรายการที่เหลือโดยไม่ยกเลิกคำสั่งที่กำลังทำงานอยู่หรือไม่? ตัวอย่างเช่นสมมติว่าฉันพิมพ์บางสิ่งบางอย่างเช่น foo; bar หรือ foo && bar ซึ่งfooเป็นคำสั่งที่ใช้เวลานานซึ่งเป็นสิ่งสำคัญมากที่จะไม่ขัดจังหวะและbarทำสิ่งที่ไม่สามารถแก้ไขได้และไม่ต้องการ (พูดshutdown -h nowหรือrm -rf /) ในขณะที่fooยังทำงานอยู่มีวิธีทั่วไปในการบอกเชลล์ให้fooเสร็จ แต่จะไม่ทำงานในbarภายหลังหรือไม่? (ใช่ฉันสามารถเปลี่ยนการอนุญาตbarเพื่อไม่ให้ใช้งานได้ แต่มันไม่สะดวกbarเป็นพิเศษหากเป็นอย่างrmที่ฉันต้องการใช้ในระหว่างนี้และจะไม่ทำงานหากฉันไม่ได้เป็นเจ้าของbarหรือbarเป็นบิวอิน)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.