Unix & Linux

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

1
รายชื่อไฟล์ที่พลุกพล่านที่สุด
ฉันกำลังมองหาเครื่องมือที่จะแสดงรายการไฟล์ที่เปิดอยู่เรียงตามจำนวนของกิจกรรมในไฟล์ ดังนั้นlsofอย่าทำงาน (ยกเว้นกรณีที่ฉันกำลังมองหาวิธีใช้lsof) โดยหลักการแล้วเครื่องมือควรทำงานได้เช่นtopกันและควรสามารถสลับระหว่างกิจกรรมเฉพาะสำหรับการเรียงลำดับ: อ่าน, เขียน, ไบต์, ค้นหาต่อวินาที ควรมีอยู่ใน RHEL / CentOS / EPEL เครื่องมือดังกล่าวมีอยู่จริงหรือไม่?

5
วิธีการคัดลอกไฟล์ทำธุรกรรม?
ฉันต้องการคัดลอกไฟล์จาก A ถึง B ซึ่งอาจอยู่ในระบบไฟล์ที่แตกต่างกัน มีข้อกำหนดเพิ่มเติมบางประการ: การคัดลอกนั้นมีทั้งหมดหรือไม่มีไฟล์ไม่มีไฟล์ B บางส่วนหรือเสียหายที่เกิดความผิดพลาด อย่าเขียนทับไฟล์ที่มีอยู่ B; อย่าแข่งขันกับการดำเนินการพร้อมกันของคำสั่งเดียวกันอย่างมากหนึ่งสามารถประสบความสำเร็จ ฉันคิดว่านี่เข้าใกล้: cp A B.part && \ ln B B.part && \ rm B.part แต่ 3. ถูกละเมิดโดย cp จะไม่ล้มเหลวหาก B.part มีอยู่ (แม้จะมีแฟล็ก -n) ต่อมา 1. อาจล้มเหลวหากกระบวนการอื่น 'ชนะ' cp และไฟล์ที่ลิงก์เข้าที่ไม่สมบูรณ์ B.part อาจเป็นไฟล์ที่ไม่เกี่ยวข้อง แต่ฉันยินดีที่จะล้มเหลวโดยไม่ลองใช้ชื่ออื่นที่ซ่อนอยู่ในกรณีนั้น ฉันคิดว่า bash noclobber ช่วยได้ทำงานได้อย่างสมบูรณ์หรือไม่ มีวิธีรับโดยไม่มีข้อกำหนดรุ่น bash หรือไม่ …
9 linux  bash  cp 

4
ประสิทธิภาพของลูปเทียบกับการขยาย
ต้องการคำแนะนำจากผู้เชี่ยวชาญในการเปรียบเทียบด้านล่าง: ส่วนของรหัสโดยใช้ลูป: for file in `cat large_file_list` do gzip -d $file done ส่วนของรหัสโดยใช้การขยายอย่างง่าย: gzip -d `cat large_file_list` อันไหนจะเร็วกว่ากัน? ต้องจัดการกับชุดข้อมูลขนาดใหญ่

1
เป็นไปได้หรือไม่ที่จะกำหนดเวลาพักเครื่องฮาร์ดไดรฟ์ (7 วัน)?
ฉันกำลังมองหาวิธีกำหนดเวลาเมื่อฮาร์ดไดรฟ์ภายนอกที่เชื่อมต่อกับกล่อง Linux (Debian 9) ของฉันเข้าสู่โหมดสลีป (หยุดหมุน) หากต้องการใส่สิ่งนี้ลงในเนื้อหา: ฉันมีกล่อง Linux ที่ทำงานเป็นเซิร์ฟเวอร์มัลติมีเดีย หากมีการโทรเพื่อดึงเนื้อหาที่อยู่ในฮาร์ดไดรฟ์ภายนอกมันมักจะใช้เวลา 15-30 วินาทีสำหรับฮาร์ดไดรฟ์ที่จะปลุกและเริ่มหมุนซึ่ง a) กำลังหงุดหงิดและ b) บางครั้งทำให้เกิดการหมดเวลากับเซิร์ฟเวอร์มัลติมีเดีย ฉันสามารถตั้งค่าฮาร์ดไดรฟ์ให้ตื่นและหมุนตลอด 24/7 แต่ดูเหมือนว่าจะเสียเวลาส่วนใหญ่ฉันจะใช้เซิร์ฟเวอร์มัลติมีเดียเมื่อฉันอยู่ที่บ้าน มีเครื่องมือหรือคำสั่งซอฟต์แวร์ใดบ้างที่ฉันสามารถใช้เพื่อกำหนดตารางรายสัปดาห์สำหรับเมื่อฮาร์ดไดรฟ์หมุน - เช่นวันจันทร์ถึงวันศุกร์: การหมุนระหว่าง 5 โมงถึง 23 โมงเช้าวันเสาร์ - อาทิตย์: การหมุนระหว่าง 3 โมง จับเวลาระบบ

