Unix & Linux

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

8
แทนที่สตริงที่มีการขึ้นบรรทัดใหม่ในไฟล์ขนาดใหญ่
มีใครรู้บ้างเกี่ยวกับเครื่องมือที่ไม่ใช้บรรทัดในการค้นหา / แทนที่สตริงในวิธีที่ค่อนข้างมีประสิทธิภาพ ดูคำถามนี้ด้วย ฉันมีไฟล์ข้อความ + 2GB ที่ฉันต้องการประมวลผลคล้ายกับสิ่งที่ดูเหมือนจะทำ: sed -e 's/>\n/>/g' ซึ่งหมายความว่าผมต้องการที่จะลบบรรทัดใหม่ทั้งหมดที่เกิดขึ้นหลังจากที่มีแต่ไม่ได้ทุกที่อื่นดังนั้นกฎที่ออกมา>tr -d คำสั่งนี้ (ที่ฉันได้จากคำตอบของคำถามที่คล้ายกัน ) ล้มเหลวด้วยcouldn't re-allocate memory: sed --unbuffered ':a;N;$!ba;s/>\n/>/g' ดังนั้นมีวิธีการอื่นใดโดยไม่หันไปใช้ C? ฉันเกลียด Perl แต่ยินดีที่จะยกเว้นในกรณีนี้ :-) ฉันไม่รู้ว่าตัวละครใดที่ไม่ได้เกิดขึ้นในข้อมูลดังนั้นการแทนที่\nด้วยอักขระอื่นชั่วคราวเป็นสิ่งที่ฉันต้องการหลีกเลี่ยงถ้าเป็นไปได้ มีความคิดที่ดีมีใครบ้าง?

4
ฉันจะเปลี่ยน lsof ภายใน Docker ได้อย่างไร (เป็นภาษาท้องถิ่นไม่ใช่ LXC)
ฉันค่อนข้างงุนงงว่าภายในคอนเทนเนอร์ Docker lsof -iไม่ได้ให้ผลลัพธ์ใด ๆ ตัวอย่าง (คำสั่ง / เอาต์พุตทั้งหมดจากภายในคอนเทนเนอร์): [1] root@ec016481cf5f:/# lsof -i [1] root@ec016481cf5f:/# netstat -tulpn Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN - tcp6 0 0 :::22 :::* LISTEN - โปรดทราบว่าไม่มี PID netstatหรือโปรแกรมชื่อแสดงโดยfuserยังให้ผลลัพธ์ที่ค่อนข้างสับสนและไม่สามารถระบุ PID …

4
เปรียบเทียบสองคอลัมน์ของไฟล์ต่างกันและพิมพ์ถ้ามันตรงกัน
ฉันใช้ Solaris 10 และตัวเลือก grep ที่เกี่ยวข้องกับ -f ไม่ทำงาน ฉันมีไฟล์สองไฟล์ที่คั่นด้วย pipe: file1: abc|123|BNY|apple| cab|234|cyx|orange| def|kumar|pki|bird| ไฟล์ 2: abc|123| kumar|pki| cab|234 ฉันต้องการเปรียบเทียบสองคอลัมน์แรกของ file2 กับ file1 (ค้นหาเนื้อหาทั้งหมดของ file1 ในสองคอลัมน์แรก) หากตรงกับพิมพ์บรรทัดที่ตรงกันของ file1 จากนั้นค้นหาบรรทัดที่สองของไฟล์ 2 และอื่น ๆ ผลลัพธ์ที่คาดหวัง: abc|123|BNY|apple| cab|234|cyx|orange| ไฟล์ที่ฉันมีมีขนาดใหญ่มากมีประมาณ 400,000 บรรทัดดังนั้นฉันต้องการทำให้การดำเนินการเป็นไปอย่างรวดเร็ว

