คำถามติดแท็ก bash

Bash คือ Bourne Again SHell ผู้สืบทอดมาจาก Unix sh (shell) คลาสสิก

3
ฉันสามารถใช้ rsync เพื่อสร้างรายการไฟล์ที่เปลี่ยนแปลงเท่านั้นได้หรือไม่
ฉันกำลังใช้ rsync ในสคริปต์ทุบตีเพื่อให้ไฟล์ซิงค์ระหว่างเซิร์ฟเวอร์สองสามตัวกับ NAS ปัญหาหนึ่งที่ฉันพบคือพยายามสร้างรายการไฟล์ที่มีการเปลี่ยนแปลงจากระหว่าง rsync ความคิดคือว่าเมื่อผมทำงาน rsync ฉันสามารถส่งออกไฟล์ที่มีการเปลี่ยนแปลงลงในแฟ้มข้อความ - มากขึ้นหวังสำหรับอาร์เรย์ในหน่วยความจำ - แล้วก่อนสคริปต์ที่มีอยู่ฉันสามารถเรียกใช้ chown บนเพียงไฟล์เปลี่ยน มีใครพบวิธีที่จะทำงานเช่นนี้หรือไม่? # specify the source directory source_directory=/Users/jason/Desktop/source # specify the destination directory # DO NOT ADD THE SAME DIRECTORY NAME AS RSYNC WILL CREATE IT FOR YOU destination_directory=/Users/jason/Desktop/destination # run the rsync command rsync -avz …
26 bash  scripting  rsync 

8
วิธีรับ pgrep เพื่อแสดงข้อมูลกระบวนการทั้งหมด
มีวิธีใดบ้างที่จะpgrepให้ข้อมูลทั้งหมดเกี่ยวกับแต่ละกระบวนการที่psทำ ฉันรู้ว่าฉันสามารถpsผ่านไปได้grepแต่มันก็มีการพิมพ์จำนวนมากและมันก็ทำให้ฉันมีgrepกระบวนการที่ฉันไม่ต้องการ
26 linux  bash  process  grep 

3
คัดลอกการอนุญาตของเจ้าของไฟล์ไปยังการอนุญาตกลุ่ม
ฉันจะคัดลอกสิทธิ์ผู้ใช้ / เจ้าของไฟล์ไปยังสิทธิ์กลุ่มได้อย่างไร เช่นหากการอนุญาตคือ 755 ฉันต้องการให้เป็น 775 การชี้แจง: 755 -> 775 123 -> 113 abc -> aac โบนัสถ้าฉันสามารถทำสิ่งนี้ซ้ำสำหรับไฟล์ทั้งหมดในไดเรกทอรี (นั่นคือสำหรับทุกไฟล์สิทธิ์ของตัวเองจะถูกคัดลอกไปยังสิทธิ์กลุ่มแต่ละไฟล์อาจมีสิทธิ์ที่แตกต่างกัน)

3
เขียนถึง stdin ของกระบวนการพื้นหลัง
ฉันอยู่ในกล่อง Ubuntu 10.04 และเริ่มเซิร์ฟเวอร์ในพื้นหลัง (myserver &) บน ssh มันทำงานได้ดี แต่ฉันต้องการวิธีที่จะได้รับที่ stdin ของเซิร์ฟเวอร์เป็นวิธีเดียวที่จะควบคุมเซิร์ฟเวอร์คือผ่านวิธีนี้ มีวิธีที่จะได้รับ stdin ของกระบวนการทำงานอยู่แล้วเพื่อให้ฉันสามารถเขียนถึงมัน (และหวังว่าจะอ่าน stdout) เห็นได้ชัดว่าถ้าฉันกำลังจะทำเช่นนี้ตอนนี้ฉันจะเริ่มต้นด้วย FIFO ที่เปลี่ยนเส้นทางไปยัง stdin แต่น่าเสียดายที่ตอนนี้ช้าไปหน่อย ความคิดใด ๆ