1
วิ่งวงวนไม่สิ้นสุดในเทอร์มินัลโดยไม่รู้ตัว
ฉันคัดลอกโค้ดด้านล่างจากแหล่งสุ่มไปยังเทอร์มินัลของฉันแล้ววิ่ง: while sleep 1; do tput sc; tput cup 0 $(($(tput cols)-29)); date; tput rc; done & รหัสคือการแสดงนาฬิกาวิ่งที่มุมขวาบนของเครื่อง ตัวอย่างทำงานได้ดีมากและทำในสิ่งที่ฉันต้องการ แต่ตอนนี้ฉันแค่อยากจะจบวงนี้และกำจัดนาฬิกา นอกจากนี้ฉันต้องเข้าใจรหัสข้างต้น ฉันมีความคิดบางอย่างที่ฉันรู้ว่าtputคำสั่งทำอะไร แต่ก็ยังมีหลายจุดที่ฉันไม่สามารถเชื่อมต่อได้
9 terminal 

6
การค้นหาไฟล์ทั้งหมดที่มีนามสกุลที่กำหนดซึ่งมีชื่อฐานคือชื่อของไดเรกทอรีหลัก
ฉันต้องการค้นหา*.pdfไฟล์ทุกไฟล์ซ้ำในไดเรกทอรี~/fooที่มีชื่อฐานตรงกับชื่อของไดเรกทอรีหลักของไฟล์ ตัวอย่างเช่นสมมติว่าโครงสร้างไดเรกทอรี~/fooมีลักษณะเช่นนี้ foo ├── dir1 │ ├── dir1.pdf │ └── dir1.txt ├── dir2 │ ├── dir2.tex │ └── spam │ └── spam.pdf └── dir3 ├── dir3.pdf └── eggs └── eggs.pdf การรันคำสั่งที่ฉันต้องการจะกลับมา ~/foo/dir1/dir1.pdf ~/foo/dir2/spam/spam.pdf ~/foo/dir3/dir3.pdf ~/foo/dir3/eggs/eggs.pdf เป็นไปได้โดยใช้findหรือยูทิลิตี้คอร์อื่น ๆ ? ฉันถือว่าสิ่งนี้ทำได้โดยใช้-regexตัวเลือกfindแต่ฉันไม่แน่ใจว่าจะเขียนรูปแบบที่ถูกต้องได้อย่างไร
9 find 

1
ดาวน์โหลดติดตั้งและรีบูทคอมพิวเตอร์ตอนกลางคืนหากจำเป็น
ฉันจะเขียนสคริปต์ในอูบุนตูเพื่อดาวน์โหลดอัปเดตในเวลากลางคืนเมื่อฉันเข้าสู่ระบบและรีบูตเครื่องคอมพิวเตอร์หากจำเป็นต้องรีบูตเครื่อง

1
เอาท์พุทที่แตกต่างกันสำหรับ 'w`,' who ',' whoami 'และ `id'
ในแพลตฟอร์มบรรทัดคำสั่งออนไลน์เช่นอินสแตนซ์บน Codecademy เมื่อฉันรัน for cmd in w who whoami id do echo $cmd $cmd echo ========================= echo " " done ฉันเข้าใจ w 00:52:54 up 8 days, 14:10, 0 users, load average: 3.78, 2.98, 2.69 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT ========================= who ========================= whoami ccuser ========================= id uid=1000(ccuser) …
9 users  who  w  whoami 

