Unix & Linux

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

7
วิธีอ่านบรรทัดแรกและบรรทัดสุดท้ายจากเอาต์พุต cat?
ฉันมีไฟล์ข้อความ งาน - รับบรรทัดแรกและบรรทัดสุดท้ายจากไฟล์หลังจาก $ cat file | grep -E "1|2|3|4" | commandtoprint $ cat file 1 2 3 4 5 ต้องการสิ่งนี้โดยไม่ต้องใช้เอาต์พุต cat (เพียง 1 และ 5) ~$ cat file | tee >(head -n 1) >(wc -l) 1 2 3 4 5 5 1 อาจจะมีวิธีแก้ปัญหาที่สั้นลงและสั้นลงกว่าเดิม ...
64 bash  shell  sed  awk  grep 

8
การแก้“ mv: รายการอาร์กิวเมนต์ยาวเกินไป” หรือไม่
ฉันมีโฟลเดอร์ที่มีไฟล์มากกว่าล้านไฟล์ที่ต้องการเรียงลำดับ แต่ฉันไม่สามารถทำอะไรได้เลยเพราะmvแสดงข้อความนี้ตลอดเวลา -bash: /bin/mv: Argument list too long ฉันใช้คำสั่งนี้เพื่อย้ายไฟล์ส่วนขยายที่น้อยกว่า: mv -- !(*.jpg|*.png|*.bmp) targetdir/
64 bash  shell  arguments  mv 

2
ส่งข้อความไปยังผู้ใช้รายอื่น
มีคำสั่งให้ส่งข้อความผ่านเชลล์ Linux ไปยังบุคคลอื่นในเครือข่ายเดียวกันหรือไม่? ฉันใช้write userแล้วเขียนข้อความเอง แต่มีคำสั่งใด ๆ ที่ไม่แสดงชื่อผู้ใช้ของฉันหรือฉันพยายามส่งข้อความถึงพวกเขา คำสั่งที่ฉันใช้จะแสดงให้ผู้ใช้ที่ฉันพยายามติดต่อ (รหัสที่นำมาจากเว็บ): Message from root@dev.example.com on pts/1 at 17:11 ...