4
มี ssh-add เงียบถ้ามีกุญแจอยู่แล้ว
ฉันต้องการที่จะวางssh-add /path/to/special_keyที่ด้านบนของสคริปต์ วิธีนี้ใช้งานได้ดี แต่จะพร้อมท์ให้ใส่ข้อความรหัสผ่านเสมอ นี่เป็นเรื่องแปลกและน่ารำคาญเล็กน้อยเพราะมันยังถามรหัสผ่านถึงแม้ว่าจะssh-add -lแสดงว่ามีการเพิ่มรหัสแล้ว มีวิธีบอกหรือไม่ว่า: "เพิ่มรหัสนี้และถามวลีรหัสผ่านหากยังไม่ได้เพิ่มหรือไม่ทำอะไรเลย"

2
เป็นไปได้ไหมที่จะดูข้อมูลแพ็คเกจจากเทอร์มินัลก่อนทำการติดตั้ง?
ฉันสงสัยว่ามันเป็นไปได้ที่จะตรวจสอบข้อมูลเกี่ยวกับแพคเกจก่อนที่จะติดตั้งโดยไม่จำเป็นต้องเปิดเว็บเบราว์เซอร์เพื่อค้นหาที่นั่น ตัวอย่างเช่นพิมพ์ I ~$ asdf จากนั้นฉันเห็นแพ็คเกจที่แนะนำ: No command 'asdf' found, did you mean: Command 'asdfg' from package 'aoeui' (universe) Command 'sadf' from package 'sysstat' (main) Command 'sdf' from package 'sdf' (universe) asdf: command not found บอกว่าฉันต้องการที่จะหาสิ่งที่แพคเกจ 'sdf' ฉันสามารถค้นหาข้อมูลนี้ในเทอร์มินัลหรือฉันจะต้องทำมันช้าและค้นหาออนไลน์?

1
เป็นไปได้หรือไม่ที่จะรับ ID กลุ่มกระบวนการจาก / proc
ใน " /programming/13038143/how-to-get-pids-in-one-process-group-in-linux-os " ผมเห็นคำตอบทั้งหมดกล่าวขวัญและไม่มีการกล่าวขวัญps/proc "ps" ดูเหมือนจะไม่พกพาได้มาก (รุ่น Android และ Busybox คาดว่าจะมีข้อโต้แย้งที่แตกต่างกัน) และฉันต้องการแสดง pids ด้วย pgids ด้วยเครื่องมือที่ง่ายและพกพาได้ ใน /proc/.../status ฉันเห็นTgid:(ID กลุ่มเธรด), Gid:(รหัสกลุ่มเพื่อความปลอดภัยไม่ใช่สำหรับการจัดกลุ่มกระบวนการร่วมกัน) แต่ไม่ใช่PGid:... อะไรคือวิธีการอื่น ๆpsของการได้รับ pgid จาก pid?

3
EXT3: ถ้าขนาดบล็อกเป็น 4K ทำไม ls -l แสดงขนาดไฟล์ด้านล่าง
หากคุณรัน ls -l ในไฟล์ที่มีตัวอักษรหนึ่งตัวจะมีขนาดเป็น 2B หากระบบไฟล์ของคุณอยู่ในบล็อก 4k ฉันคิดว่ามันปัดไฟล์เป็นขนาดบล็อกหรือไม่ เป็นเพราะ ls -l อ่านจำนวนไบต์จาก inode จริงหรือไม่ ในกรณีใดบ้างที่คุณถูกปัดเศษขึ้นเพื่อบล็อกคำตอบกับจำนวนไบต์ที่แท้จริงในคำตอบใน Linux 2.6 Kernel GNU utils
16 linux  filesystems  ls  ext3 

