Unix & Linux

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

4
วิธีปรับแต่งการแมปคีย์บอร์ดด้วย Wayland
ฉันใช้ Linux บน Macbook กับแป้นพิมพ์ UK / GB และฉันปรับแต่ง keymap เพื่อแก้ไขปัญหาบางประการที่ทำให้รูปแบบแป้นพิมพ์แปลก ๆ ของ Apple ฉันใช้xmodmapทำสิ่งนี้ ฉันต้องการลอง Wayland แต่xmodmapไม่ได้ผล ฉันจะบรรลุผลลัพธ์ที่คล้ายกันใน Wayland ได้อย่างไร .Xmodmapใช้ไฟล์ที่ผมมีต่อไปนี้: keycode 12 = 3 numbersign 3 sterling sterling sterling threesuperior sterling clear Control clear Mod4 add Control = Control_L Super_R add Mod4 = Super_L keysym Caps_Lock = NoSymbol …

3
ในกลุ่มฉันจะคัดลอกจากหลายบรรทัดได้อย่างไร (ไม่ใช่ช่วง);
สมมติว่าฉันมี 1 - funct1 2- funct 2 3 - funct 3 4 line 4 ฉันจะคัดลอกบรรทัดที่ 1 และ 3 ได้อย่างไร (ไม่ใช่ช่วงของเส้น) และวางตัวอย่างเช่นที่บรรทัดที่ 8 ถ้าฉันทำสิ่งนี้ในทางที่มี|arg like ( 1y|3y) ฉันจะดึงเส้นไปยังหลายรีจิสเตอร์ใช่ไหม? แต่ฉันจะเพิ่มการลงทะเบียนหลายครั้งพร้อมกันได้อย่างไร
20 vim 

1
เพราะเหตุใดค้นหาด้วย -delete ลบไฟล์ในไดเรกทอรี / save / ของฉันเมื่อค้นหาโดยไม่ลบไม่สามารถค้นหาได้
saveฉันต้องการที่จะลบไฟล์ทั้งหมดที่อยู่ในต้นไม้ไดเรกทอรีปัจจุบันยกเว้นผู้ที่อยู่ใน ฉันรันคำสั่งนี้: find . \( -name save -prune \) -o -type f -ls | grep /save/ และไม่พบเลย แต่เมื่อฉันรันคำสั่งนี้: find . \( -name save -prune \) -o -type f -delete ไฟล์เหล่านั้นทั้งหมดใน / บันทึก / หายไป ฉันพลาดอะไรไป
20 find 

6
ฉันจะป้อน n ซ้ำของตัวเลขในทุบตีโต้ตอบได้อย่างไร
ฉันต้องการเรียกใช้คำสั่ง foo --bar=baz <16 zeroes> ฉันจะพิมพ์ 16 ศูนย์ได้อย่างมีประสิทธิภาพได้อย่างไร ถ้าฉันAltกดค้างไว้1 6 0มันจะทำซ้ำสิ่งต่อไป 160 ครั้งซึ่งไม่ใช่สิ่งที่ฉันต้องการ ใน emacs ฉันสามารถใช้Alt-[number]หรือCtrl-u 1 6 Ctrl-u 0แต่ในทุบตีCtrl-uฆ่าสายที่ถูกพิมพ์ในขณะนี้และศูนย์ต่อไปเพียงแค่เพิ่ม 0 ลงในบรรทัด ถ้าฉันทำ foo --bar=baz $(printf '0%.0s' {1..16}) จากนั้นhistoryแสดงให้เห็นอย่างชัดเจนข้างต้นและไม่foo --bar=baz 0000000000000000; ie bash ไม่ทำงานในแบบที่ฉันต้องการ ( แก้ไข : เป็นจุดฉันต้องการที่จะใส่จำนวนศูนย์โดยไม่ต้องใช้การ$(...)ทดแทนคำสั่ง) (*) ฉันเดาว่าคำจำกัดความทางเทคนิคของ "มีประสิทธิภาพ" คือ "กับการกดแป้นพิมพ์ O (log n)" โดยเฉพาะอย่างยิ่งการกดแป้นจำนวนหนึ่งเท่ากับจำนวนหลักใน 16 (สำหรับค่าทั้งหมด 16) …

9
grepping สตริงคงที่ที่จุดเริ่มต้นของบรรทัด
grep "^$1"การเรียงลำดับของงาน แต่ฉันจะหลบหนี"$1"เพื่อ grep ไม่ตีความตัวละครใด ๆ ในนั้นเป็นพิเศษได้อย่างไร หรือมีวิธีที่ดีกว่า แก้ไข: ฉันไม่ต้องการค้นหา'^$1'แต่สำหรับสตริงคงที่ที่แทรกแบบไดนามิกซึ่งควรจับคู่ก็ต่อเมื่อเป็นจุดเริ่มต้นของบรรทัด $1นั่นคือสิ่งที่ฉันหมายถึงโดย
20 grep 