6
ตรวจสอบว่าไฟล์อยู่ในกระบวนการของการเขียน?
ฉันต้องการปรับใช้กระบวนการอัตโนมัติ (ผ่านสคริปต์ cron 1 นาที) ที่ค้นหาไฟล์ tar ในไดเรกทอรีที่ระบุ หากพบไฟล์ tar ไฟล์นั้นจะถูก untarred ไปยังตำแหน่งที่เหมาะสมจากนั้นไฟล์ tar จะถูกลบ ไฟล์ tar จะถูกคัดลอกไปยังเซิร์ฟเวอร์นี้โดยอัตโนมัติผ่าน SSH จากเซิร์ฟเวอร์อื่น ในบางกรณีไฟล์ tar มีขนาดใหญ่มากพร้อมไฟล์จำนวนมาก ปัญหาที่ฉันคาดว่าจะพบ: หากใช้เวลา> 1 นาทีเพื่อให้คัดลอกไฟล์ tar ไปยังเซิร์ฟเวอร์และสคริปต์ cron ทำงานทุก ๆ นาทีก็จะเห็นไฟล์. tar.gz และลองทำ untar มันแม้ว่าไฟล์ tar ยังอยู่ในขั้นตอนการเขียน มีวิธีใดบ้าง (ผ่านคำสั่ง bash) เพื่อทดสอบว่าไฟล์นั้นกำลังถูกเขียนไปหรือไม่หรือเป็นเพียงไฟล์บางส่วนเท่านั้น? อีกทางเลือกหนึ่งที่ฉันคิดว่าคือการคัดลอกไฟล์เป็นนามสกุลไฟล์อื่น (เช่น.tar.gz.part) แล้วเปลี่ยนชื่อเป็น.tar.gzหลังจากการถ่ายโอนเสร็จสมบูรณ์ แต่ฉันคิดว่าฉันพยายามที่จะคิดออกว่ามีเพียงวิธีการตรวจสอบว่าไฟล์ทั้งหมดที่บรรทัดคำสั่งแรก ... เบาะแสใด ๆ …
25 linux  bash  tar 

4
ตั้งค่า PATH สำหรับผู้ใช้ทั้งหมดใน Debian อย่างไร
ฉันมีเซิร์ฟเวอร์ Debian Lenny และฉันต้องการให้www-dataผู้ใช้มี/usr/local/zend/binใน PATH ดังนั้นจึงสามารถเรียกใช้สคริปต์ใน cron www-dataได้ ฉันจะเพิ่ม/usr/local/zend/binเส้นทางเพื่อให้www-dataสามารถ execuate ไฟล์ใน/usr/local/zend/bin?
25 linux  debian  bash 

19
คำสั่งเชลล์เพื่อรับที่อยู่ IP หรือไม่
มีคำสั่ง bash เพื่อค้นหาที่อยู่ IP สำหรับกล่อง Ubuntu หรือไม่ ฉันต้องการค้นหาที่อยู่ IP เพื่อที่ฉันจะได้สามารถเข้าสู่เครื่องได้ในภายหลัง

4
วิธีที่จะหลบหนี! ในรหัสผ่าน?
วิธีใดวิธีหนึ่งที่จะหนีจากเครื่องหมายอัศเจรีย์ในรหัสผ่าน: $ mysql -umyuser -pone_@&!two -bash: !two: event not found การลองแบ็กสแลชที่เห็นได้ชัดไม่ได้ช่วยอะไร: $ mysql -umyuser -pone_@&\!two [1] 22242 -bash: !two: command not found name@domain.com [~]# ERROR 1045 (28000): Access denied for user 'myuser'@'localhost' (using password: YES) การค้นหา google ของฉันทั้งหมดแนะนำว่าแบ็กสแลชจะช่วยได้ แต่ก็ไม่ได้ ไม่มีวิธีใช้เครื่องหมายคำพูดตามที่แนะนำในคำถามนี้ สายจะถูกใช้ในนามแฝง. bashrc ไม่ต้องกังวลชื่อผู้ใช้และรหัสผ่านที่แสดงเป็นตัวอย่างเท่านั้นและไม่ได้ใช้ในการผลิต!
24 linux  mysql  bash 


9
ฉันจะอ่านหลายบรรทัดจาก STDIN ลงในตัวแปรได้อย่างไร
ฉันได้คำถามนี้ไปแล้วก็ไม่มีประโยชน์ ฉันกำลังสร้างกระบวนการสร้างที่นี่โดยอัตโนมัติและสิ่งที่ฉันพยายามทำคือรับหมายเลขรุ่นและคำอธิบายเล็ก ๆ ของโครงสร้างซึ่งอาจเป็นหลายบรรทัด ระบบนี้ทำงานบนคือ OSX 10.6.8 ฉันเห็นทุกอย่างตั้งแต่ใช้ CAT ไปจนถึงการประมวลผลแต่ละบรรทัดตามที่จำเป็น ฉันคิดไม่ออกว่าฉันควรใช้อะไรและทำไม ความพยายามในการ read -d '' versionNotes ผลลัพธ์เป็นอินพุตที่อ่านไม่ออกถ้าผู้ใช้ต้องใช้คีย์ backspace นอกจากนี้ยังไม่มีวิธีที่ดีในการยุติอินพุตเนื่องจาก ^ D ไม่ได้ยุติและ ^ C เพิ่งออกจากกระบวนการ read -d 'END' versionNotes ใช้งานได้ ... แต่ยังอ่านไม่ออกถ้าจำเป็นต้องใช้ปุ่ม Backspace while read versionNotes do echo " $versionNotes" >> "source/application.yml" done ไม่สิ้นสุดอินพุตอย่างถูกต้อง (เพราะฉันสายเกินไปที่จะค้นหาการจับคู่กับสตริงว่าง)
24 bash  scripting 