6
การตรวจจับลวดลายที่ส่วนท้ายของบรรทัดด้วย grep
ถ้าฉันทำ: $ ls -R .: 4Shared/ Cloud/ ./4Shared: UFAIZLV2R7.part3.rar ./Cloud: UFAIZLV2R7.part2.rar.part UFAIZLV2R7.part1.rar.part UFAIZLV2R7.part4.rar.part ถ้าฉันต้องการแสดงรายการ.rarไฟล์เท่านั้นและฉันใช้grepมันจะแสดง.rar.partไฟล์ให้ฉันด้วยเช่นกันสิ่งที่ฉันไม่ต้องการ ฉันกำลังแก้นี้โดยใช้findหรือls **/*.rarที่บอกในหัวข้อนี้และพวกเขาทำงานได้ดี grepแต่ผมอยากจะเรียนรู้ว่ามันเป็นไปได้ที่จะทำมันผ่าน ฉันลองแล้ว (กำลังคิดEOL): ls -R | grep ".rar\n" โดยไม่มีผลลัพธ์ ฉันคิดว่าปัญหาอยู่ที่การค้นพบว่าพบ greping ที่ส่วนท้ายของบรรทัดแต่ฉันไม่แน่ใจ มีอะไรช่วยด้วยมั้ย
64 grep 

3
ฉันจะตรวจสอบว่าไฟล์เป็นลิงค์สัญลักษณ์ไปยังไดเรกทอรีได้อย่างไร?
ฉันสามารถตรวจสอบได้ว่ามีไฟล์อยู่หรือไม่และเป็นลิงก์สัญลักษณ์ที่มี -L for file in *; do if [[ -L "$file" ]]; then echo "$file is a symlink"; else echo "$file is not a symlink"; fi done และถ้ามันเป็นไดเรกทอรีที่มี -d: for file in *; do if [[ -d "$file" ]]; then echo "$file is a directory"; else echo "$file is a …
64 bash  shell  test 

5
ฉันจะแก้ไขลิงก์ได้อย่างไร
ความเข้าใจพื้นฐานของฉันเกี่ยวกับ symlink เป็นไฟล์พิเศษไฟล์ที่มีเส้นทางสตริงไปยังไฟล์อื่น VFS ของเคอร์เนลมีจำนวนมากออกไป แต่มีเหตุผลใดที่ symlink ดูเหมือนจะเป็นไปไม่ได้ที่จะแก้ไข? กล่าวอีกนัยหนึ่ง: ฉันสามารถแก้ไข symlink ได้หรือไม่ ถ้าไม่ทำไมไม่ ฉันเข้าใจว่ามีหลายวิธีในการแทนที่ symlinks (ปัจจุบันมีสองทางเลือกในส่วนคำตอบ) แต่มันน่าสนใจที่จะได้รับคำอธิบายว่าทำไมการแทนที่จึงดูเหมือนจะเป็นวิธีเดียวที่จะจัดการกับ symlink ทำไมคุณไม่เปลี่ยนจุดที่พวกมันชี้ไป?

7
เชลล์สคริปต์ล้มเหลว: ข้อผิดพลาดทางไวยากรณ์:“ (” ไม่คาดคิด
ฉันทำงานกับสคริปต์ที่ตั้งค่าสภาพแวดล้อมการพัฒนาโดยอัตโนมัติสำหรับการพัฒนา Raspberry Pi (รายละเอียดทีละขั้นตอนที่ทำงานอยู่ที่นี่ ) สคริปต์ที่มีการเชื่อมโยงในบทความนั้น แต่ความสะดวกของคุณสามารถค้นหาได้ที่นี่ยัง ตอนนี้เมื่อรันสคริปต์นี้ติดตั้งและตั้งค่าสภาพแวดล้อมโดยไม่มีข้อผิดพลาด แต่คุณต้องป้อนรหัสผ่าน sudo ของคุณมากกว่าหนึ่งครั้งเนื่องจากค่าการหมดเวลาของ sudo โดยค่าเริ่มต้น ดังนั้นฉันเริ่มทดลองโดยลบบรรทัด sudo ทั้งหมดและรันสคริปต์ทั้งหมดผ่าน sudo ที่บรรทัดคำสั่งดังนี้: kemra102@ubuntuvm:~$ sudo ./pi_dev_env_install.sh วิธีนี้ใช้งานได้ตามที่คาดหวังและได้รับประโยชน์สูงสุดจนถึงจุดนี้: ./pi_dev_env_install: 68: ./pi_dev_env_install.sh: Syntax error: "(" unexpected ตอนนี้บรรทัดนี้ใช้งานได้ดีก่อนหน้านี้เมื่อไม่ได้เรียกใช้สคริปต์ทั้งหมดด้วย sudo ไม่มีอะไรเกี่ยวกับบรรทัดนี้ที่ทำงานเหมือน sudo ที่ควรหยุดทำงานกับความรู้ของฉันไม่มีใครมีความคิดบ้างไหม?

4
วิธีรวบรวมคอมไพเลอร์ C ตั้งแต่เริ่มต้นจากนั้นคอมไพล์ Unix / Linux จากศูนย์
สมมติว่าฉันทำงานให้กับองค์กรบริการขนาดใหญ่นอกสหรัฐอเมริกา / สหราชอาณาจักร เราใช้เซิร์ฟเวอร์ UNIX และ Linux อย่างกว้างขวาง การอ่านบทความนี้ระบุว่าเป็นการง่ายที่จะแทรกแบ็คดอร์ในคอมไพเลอร์ C จากนั้นโค้ดใด ๆ ที่คอมไพล์ด้วยคอมไพเลอร์นั้นจะมีแบ็คดอร์ จากการรั่วไหลเมื่อเร็ว ๆ นี้เกี่ยวกับคำสั่งของ NSA / GCHQ ที่จะทำให้แบ็คดอร์ / จุดอ่อนในวิธีการเข้ารหัสฮาร์ดแวร์และซอฟต์แวร์ทั้งหมดคอมไพเลอร์กลายเป็นจุดสำคัญของความล้มเหลว ศักยภาพการกระจาย UNIX / Linix มาตรฐานทั้งหมดอาจถูกบุกรุก เราไม่สามารถที่จะมีระบบข้อมูลและข้อมูลลูกค้าของเราที่ถูกโจมตีโดยรัฐบาลโกง รับข้อมูลนี้ฉันต้องการสร้างคอมไพเลอร์ที่เชื่อถือได้ตั้งแต่เริ่มต้นแล้วฉันมีฐานที่ปลอดภัยในการสร้างดังนั้นฉันจึงสามารถสร้างระบบปฏิบัติการและแอปพลิเคชันจากซอร์สโค้ดโดยใช้คอมไพเลอร์นั้น คำถาม อะไรคือวิธีที่ถูกต้อง (และปลอดภัย) ในการรวบรวมคอมไพเลอร์จากซอร์สโค้ด (สถานการณ์ไก่ไข่ที่ดูเหมือน) แล้วรวบรวมการแจกจ่าย Unix / Linux ที่เชื่อถือได้ตั้งแต่เริ่มต้น? คุณสามารถสันนิษฐานได้ว่าฉันหรือผู้อื่นมีความสามารถในการอ่านและทำความเข้าใจซอร์สโค้ดสำหรับข้อบกพร่องด้านความปลอดภัยดังนั้นซอร์สโค้ดจะถูกตรวจสอบก่อนรวบรวม สิ่งที่ฉันเป็นจริงหลังจากนั้นเป็นแนวทางในการทำงานเพื่อสร้างคอมไพเลอร์นี้จากศูนย์อย่างปลอดภัยและสามารถใช้ในการรวบรวมเคอร์เนลส่วนอื่น ๆ ของระบบปฏิบัติการและแอปพลิเคชัน สแต็กการรักษาความปลอดภัยจะต้องเริ่มต้นที่ระดับฐานหากเรามั่นใจในระบบปฏิบัติการหรือแอพพลิเคชั่นที่ทำงานบนสแต็กนั้น ใช่ฉันเข้าใจว่าอาจมีฮาร์ดแวร์ด้านหลังซึ่งอาจแทรกไมโครโค้ดบางส่วนลงในคอมไพเลอร์เมื่อสร้างขึ้น ไม่มากที่เราสามารถทำได้เกี่ยวกับเรื่องนี้ในขณะนั้นยกเว้นอาจใช้ชิปที่ไม่ได้ออกแบบในสหรัฐอเมริกา มาจัดเรียงเลเยอร์นี้เพื่อเริ่มต้นและสมมติว่าฉันสามารถสร้างมันบนคอมพิวเตอร์เครื่องเก่าก่อนที่จะแทรกแบ็คดอร์ใดก็ได้ ดังที่บรูชชไนเออร์พูดว่า: "สำหรับวิศวกรฉันพูดแบบนี้: เราสร้างอินเทอร์เน็ตและพวกเราบางคนช่วยในการล้มล้างตอนนี้พวกเราที่รักเสรีภาพต้องแก้ไขมัน" …

2
การเรียกลิงก์สัญลักษณ์ซ้ำ - อะไรทำให้ "รีเซ็ต"?
ฉันเขียนสคริปต์ทุบตีเล็ก ๆ น้อย ๆ เพื่อดูว่าเกิดอะไรขึ้นเมื่อฉันติดตามลิงก์สัญลักษณ์ที่ชี้ไปยังไดเรกทอรีเดียวกัน ฉันคาดหวังว่ามันจะสร้างไดเร็กตอรี่ที่ใช้งานได้นานมากหรือพัง. แต่ผลที่ได้ทำให้ฉันประหลาดใจ ... mkdir a cd a ln -s ./. a for i in `seq 1 1000` do cd a pwd done บางส่วนของผลลัพธ์คือ ${HOME}/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a ${HOME}/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a ${HOME}/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a ${HOME}/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a ${HOME}/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a ${HOME}/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a ${HOME}/a ${HOME}/a/a ${HOME}/a/a/a ${HOME}/a/a/a/a ${HOME}/a/a/a/a/a ${HOME}/a/a/a/a/a/a ${HOME}/a/a/a/a/a/a/a ${HOME}/a/a/a/a/a/a/a/a เกิดอะไรขึ้นที่นี่
64 bash  symlink 

5
ฉันจะลบดิสก์ SATA อย่างปลอดภัยออกจากระบบที่รันอยู่ได้อย่างไร
บางครั้งฉันจำเป็นต้องเสียบดิสก์เข้ากับช่องใส่ดิสก์ ในบางครั้งฉันมีการตั้งค่าที่แปลกมากในการเชื่อมต่อ SSD โดยใช้สายเคเบิล SATA-eSATA บนแล็ปท็อปของฉันในขณะที่ดึงพลังงานจากเดสก์ท็อป ฉันจะลบดิสก์ SATA ออกจากระบบได้อย่างปลอดภัยได้อย่างไร ฟอรัมฟอรัมPhoronixนี้มีคำแนะนำ: justsumdood wrote: An Droid (noymous) wrote: แล้วคุณจะทำอะไรในด้านซอฟต์แวร์ก่อนที่จะถอดปลั๊ก? มันเป็น "umount / dev / sd" ง่าย ๆ [ตัวอักษรไดรฟ์]? หลังจากเลิกเมานท์อุปกรณ์เพื่อ "ปิดเครื่อง" (หรือสลีป) เครื่อง: hdparm -Y /dev/sdX (โดยที่ X แทนอุปกรณ์ที่คุณต้องการปิดเช่น: / dev / sdb) สิ่งนี้จะให้พลังงานแก่ไดรฟ์เพื่อให้สามารถกำจัดได้โดยไม่เสี่ยงต่อแรงดันไฟกระชาก นี่หมายความว่าแคชของดิสก์ถูกล้างออกและปิดอย่างถูกต้องหรือไม่ ข้อเสนอแนะอื่นจากหัวข้อเดียวกัน: chithanh wrote: ฮาร์ดแวร์ SATA และ eSATA ทั้งหมดสามารถใช้ …
64 ssd  sata  hot-plug  disk 

7
ลินุกซ์เทียบเท่ากับไฟล์ C: \ Program คืออะไร
ฉันเข้าใจว่าใน Windows รวมถึง Linux และ Unix สามารถติดตั้งโปรแกรม | แอปพลิเคชั่น | ซอฟต์แวร์ในไดเรกทอรีใด ๆ นอกจากนี้หากมีการติดตั้งแพคเกจโดยใช้ระบบบรรจุภัณฑ์ของการกระจายมันจะวางไฟล์ในตำแหน่งที่ถูกต้อง แต่ในบางครั้งการติดตั้งซอฟต์แวร์จะแจ้งให้พา ธ ไปวางไฟล์ ในกรณีของดิสทริบิวเตอร์ distro ที่นี่เป็นสถานที่เริ่มต้น ( C:\Program FilesหรือC:\progra~1เทียบเท่า)? มันแตกต่างกันสำหรับการแจกแจงต่าง ๆ หรือไม่? ถ้าใช่ที่นี้จะเป็นสำหรับRHEL, SuseและUbuntu?

5
รายการไฟล์ที่เข้าถึงโดยโปรแกรม
time เป็นคำสั่งที่ยอดเยี่ยมถ้าคุณต้องการที่จะคำนวณเวลาของ CPU ที่คำสั่งที่ได้รับ ฉันกำลังมองหาสิ่งที่คล้ายกันซึ่งสามารถแสดงรายการไฟล์ที่โปรแกรมและลูก ๆ ของคุณเข้าถึงได้ ไม่ว่าจะเป็นแบบเรียลไทม์หรือเป็นรายงานในภายหลัง ปัจจุบันฉันใช้: #!/bin/bash strace -ff -e trace=file "$@" 2>&1 | perl -ne 's/^[^"]+"(([^\\"]|\\[\\"nt])*)".*/$1/ && print' sudoแต่ล้มเหลวหากคำสั่งในการทำงานที่เกี่ยวข้องกับการ มันไม่ได้ฉลาดมาก (มันจะดีถ้ามันสามารถแสดงรายการไฟล์ที่มีอยู่หรือมีปัญหาสิทธิ์หรือจัดกลุ่มเป็นไฟล์ที่อ่านและไฟล์ที่เขียน) นอกจากนี้ยังstraceเป็นไปอย่างช้าดังนั้นมันจะดีกับทางเลือกที่เร็วขึ้น