2
การค้นหาแบบคำนึงถึงขนาดตัวพิมพ์ใน awk
ฉันต้องการค้นหาคำหลักที่ใช้ awk แต่ฉันต้องการทำการค้นหาแบบตรงตามตัวพิมพ์ใหญ่ - เล็ก (ไม่ต้องตรงตามตัวพิมพ์ใหญ่ - เล็ก) ฉันคิดว่าวิธีที่ดีที่สุดคือการใช้ทั้งคำค้นหา ("คำสำคัญ") และบรรทัดเป้าหมายที่ awk อ่านพร้อมกัน จากคำถามนี้ฉันจะใช้toupperพิมพ์เป็นตัวพิมพ์ใหญ่ทั้งหมดได้อย่างไร แต่ฉันไม่รู้วิธีใช้ในการจับคู่เพราะคำตอบนั้นแสดงการพิมพ์และไม่ปล่อยให้ตัวพิมพ์ใหญ่เป็นตัวแปร นี่คือตัวอย่างที่ได้รับข้อมูลนี้: blablabla &&&Key Word&&& I want all these text and numbers 123 and chars !"£$%& as output &&&KEY WORD&&& blablabla ฉันต้องการผลลัพธ์นี้: I want all these text and numbers 123 and chars !"£$%& as output นี่คือสิ่งที่ฉันมี …

5
เหตุใดจึงมี EOF กลางข้อโต้แย้ง?
ฉันต้องการเขียนฟังก์ชั่นทุบตีเล็ก ๆ น้อย ๆ เช่นที่ฉันสามารถบอก bash import osหรือfrom sys import stdoutมันจะวางไข่ล่าม Python ใหม่ด้วยโมดูลที่นำเข้า fromฟังก์ชั่นหลังมีลักษณะเช่นนี้: from () { echo "from $@" | xxd python3 -i -c "from $@" } ถ้าฉันเรียกสิ่งนี้: $ from sys import stdout 00000000: 6672 6f6d 2073 7973 2069 6d70 6f72 7420 from sys import 00000010: 7374 646f 7574 …
20 bash  python 


1
คำสั่งทำให้ '1! G; h; $! d' กลับเนื้อหาของไฟล์ได้อย่างไร
คำถามของฉันมีความเกี่ยวข้องกับsedการแก้ปัญหา -specific ได้รับในคำตอบนี้สำหรับคำถามนี้grepping ย้อนกลับ sed/ grepแก้ปัญหาที่ฉันไม่สามารถที่จะถอดรหัสเป็นหนึ่งต่อไปนี้: sed '1!G;h;$!d' file มีคนช่วยถอดรหัสคำสั่งนี้ได้ไหม ฉันรู้จากความรู้ VI (M) ว่า G หมายถึงบรรทัดสุดท้ายของไฟล์และในบางกรณี (!) ตามด้วยที่อยู่ทำงานเล็กน้อยเช่นgrep -vที่จะบอกว่ามันจะไม่ตรงกับบรรทัดนั้น แต่โดยรวมสคริปต์แบบอินไลน์ข้างต้นอยู่เหนือฉัน
20 sed 

2
หมดเวลา, ทำลายท่อและห้องสุขา
ฉันมีความคิดที่จะเปรียบเทียบโปรแกรมบีบอัดข้อมูลอย่างรวดเร็ว เช่นสำหรับ gz ฉันจะเรียกใช้คำสั่ง: timeout 10 zcat foo.gz | wc -c ซึ่งจะวัดปริมาณข้อมูลที่ตัวขยายการบีบอัดสามารถแยกได้ใน 10 วินาที ปัญหาเดียวก็คือว่ามันใช้งานไม่ได้: เนื่องจาก zcat ถูกฆ่า, wc ก็ถูกฆ่าด้วยดังนั้นฉันจึงไม่ได้รับจำนวนไบต์เพียงแค่Terminatedข้อความ ดังนั้นคำถามคือ: มีวิธีที่จะได้รับการนับจาก wcโดยการปิดกั้นสัญญาณอย่างใดอย่างหนึ่งหรือใช้ทางเลือกแทน wc ที่พิมพ์ผลแม้ว่ามันจะได้รับสัญญาณระยะ แน่นอนว่ามีทางเลือกอื่น ๆ : การเขียนไปยังไฟล์ชั่วคราว: timeout 10 zcat foo.gz > /dev/shm/x ; du -sb /dev/shm/x ; rm -r /dev/shm/x ปัญหาที่เกิดขึ้นคือใช้หน่วยความจำจำนวนมากและอาจมีการปรับประสิทธิภาพบางอย่าง การใช้ ulimit แทน: ulimit -t 10; …
20 pipe  timeout 


