Unix & Linux

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

11
มีวิธีแก้ไขไฟล์ในสถานที่หรือไม่?
ฉันมีไฟล์ขนาดใหญ่พอสมควร (35Gb) และฉันต้องการกรองไฟล์นี้ในแหล่งกำเนิด (เช่นฉันมีพื้นที่ดิสก์ไม่เพียงพอสำหรับไฟล์อื่น) โดยเฉพาะฉันต้องการ grep และไม่สนใจรูปแบบบางอย่าง - มีวิธีในการ ทำเช่นนี้โดยไม่ใช้ไฟล์อื่น สมมติว่าฉันต้องการกรองบรรทัดทั้งหมดที่มีfoo:ตัวอย่างเช่น ...

11
แนะนำให้อ่านเพื่อทำความเข้าใจกับ Unix / Linux internals [ดีกว่า]
ฉันทำงานกับสภาพแวดล้อม * nix ในช่วงสี่ปีที่ผ่านมาในฐานะนักพัฒนาแอปพลิเคชัน (ส่วนใหญ่ใน C) กรุณาแนะนำหนังสือ / บล๊อกเป็นต้นเพื่อปรับปรุงความรู้ * nix internals ของฉัน
54 linux  books 

2
จะรู้ได้อย่างไรว่าฉันกำลังใช้ UEFI อยู่
ฉันกำลังค้นหา แต่ไม่พบวิธีที่ชัดเจนที่จะรู้ว่า GRUB ใช้ UEFI ในการบูตระบบหรือโหมดความเข้ากันได้ของ BIOS หรือ BIOS เต็มรูปแบบ ผมพบว่าเพียงวิธีการของ Windows มีบางสิ่งใน GRUB หรือบันทึกการบูตเคอร์เนลที่แสดงว่าฉันใช้ UEFI, EFI หรือ BIOS หรือไม่
54 boot  grub2  uefi 

2
มีวิธีใดบ้างที่จะเปิดใช้งาน Ctrl + L เพื่อล้างหน้าจอเมื่อตั้งค่า 'set -o vi' หรือไม่
เมื่อคุณกดCtrl+ Lในโหมดทุบตีเริ่มต้นหน้าจอจะถูกล้าง แต่เมื่อฉันเรียกใช้set -o viและกดCtrl+ Lการกดแป้นพิมพ์จะถูกพิมพ์ ( ^L) มีวิธีใดบ้างที่จะรักษาพฤติกรรมนี้
54 bash  readline  vi-mode 

2
ยกเลิกการลบไฟล์ที่ถูกลบใน ext4 ด้วย extundelete
มีตัวเลือกง่าย ๆextundeleteว่าฉันจะพยายามยกเลิกการลบไฟล์ที่เรียก/var/tmp/test.isoว่าเพิ่งลบไปได้หรือไม่? (ไม่สำคัญเลยที่ฉันจะเริ่มติดตั้งไดรฟ์แบบอ่านอย่างเดียวหรือสิ่งต่าง ๆ อีกครั้งฉันสามารถดาวน์โหลดไฟล์นั้นอีกครั้งได้อีกครั้ง) ฉันกำลังมองหาคำสั่งง่ายๆที่ฉันสามารถลองถ้าฉันจัดการเพื่อกู้คืนได้อย่างรวดเร็ว ฉันรู้ว่าเป็นไปได้ด้วยการติดตั้งไดรฟ์ใหม่ในแบบอ่านอย่างเดียว : (ดูฉันจะกู้คืนไฟล์เดียวบนดิสก์เปล่าที่เพิ่งลบไปได้อย่างไร ) แต่สิ่งนี้อาจเป็นไปได้ในดิสก์ที่ติดตั้งอยู่หรือไม่

10
วิธีกำหนดค่าสตริงให้กับตัวแปรผ่านหลายบรรทัดในขณะที่ย่อหน้า
ปัญหา: ฉันต้องการกำหนดค่าตัวแปรที่มีความยาวพอสมควร บรรทัดทั้งหมดของสคริปต์ของฉันต้องอยู่ภายใต้คอลัมน์จำนวนหนึ่ง ดังนั้นฉันพยายามกำหนดโดยใช้มากกว่าหนึ่งบรรทัด มันง่ายที่จะทำโดยไม่ต้องเยื้อง: VAR="This displays without \ any issues." echo "${VAR}" ผลลัพธ์: This displays without any issues. อย่างไรก็ตามด้วยการเยื้อง: VAR="This displays with \ extra spaces." echo "${VAR}" ผลลัพธ์: This displays with extra spaces. ฉันจะกำหนดอย่างหรูหราโดยไม่มีช่องว่างเหล่านี้ได้อย่างไร
54 variable 