1
ฉันจะบังคับให้ลบแพ็กเกจใน Arch ด้วย pacman ได้อย่างไร
ฉันจะบังคับให้ลบแพ็กเกจใน Arch ด้วยได้อย่างไรpacmanในขณะที่แพ็กเกจอื่นยังคงขึ้นอยู่กับมัน pacman -R perl-libwww checking dependencies... error: failed to prepare transaction (could not satisfy dependencies) :: perl-app-cpanminus: requires perl-libwww>=5.828 :: perl-app-pmuninstall: requires perl-libwww :: perl-app-sd: requires perl-libwww :: perl-catalyst-action-rest: requires perl-libwww>=2.033 :: perl-catalyst-runtime: requires perl-libwww>=1.64 :: perl-cpan: requires perl-libwww :: perl-cpan-mini: requires perl-libwww :: perl-cpan-uploader: requires perl-libwww :: …

7
สร้างลิงก์สัญลักษณ์ไปยังชื่อพา ธ แบบสัมพันธ์
ฉันสามารถทำสิ่งนี้: $ pwd /home/beau $ ln -s /home/beau/foo/bar.txt /home/beau/bar.txt $ readlink -f bar.txt /home/beau/foo/bar.txt แต่ฉันต้องการทำสิ่งนี้: $ pwd /home/beau $ cd foo $ ln -s bar.txt /home/beau/bar.txt $ readlink -f /home/beau/bar.txt /home/beau/foo/bar.txt เป็นไปได้ไหม ฉันสามารถแก้ไขชื่อพา ธ สัมพัทธ์และส่งต่อไปยังวิธีlnใด
64 symlink 

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