1
เปอร์เซ็นต์ในตัวแปรสภาพแวดล้อม $ PATH
$ PATH ของฉันมีลักษณะดังนี้: /home/torbjorr/deployed/vector/x86_64-GNU%2fLinux:/home/torbjorr/deployed/typewriter/x86_64-GNU%2fLinux:/home/torbjorr/deployed/mustudio/x86_64-GNU%2fLinux:/home/torbjorr/deployed/mathext/x86_64-GNU%2fLinux:/home/torbjorr/deployed/doxymax/x86_64-GNU%2fLinux:/home/torbjorr/deployed/c2tex/x86_64-GNU%2fLinux:/home/torbjorr/deployed/x86_64-GNU%2fLinux/wand:/home/torbjorr/deployed/x86_64-GNU%2fLinux/spellesc:/home/torbjorr/deployed/x86_64-GNU%2fLinux/projinit:/home/torbjorr/deployed/x86_64-GNU%2fLinux/herbs:/home/torbjorr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games ในทุบตีฉันสามารถไม่มีปัญหาเรียกคันตั้งอยู่ใน /home/torbjorr/deployed/x86_64-GNU%2fLinux/wand ชอบ $ wand (i) Mål från "main.cpp" har registrerats (i) Skapar katalog "__wand_targets_dbg" (i) Kör g++ "main.cpp" -fpic -L"/home/torbjorr/deployed" -g -Wall -std=c++11 -I"/home/torbjorr/deployed" -o "__wand_targets_dbg/cb-template อย่างไรก็ตามในโหมดความเข้ากันได้ของเชลล์ bourne ไม่พบไม้กายสิทธิ์: $ wand sh: 2: wand: not found ดูเหมือนว่าปัญหาคือเครื่องหมาย% ในพา ธ เหล่านี้ เครื่องหมายนี้ได้รับการเพิ่มโดยการเข้ารหัส URL เพื่อให้สามารถใช้ชื่อ "GNU / …
16 shell  path  dash  ash 

2
การใช้งานจริงของตัวเลือก `set -k` ใน bash
เมื่อไหร่ที่เราจะใช้set -kตัวเลือกในการทุบตี? คู่มืออ้างอิง Bashกล่าวว่า อาร์กิวเมนต์ทั้งหมดในรูปแบบของคำสั่งการมอบหมายจะถูกวางไว้ในสภาพแวดล้อมสำหรับคำสั่งไม่ใช่เฉพาะที่นำหน้าชื่อคำสั่ง ฉันเข้าใจว่าตัวเลือกทำอะไร แต่ไม่สามารถจินตนาการได้เมื่อเราต้องการ
16 bash  shell 

4
ฉันสามารถโอนการอนุญาตของผู้ใช้ข้ามคอมพิวเตอร์สำหรับฮาร์ดไดรฟ์ภายนอก ext4 ได้หรือไม่
ฉันมีดิสก์ไดรฟ์ USB 3 ภายนอก (ความจุ 2TB) ที่น่าจะถูกย้ายจากเครื่องหนึ่งไปยังอีกเครื่องหนึ่ง ดิสก์มีตารางพาร์ติชัน GUID และพาร์ติชัน ext4 ฉันไม่สามารถเขียนลงดิสก์ได้เว้นแต่จะยกระดับกระบวนการ ( sudo) ณ ตอนนี้ฉันกำลังคิดว่าจะลองอย่างใดอย่างหนึ่งหรือทั้งสองอย่างต่อไปนี้และต้องการทราบข้อเสียของแต่ละข้อ - chmod 777 /mnt/externalDrive chown nobody:nogroup /mnt/externalDrive ถ้าฉันให้สิทธิ์ 777 และ user1 (UID: 1005) เขียนลงไปและฉันก็ย้ายดิสก์ไปยังคอมพิวเตอร์เครื่องอื่นโดยที่ user7 เป็น UID: 1005 จะเกิดอะไรขึ้น user7 กลายเป็นเจ้าของไฟล์ในคอมพิวเตอร์เครื่องนั้นหรือไม่ ดูเหมือนว่าฉันจะต้องเรียกใช้chown -R nobody:nogroup /mnt/externalDriveบนดิสก์เป็นระยะ มีสิ่งใดที่ฉันกำลังพิจารณาถึงการปฏิบัติที่ไม่ดีอย่างเห็นได้ชัดหรือไม่? ดิสก์ส่วนใหญ่จะมีวิดีโอเพลงและรูปภาพที่ไม่จำเป็นต้องได้รับการปกป้องเช่นเดียวกับข้อมูลทางการเงิน