4
รหัสการออกเริ่มต้นเมื่อกระบวนการยุติลง?
เมื่อกระบวนการถูกฆ่าด้วยสัญญาณที่จับได้เช่นSIGINTหรือSIGTERMแต่ไม่จัดการสัญญาณสิ่งที่จะเป็นรหัสทางออกของกระบวนการ? สิ่งที่เกี่ยวกับสัญญาณที่SIGKILLไม่สามารถจัดการได้เป็นอย่างไร จากสิ่งที่ผมสามารถบอกได้ฆ่ากระบวนการที่มีSIGINTผลแนวโน้มในรหัสทางออก130แต่ที่แตกต่างกันโดย kernel หรือการดำเนินเปลือก? $ cat myScript #!/bin/bash sleep 5 $ ./myScript <ctrl-c here> $ echo $? 130 ฉันไม่แน่ใจว่าฉันจะทดสอบสัญญาณอื่น ๆ ได้อย่างไร ... $ ./myScript & $ killall myScript $ echo $? 0 # duh, that's the exit code of killall $ killall -9 myScript $ echo $? 0 # …

6
การเชื่อมโยงสองตัวแปรเข้ากับขีดล่าง
ฉันต้องต่อตัวแปรสองตัวเข้าด้วยกันเพื่อสร้างชื่อไฟล์ที่มีเครื่องหมายขีดล่าง ให้เรียกตัวแปรของฉัน$FILENAMEและ$EXTENSIONอ่านชื่อไฟล์จากไฟล์ FILENAME=Hello EXTENSION=WORLD.txt ตอนนี้ ... ฉันได้ลองทำสิ่งต่อไปนี้โดยไม่ประสบความสำเร็จ: NAME=${FILENAME}_$EXTENSION NAME=${FILENAME}'_'$EXTENSION NAME=$FILENAME\\_$EXTENSION ฉันมักจะได้ผลลัพธ์ที่แปลก ๆ โดยทั่วไปแล้วจะขีดเส้นใต้ก่อน ฉันต้องการมัน echo $NAME Hello_WORLD.txt

7
เหตุใดการเมานท์จึงต้องใช้สิทธิ์รูท
เหตุใดลีนุกซ์จึงต้องการให้ผู้ใช้รูท / ใช้ sudo / ได้รับอนุญาตเฉพาะต่อการเมาต์ ดูเหมือนว่าการตัดสินใจว่าจะอนุญาตให้ผู้ใช้เมานต์สิ่งที่ควรจะขึ้นอยู่กับสิทธิการเข้าถึงของพวกเขาเพื่อแบ่งปันปริมาณ / เครือข่ายแหล่งที่มาและไปยังจุดเชื่อมต่อ การใช้งานสองสามอย่างสำหรับการติดตั้งที่ไม่ใช่รูทคือการติดตั้งอิมเมจระบบไฟล์ไปยังทิศทางที่ผู้ใช้เป็นเจ้าของและการติดตั้งแชร์เครือข่ายไปยังไดเรกทอรีที่ผู้ใช้เป็นเจ้าของ ดูเหมือนว่าหากผู้ใช้สามารถควบคุมสมการทั้งสองด้านได้ทุกอย่างน่าจะดี ชี้แจงข้อ จำกัด การเข้าถึง: ฉันรู้สึกว่าฉันควรจะสามารถเมานต์อะไรก็ได้ที่ผู้ใช้จะเข้าถึงจุดเชื่อมต่อที่ผู้ใช้เป็นเจ้าของ ยกตัวอย่างเช่นในคอมพิวเตอร์ของฉัน / dev / sda1 brw-rw----เป็นเจ้าของโดยรากของผู้ใช้และกลุ่มดิสก์ที่มีสิทธิ์ ดังนั้นผู้ใช้ที่ไม่ใช่รูทจะไม่สามารถยุ่งกับ / dev / sda1 และการเมาท์ไม่ควรอนุญาตให้เมานต์ อย่างไรก็ตามหากผู้ใช้เป็นเจ้าของ /home/my_user/my_imagefile.img และจุดเชื่อมต่อ / home / my_user / my_image / เหตุใดพวกเขาจึงไม่สามารถเมานท์ไฟล์ภาพนั้นบนจุดเมานต์นั้น: mount /home/my_user/my_imagefile.img /home/my_user/my_image/ -o loop ขณะที่คอร์แม็คชี้ให้เห็นว่ามีปัญหาเรื่องการฆ่าตัวตาย ดังนั้นจะต้องมีการเพิ่มข้อ จำกัด บางอย่างเพื่อป้องกันไม่ให้ suid เป็นปัญหารวมถึงปัญหาอื่น ๆ …

5
พิมพ์เนื้อหาไฟล์โดยไม่มีบรรทัดแรกและบรรทัดสุดท้าย
มีวิธีง่าย ๆ ที่ฉันสามารถสะท้อนไฟล์ข้ามบรรทัดแรกและบรรทัดสุดท้ายหรือไม่ ฉันมองไปที่การใส่ท่อheadเข้าไปtailแต่สำหรับสิ่งที่ดูเหมือนว่าฉันจะต้องรู้ว่าสายทั้งหมดตั้งแต่เริ่มแรก ฉันยังดูอยู่splitแต่ฉันไม่เห็นวิธีที่จะทำเช่นนั้น