1
เทียบเท่ากับ `rpm -K` ใช้` apt '
อะไรคือสิ่งที่aptเทียบเท่าrpm -K *.rpmซึ่ง-Kถูกกำหนดให้เป็นการตรวจสอบลายเซ็นของที่เก็บในman rpmและในRPM สูงสุด ? ตัวอย่างของสถานการณ์: sudo rpm --import https://mirrors.example.com/rpm/RPM-GPG-KEY-release && rpm -K example.rpm
9 debian  rhel  apt  rpm  gpg 

4
awk กำหนดให้กับตัวแปรหลายตัวพร้อมกัน
ฉันพยายามดึงค่าตัวเลขสองค่าออกมาจากสตริงและกำหนดให้กับตัวแปรที่ใช้awk( gawkเป็นสิ่งที่ฉันใช้โดยเฉพาะ) ฉันต้องการดึงหมายเลขรุ่นหลักและรุ่นรองออกจากสตริงรุ่น tmux เป็นawkตัวแปรเช่น: อินพุต: tmux 2.8; maj == 2และmin == 8 อินพุต: tmux 1.9a; maj == 1และmin == 9 อินพุต: tmux 2.10; maj == 2และmin == 10 สมมติว่าอินพุตของฉันมาจากtmux -Vstdin ฉันมีสิ่งต่อไปนี้: tmux -V | awk '{ maj = +gensub(/([0-9]+)\..*/, "\\1", "g", $2); min = +gensub(/.*\.([0-9]+).*/, "\\1", "g", $2); # …
9 awk  gawk 

1
awk ลบจุดออกจากสตริงโดยไม่คาดคิด
ฉันต้องการเพิ่มคอลัมน์ (ที่ 2) ใน.csvไฟล์และฉันต้องการให้ค่าของคอลัมน์นั้นเป็นสตริงและจะถูกยกมา คำสั่งต่อไปนี้จะเพิ่มคอลัมน์ แต่ไม่มีเครื่องหมายคำพูด: awk -F"," 'BEGIN { OFS = "," } {$2="2.4.0"; print}' test.csv > output.csv วิธีการต่อไปนี้รวมคำพูด แต่ด้วยเหตุผลบางประการมันจะลบ.(จุด) สุดท้ายออกจากค่า awk -F"," 'BEGIN { OFS = "," } {$2="\""2.4.0"\""; print}' test.csv > output.csv ดังนั้นคุณค่าของฉันคือ "2.40" ฉันจะไปเกี่ยวกับเรื่องนี้ได้อย่างไร
9 awk  csv 

6
จัดเตรียมบรรทัดสุดท้ายของ stdin ไปยัง stdin ทั้งหมด
พิจารณาสคริปต์นี้: tmpfile=$(mktemp) cat <<EOS > "$tmpfile" line 1 line 2 line 3 EOS cat <(tail -1 "$tmpfile") "$tmpfile" งานและผลลัพธ์: line 3 line 1 line 2 line 3 สมมติว่าแหล่งอินพุตของเราแทนที่จะเป็นไฟล์จริงแทน stdin: cat <<EOS | # what goes here now? line 1 line 2 line 3 EOS เราจะแก้ไขคำสั่งได้อย่างไร: cat <(tail -1 "$tmpfile") "$tmpfile" …
9 bash 

1
ทำไมเครื่องหมายตัวหนอน (~) ไม่ขยายเมื่อใช้กับอาร์กิวเมนต์ CLI ที่ขึ้นต้นด้วยขีดกลาง
ฉันเสียเวลาสองสามชั่วโมงในการพยายามเรียกใช้เซิร์ฟเวอร์ VNC (x0vncserver) และลูกค้าปฏิเสธที่จะเชื่อมต่อกับข้อความแปลก ๆ ที่ No password configured for VNC Auth เซิร์ฟเวอร์ยังพิมพ์ข้อผิดพลาดนี้ SVncAuth: opening password file '~/.vnc/passwd' failed ตกลงฉันเสียเวลามากจนกว่าฉันจะรู้ว่าตัวหนอนไม่ได้ถูกขยายโดยเชลล์หรือโดย x0vncserver จากนั้นฉันก็ทำการทดสอบเหล่านี้ $ echo --PasswordFile=~/.vnc/passwd --PasswordFile=~/.vnc/passwd แต่ $ echo PasswordFile=~/.vnc/passwd PasswordFile=/home/tichomir/.vnc/passwd ทำไมถึงเป็นอย่างนั้น? ทำไมเชลล์ปฏิเสธที่จะขยายตัวหนอนถ้าอาร์กิวเมนต์เริ่มต้นด้วยเส้นประ? ฉันคิดว่าตัวหนอนจะขยายตราบใดที่มันไม่ได้ยกมา แต่เห็นได้ชัดว่ามีกฎอื่นที่เข้ามาเล่น?
9 bash  shell  tilde 

1
การคอมไพล์ซอร์สโค้ดใน Debian GNU / Hurd แตกต่างจาก Debian GNU / Linux อย่างไร
ฉันพยายามรวบรวมlibnetfilter_conntrackแหล่งจาก github ตามที่ร้องขอiptablesในขณะที่รวบรวมiptablesและเนื่องจากสิ่งเหล่านี้ไม่สามารถใช้ได้ใน repo ซอฟต์แวร์ HURD และสิ้นสุดข้อผิดพลาดขณะกำหนดค่าlibnetfilter_conntrack checking whether stripping libraries is possible... yes checking if libtool supports shared libraries... yes checking whether to build shared libraries... yes checking whether to build static libraries... no checking whether ln -s works... yes configure: error: Linux only, dude! และเคอร์เนลของฉันคือ $ uname -a …
9 debian  compiling  c  hurd 

3
ฉันจะป้องกันไม่ให้ตัวเลือก 'shopt' ไม่สนับสนุนการทำให้เกิดข้อผิดพลาดใน. bashrc ของฉันได้อย่างไร
ฉันทำงานในสภาพแวดล้อมที่ค่อนข้างหลากหลายซึ่งฉันอาจใช้ Bash รุ่นต่างๆในโหนด HPC, VM หรือเวิร์กสเตชันส่วนตัวของฉัน เนื่องจากฉันใส่สคริปต์การเข้าสู่ระบบใน repo Git ฉันต้องการใช้ (ish) เดียวกัน.bashrcทั่วกระดานโดยไม่ต้อง "ถ้าโฮสต์นี้แล้ว ... " - ประเภทความยุ่งเหยิง ผมชอบการทำงานเริ่มต้นของการทุบตี≤ 4.1 ที่ขยายcd $SOMEPATHเข้าไปในcd /the/actual/pathเมื่อกดTabคีย์ ในทุบตี 4.2 และสูงกว่าที่คุณจะต้องshopt -s direxpandเปิดใช้งานลักษณะการทำงานนี้และที่ไม่ได้เป็นใช้ได้จนกว่า 4.2.29 นี่เป็นเพียงตัวอย่างเดียว shoptตัวเลือกอื่นที่เกี่ยวข้องอาจเป็นไปได้complete_fullquote(แม้ว่าฉันไม่ทราบว่าสิ่งที่มันทำ) อาจมีการเปลี่ยนแปลงพฤติกรรมเริ่มต้นที่ v4.2 แต่direxpandไม่ได้รับการยอมรับจากรุ่นก่อนหน้าทุบตีและถ้าผมพยายามที่จะshopt -s direxpandอยู่ในของฉัน.bashrcที่ส่งผลให้เกิดข้อผิดพลาดถูกพิมพ์ไปยังคอนโซลครั้งที่ผมเข้าสู่โหนดกับเก่าทุบตีทุก: -bash: shopt: direxpand: invalid shell option name สิ่งที่ฉันต้องการจะทำคือล้อมรอบเงื่อนไขshop -s direxpandเพื่อเปิดใช้งานตัวเลือกนั้นใน Bash> 4.1 อย่างแข็งแกร่งโดยไม่ต้อง chashing เวอร์ชันเก่าของ …

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