1
การทุบตีเสร็จสมบูรณ์สำหรับค่าที่คั่นด้วยเครื่องหมายจุลภาค
ฉันต้องการสร้างกฎความสมบูรณ์สำหรับรายการพารามิเตอร์ที่คั่นด้วยเครื่องหมายจุลภาค เช่นฉันมีคำสั่งที่ได้รับรายชื่อเซิร์ฟเวอร์: myscript -s name1,name2,name3 ในขณะนี้ฉันได้จัดการเขียนเสร็จสมบูรณ์ดังต่อไปนี้: _myscript () { local cur prev opts _get_comp_words_by_ref cur prev opts='-s' servers='name1 name2 name3' if [[ ${cur} == -* ]] ; then COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) else case "${prev}" in -s) if [[ "$cur" == *,* ]]; then local realcur prefix …

5
ฟังก์ชันทุบตี stateful
ฉันต้องการใช้ฟังก์ชั่นใน Bash ซึ่งจะเพิ่มจำนวน (และคืน) จำนวนการโทรทุกครั้ง น่าเสียดายที่นี่ดูไม่สำคัญเพราะฉันเรียกใช้ฟังก์ชั่นภายใน subshell และดังนั้นจึงไม่สามารถแก้ไขตัวแปรของ parent shell ได้ นี่คือความพยายามของฉัน: PS_COUNT=0 ps_count_inc() { let PS_COUNT=PS_COUNT+1 echo $PS_COUNT } ps_count_reset() { let PS_COUNT=0 } นี้จะใช้ดังนี้ (และด้วยเหตุนี้ฉันต้องเรียกใช้ฟังก์ชันจาก subshell): PS1='$(ps_count_reset)> ' PS2='$(ps_count_inc) ' ด้วยวิธีนี้ฉันจะได้รับพรอมต์หลายบรรทัดที่มีหมายเลข: > echo 'this 1 is 2 a 3 test' น่ารัก แต่เนื่องจากข้อ จำกัด ดังกล่าวไม่ทำงาน โซลูชันที่ไม่ทำงานจะเขียนจำนวนลงในไฟล์แทนตัวแปร อย่างไรก็ตามสิ่งนี้จะสร้างความขัดแย้งระหว่างเซสชันหลายเซสชันพร้อมกัน ฉันสามารถต่อท้าย ID …

6
SSH อัพอัตโนมัติระยะไกลอัพ
ฉันมีสองเครื่องและA Bเครื่องAสามารถ ssh Bเข้าไป Aมีพื้นที่ว่างมากมาย Bข้อมูลของอยู่ในประเภทที่มีความเสี่ยง ฉันจะสำรองข้อมูลทั้งหมดของBให้เป็นAอัตโนมัติได้อย่างไร ไม่จำเป็นต้องมีบ่อยครั้งมาก แต่ควรเป็นแบบแฮนด์ฟรี ทุกครั้งที่Aบูทขึ้นจะบ่อยพอ ฉันได้ยินว่าการซิงค์สามารถทำได้
16 ssh  backup 

6
อะไรคือ 'ฟิลด์' สำหรับคำสั่ง cut?
ตัวอย่างเช่นcutคำสั่งสามารถใช้พารามิเตอร์ -f ซึ่งเป็นไปตามman เลือกเฉพาะฟิลด์เหล่านี้ พิมพ์บรรทัดใด ๆ ที่ไม่มีอักขระตัวคั่นยกเว้นระบุ -s ตัวเลือก ในบริบทนี้เขตข้อมูลคืออะไร
16 linux  cut 

4
แปลงทุก pdf ในไดเรกทอรีปัจจุบันเป็น png
ฉันต้องการเขียนbashสคริปต์เพื่อแปลง.pdfไฟล์ทุกไฟล์ในไดเรกทอรีปัจจุบันเป็น.pngไฟล์ ตัวอย่างเช่น: $ls . a.pdf b.pdf $./pdf2png.sh Converting pdfs to pngs a.pdf -> a.png b.pdf -> b.png นี่คือความพยายามที่ดีที่สุดของฉัน: #!/bin/bash convert -verbose -density 500 -resize '800' a.pdf a.png convert -verbose -density 500 -resize '800' b.pdf b.png
16 bash  imagemagick 

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