6
ใช้ rsync เพื่อย้าย (ไม่คัดลอก) ไฟล์ระหว่างไดเรกทอรี?
ฉันใช้rsyncเพื่อคัดลอกไฟล์มาระยะหนึ่งแล้ว ความเข้าใจของฉันคือrsyncเร็วกว่าcpเมื่อบางไฟล์ที่จะถ่ายโอนอยู่ในไดเรกทอรีปลายทางแล้วถ่ายโอนเฉพาะความแตกต่างที่เพิ่มขึ้น (เช่น "deltas") หากสิ่งนี้ถูกต้องจะมีประโยชน์ใด ๆ ในการใช้rsyncในการย้ายเนื้อหาของโฟลเดอร์Aจะพูดว่าโฟลเดอร์Bโดยที่Bว่างเปล่าหรือไม่ โฟลเดอร์Aมีข้อมูลใกล้เคียง 1TB (และมีไฟล์นับล้านในนั้น) การถ่ายโอนจะทำผ่านเครือข่ายท้องถิ่น( AและB ที่อยู่ในระบบไฟล์ที่แตกต่างกันทั้งที่ติดตั้งบนซูเปอร์คอมพิวเตอร์เช่นAคือNFSและBเป็นเงา ) นอกจากนั้นฉันควรใช้ค่าสถานะใดในการขอให้rsyncย้าย (ไม่ใช่คัดลอก) ไฟล์จากAถึงB (เช่นลบAเมื่อการถ่ายโอนเสร็จสิ้น)
54 rsync  cp 

5
การแยกสตริงโดยการเกิดขึ้นครั้งแรกของตัวคั่น
ฉันมีสตริงในรูปแบบถัดไป id;some text here with possible ; inside และต้องการที่จะแยกมันถึง 2 ;สายโดยเกิดขึ้นครั้งแรกของ ดังนั้นควร: idและsome text here with possible ; inside ฉันรู้วิธีแยกสตริง (ตัวอย่างเช่นด้วยcut -d ';' -f1) แต่มันจะแยกส่วนเพิ่มเติมเนื่องจากฉันมี;อยู่ในส่วนด้านซ้าย

4
Linux: ฆ่ากระบวนการตามอาร์กิวเมนต์
ฉันจะฆ่ากระบวนการตามอาร์กิวเมนต์บรรทัดคำสั่งได้อย่างไร killall, pgrepและpkillดูเหมือนว่าจะใช้งานได้ตามชื่อกระบวนการเท่านั้น ฉันต้องการสิ่งนี้เพื่อให้สามารถแยกแยะความแตกต่างระหว่างจำนวนของแอปพลิเคชันที่ทำงานภายใน Java virtual machine ซึ่งjavaเป็นชื่อกระบวนการสำหรับพวกเขาทั้งหมดและชื่อแอปพลิเคชันที่แท้จริงสามารถพบได้โดยดูที่อาร์กิวเมนต์บรรทัดคำสั่ง สิ่งนี้สามารถทำได้ด้วยตัวเองps aux | grep myapp.jarแล้วฆ่า pid จากเอาต์พุตด้วยตนเอง แต่ฉันต้องการให้คำสั่งทำสิ่งที่เทียบเท่าโดยอัตโนมัติ
54 linux  kill 

3
ฉันจะทำให้ตัวแปรสภาพแวดล้อม“ ส่งออก” ใน shell script ติดรอบได้อย่างไร
ฉันมีบัญชี Amazon EC2 หลายบัญชีและต้องการเปลี่ยนตัวแปรอย่างรวดเร็วเช่นการ$EC2_HOMEใช้สคริปต์ ฉันได้ตั้งค่าสคริปต์เชลล์เช่นนี้: #!/bin/sh export EC2_HOME=/home/me/.ec2 echo $EC2_HOME เมื่อฉันเรียกใช้สคริปต์ฉันรู้ว่าEC2_HOMEมีการตั้งค่า แต่ฉันคิดว่าการใช้exportจะทำให้ตัวแปรติดรอบหลังจากสคริปต์เสร็จสมบูรณ์ มันไม่ได้ทำงานเหมือนecho $EC_HOMEไม่แสดงอะไรเลย ฉันรู้ว่านี่ต้องเป็นความรู้พื้นฐานเกี่ยวกับการเขียนสคริปต์ Linux แต่ฉันไม่รู้ ฉันพยายามหาคำถามที่เกี่ยวข้องโดยไม่มีโชค - ดังนั้นฉันจึงขอโทษถ้ามันซ้ำกัน

8
เรียกใช้สคริปต์บนล็อคหน้าจอ / ปลดล็อค
ฉันต้องการเรียกใช้หน้าจอหากเซสชัน Gnome ถูกล็อกและปลดล็อค มีวิธีที่ฉันสามารถดักจับสิ่งนี้และดำเนินการบางอย่างเมื่อเดสก์ท็อปถูกล็อกหรือปลดล็อกหรือไม่?
54 ubuntu  gnome 

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