3
`<& -` ทำอะไร
ฉันคัดลอกตัวอย่างของ Bash ไปยังพื้นหลังคำสั่ง ssh ที่ดำเนินการจากระยะไกล: ssh user@remote &lt;&lt;CMD some process &lt;&amp;- &gt;log 2&gt;error &amp; CMD อะไร&lt;&amp;-ทำอย่างไร ฉันเดาว่ามันเหมือนกับ&lt; /dev/null ความเข้าใจต่อไปของฉันอยู่ที่สามอธิบายไฟล์หลัก ( stdin, stdout, stderr) จะต้องมีการปิดเพื่อป้องกัน: งานที่อยู่เบื้องหลังและออกจากสคริปต์ - ขัดแย้งกันอย่างไร? เมื่อปิดเทอร์มินัลกระบวนการทั้งหมดที่ยอมรับ stdin จากเทอร์มินัลจะปิด?

3
ฉันสามารถสร้างไดเรกทอรีสาธารณะภายใต้ไดเรกทอรีส่วนตัวได้หรือไม่
ฉันมีโฟลเดอร์ส่วนบุคคล / a / b บนเซิร์ฟเวอร์ที่มีสิทธิ์ 700 ฉันไม่ต้องการให้ผู้อื่นแสดงรายการเนื้อหาใน / a / b เจ้าของ / a เป็นรูท ตอนนี้ฉันต้องเปิดสิทธิเต็มรูปแบบของไดเรกทอรี / a / b / c ให้กับผู้ใช้ทั้งหมด ฉันเปลี่ยนการอนุญาตของ / a / b / c เป็น 777 แต่ก็ยังไม่สามารถเข้าถึงได้สำหรับผู้อื่น

3
ซอร์สโค้ดล่าสุดของคำสั่ง man สำหรับ linux อยู่ที่ไหน
ฉันกำลังมองหาซอร์สโค้ดคำสั่ง man ล่าสุดเวอร์ชันใน Linux ของฉันค่อนข้างเก่า (v1.6f) แต่ฉันล้มเหลวหลังจาก Google ไปสักครู่ ฉันหมายถึงซอร์สโค้ดล่าสุดของmanไม่ใช่man-pagesไฟล์ไบนารีใน/usr/bin/manตัวมันเองซึ่งสามารถรวบรวมและติดตั้งได้
20 linux  man 

3
แสดงเฉพาะ hunks ที่เกี่ยวข้องของ diff / patch ตาม regexp
git log -G&lt;regex&gt; -pเป็นเครื่องมือที่ยอดเยี่ยมในการค้นหาประวัติของ codebase สำหรับการเปลี่ยนแปลงที่ตรงกับรูปแบบที่ระบุ อย่างไรก็ตามมันอาจเป็นเรื่องยากที่จะค้นหาก้อนใหญ่ที่เกี่ยวข้องในเอาท์พุท diff / patch ในทะเลของนักล่าที่ไม่เกี่ยวข้องส่วนใหญ่ แน่นอนว่าเป็นไปได้ที่จะค้นหาผลลัพธ์ของgit logสตริง / regex ดั้งเดิม แต่ก็มีน้อยที่จะลดเสียงรบกวนที่มองเห็นและการเบี่ยงเบนของการเปลี่ยนแปลงที่ไม่เกี่ยวข้องจำนวนมาก อ่านต่อgit logไปฉันเห็นว่ามันมี--pickaxe-allซึ่งตรงข้ามกับสิ่งที่ฉันต้องการ: มันขยายเอาต์พุต (ไปยังชุดการเปลี่ยนแปลงทั้งหมด) ในขณะที่ฉันต้องการ จำกัด (เฉพาะก้อนใหญ่) โดยพื้นฐานแล้วฉันกำลังมองหาวิธี "แยกแยะ" อย่างชาญฉลาด "ในการแยก diff / patch ลงใน hunks แต่ละอันแล้วทำการค้นหากับแต่ละก้อนใหญ่ (กำหนดเป้าหมายเพียงแค่บรรทัดที่เปลี่ยนไป) ทิ้งกลุ่ม hunks ที่ไม่ตรงกัน ที่ทำ มีเครื่องมือเช่นที่ฉันอธิบายอยู่หรือไม่? มีวิธีการที่ดีกว่าในการได้รับการจับคู่หรือได้รับผลกระทบหรือไม่? งานวิจัยเริ่มแรกที่ฉันทำ ... หากเป็นไปได้ที่จะgrepส่งออก diff / patch และทำให้ค่าตัวเลือกบริบทเป็นแบบไดนามิก - พูดผ่าน …
20 git  diff  patch 

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