2
Ansible จะป้องกันการเรียกใช้ 'rm -rf /' ในเชลล์สคริปต์หรือไม่
นี่ขึ้นอยู่กับคำถามหลอกลวงนี้ที่นี่ ปัญหาที่อธิบายคือการมีสคริปต์ทุบตีซึ่งมีบางสิ่งที่มีผลต่อ: rm -rf {pattern1}/{pattern2} ... ซึ่งถ้ารูปแบบทั้งสองรวมเป็นหนึ่งหรือเปล่าองค์ประกอบจะขยายไปอย่างน้อยหนึ่งตัวอย่างของrm -rf /สมมติว่าคำสั่งเดิมที่ถูกถ่ายทอดอย่างถูกต้องและ OP ได้ทำการขยายตัวรั้งมากกว่าการขยายตัวพารามิเตอร์ ในคำอธิบายของ OP เรื่องหลอกลวงเขากล่าวว่า: คำสั่ง [... ] นั้นไม่เป็นอันตราย แต่ดูเหมือนว่าแทบจะไม่มีใครสังเกตเห็น เครื่องมือ Ansible ป้องกันข้อผิดพลาดเหล่านี้ [... ] แต่ [... ] ดูเหมือนไม่มีใครรู้ว่าไม่เช่นนั้นพวกเขาจะรู้ว่าสิ่งที่ฉันอธิบายไม่สามารถเกิดขึ้นได้ ดังนั้นสมมติว่าคุณมีเชลล์สคริปต์ที่ส่งrm -rf /คำสั่งผ่านการขยายวงเล็บปีกกาหรือการขยายพารามิเตอร์มันเป็นความจริงหรือไม่ที่การใช้Ansibleจะป้องกันไม่ให้คำสั่งนั้นถูกเรียกใช้และถ้าเป็นเช่นนั้นจะทำเช่นนี้ได้อย่างไร? การดำเนินการrm -rf /ด้วยสิทธิ์พิเศษรูท "ไม่เป็นอันตราย" ตราบใดที่คุณใช้ Ansible ทำหรือไม่
23 linux  bash  ansible  rm 

2
สคริปต์ทุบตีนับถอยหลังแสดง 5 นาทีในบรรทัดเดียว [ปิด]
ปิด คำถามนี้ต้องการรายละเอียดหรือความคมชัด ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ เพิ่มรายละเอียดและชี้แจงปัญหาโดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา ฉันต้องการนับถอยหลัง 5 นาทีอัปเดตทุกวินาทีและแสดงผลลัพธ์ในบรรทัดเดียวกัน เป็นไปได้ด้วยการใช้สคริปต์ Bash หรือไม่
23 bash 

3
sed แทนที่แท็บและช่องว่างทั้งหมดด้วยช่องว่างเดียว
ฉันได้รับสตริงเหมือนดังต่อไปนี้: test.de. 1547 IN SOA ns1.test.de. dnsmaster.test.de. 2012090701 900 1000 6000 600 ตอนนี้ฉันต้องการแทนที่แท็บ / ช่องว่างทั้งหมดในระหว่างระเบียนด้วยช่องว่างเดียวเพื่อให้ฉันสามารถใช้กับ cut -d " " ฉันพยายามต่อไปนี้: sed "s/[\t[:space:]]+/[:space:]/g" และความหลากหลายต่าง ๆ แต่ไม่สามารถทำงานได้ ความคิดใด ๆ

4
bash script: คำสั่ง repeat ถ้ามันส่งกลับข้อผิดพลาด
ฉันต้องการสร้างการวนซ้ำที่ทำซ้ำการถ่ายโอน ncftp หากส่งคืนข้อผิดพลาด ฉันไม่แน่ใจเล็กน้อยว่าจะสามารถใช้ตัวแปรรหัสทางออกในการวนซ้ำได้อย่างไร อยากได้สิ่งนี้ไหม until [$? == 0]; do ncftpput -DD -z -u user -p password remoteserver /remote/dir /local/file done
23 bash 

2
คุณจะหนีจากตัวละครใน heredoc ได้อย่างไร?
ฉันทำงานกับสคริปต์ทุบตีที่พยายามหยุดไม่ให้พยายามแทนที่ตัวแปรภายใน heredoc ของฉัน จะตั้งค่า heredoc ให้เป็น A) ยกเว้นชื่อตัวแปรแทนที่จะทำการแยกวิเคราะห์หรือ B) คืนค่าสตริงทั้งหมดที่ไม่ถูกแตะต้อง? cat > /etc/nginx/sites-available/default_php <<END server { listen 80 default; server_name _; root /var/www/$host; <--- $host is a problem child } END ตามที่เป็นเมื่อฉันเสร็จสิ้นการฉีดมันลงในไฟล์ฉันเหลือกับนี้ server { listen 80 default; server_name _; root /var/www/; }
22 linux  bash  heredoc 

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