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

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

3
ฉันจะตั้งรหัสผ่านรูทในคอนเทนเนอร์นักเทียบท่าจากสคริปต์ได้อย่างไร
ฉันมีสคริปต์ที่ทำงานบนโฮสต์และสร้าง / start / stop container docker ฉันต้องการให้สคริปต์เปลี่ยนรหัสผ่านของผู้ใช้รูทภายในคอนเทนเนอร์ เนื่องจาก container เป็นเซิร์ฟเวอร์ ssh ฉันจึงลอง: sshpass -p 'OLDPASS' ssh root@<container-IP> 'echo -e "NEWPASS\nNEWPASS" | passwd root' แต่มันไม่ทำงาน ก่อนดำเนินการต่อและใช้เวลาในการดีบั๊กฉันต้องการทราบว่ามีวิธีที่ชาญฉลาดกว่านี้หรือไม่ ฉันเข้าใจว่า "นักเทียบท่า" ที่เหมาะสมคือการสร้างสคริปต์ที่เรียกใช้โดย Dockerfile ซึ่งดึงรหัสผ่านจากโวลุ่มที่แชร์และตั้งค่าเป็นรหัสผ่านรูท นี่ฟังดูซับซ้อน แต่ฉันรู้วิธีการใช้งานและทำงานได้ดีสำหรับรูปภาพตัวเทียบท่าอื่นที่ฉันใช้ แต่ฉันไม่ต้องการทำเพื่อสิ่งนี้ ฉันแค่ต้องการคำสั่งที่ใช้ Docker หรือ ssh เพื่อเปลี่ยนรหัสผ่านของผู้ใช้แบบไม่โต้ตอบ
11 ssh  bash  docker  passwd 

2
เหตุใดจึงใช้ `bash -c` ในหัวหน้างานแทนที่จะเรียกใช้สคริปต์โดยตรง
ฉันเริ่มใช้supervisordเพื่อควบคุมบริการต่างๆในเซิร์ฟเวอร์ของฉัน ฉันไม่ใช่ผู้ใช้ระดับมืออาชีพของ linux แต่สามารถใช้งานได้ดีและใช้งานได้ เพิ่งจากความอยากรู้ฉันพบว่าคำสั่งใน supervisord ส่วนใหญ่ดูเหมือนจะเรียกว่า: [program:install] command=bash -c "/src/etc/install.sh" ฉันอ่านคนทุบตีและรู้ว่า-cควรใช้เพื่อแทรกตัวแปรที่ส่งผ่านหลังจากสตริง ดังนั้นอะไรคือจุดที่ใช้bash -cในหัวหน้างาน (หรือที่อื่น ๆ ) แทนที่จะเรียกสคริปต์โดยตรง (เช่นตัวอย่างด้านล่าง) โดยพิจารณาว่าไม่มีตัวแปรที่ผ่าน / ใช้งานหรือไม่ [program:install] command=/src/etc/install.sh ขอบคุณ!

3
ไปป์ stderr และ stdout ไปยังคำสั่งต่าง ๆ (ไม่ใช่เฉพาะกับไฟล์)
ฉันกำลังสร้างสคริปต์สำรองสำหรับ ldap ฉันต้องการข้อผิดพลาดในการไปยังไฟล์ใน / var / log และเอาต์พุตเพื่อไปยังไฟล์อื่นในโฟลเดอร์สำรอง ขณะนี้ฉันกำลังเปลี่ยนเส้นทางไปยังไฟล์ชั่วคราวแล้วส่งไฟล์ชั่วคราวไปที่บันทึก ฉันอยากทำสิ่งนี้เป็น 1 ซับแม้ว่า ... /usr/bin/ldapsearch -x -LLL -b "dc=contoso,dc=com" "(objectclass=*)" -h ldap.server -v 2>>/tmp/ldaptmp.err | gzip -c > /mnt/backups/ldap/`date +\%Y\%m\%d`.ldif.gz || logger -t ldapbackup -p local6.err error exit $? cat /tmp/ldaptmp.err | grep -v "ldap_initialize( ldap://ldap.server )" | grep -v "filter: …
11 linux  bash 

1
วิธีฆ่ากระบวนการไพ ธ อนทั้งหมดยกเว้นกระบวนการหนึ่งจากการทุบตี
ฉันจะฆ่าจากการทุบตีกระบวนการหลามทั้งหมดโดยไม่รวมสคริปต์หลามได้อย่างไร (ฉันรู้ชื่อของมัน แต่บางครั้ง pid สามารถเปลี่ยนได้) ฉันต้องการชนิดpkill -f "python"แต่ไม่รวมสคริปต์เฉพาะของไพ ธ อน กรุณาแนะนำ
11 bash 

7
ค้นหาไดเรกทอรีที่ไฟล์ที่มีจุดสิ้นสุดเฉพาะหายไป
ฉันต้องการที่จะแสดงไดเรกทอรีทั้งหมดที่ไม่ได้มีไฟล์ที่มีไฟล์เฉพาะที่สิ้นสุด ดังนั้นฉันพยายามใช้รหัสต่อไปนี้: find . -type d \! -exec test -e '{}/*.ENDING' \; -print ในตัวอย่างนี้ฉันต้องการที่จะแสดงไดเรกทอรีทั้งหมดที่ไม่ได้มีไฟล์ที่มีตอนจบ.ENDINGแต่มันไม่ทำงาน ความผิดพลาดของฉันอยู่ที่ไหน
10 linux  bash  shell 

2
ลิงก์สัญลักษณ์และ sudo
ฉันสร้างลิงค์สัญลักษณ์: ln -s /tmp/folder1 /tmp/folder2 จากนั้นฉันไปที่ / tmp / folder2 และเรียกใช้pwd: $ cd /tmp/folder2/ $ pwd /tmp/folder2 $ sudo pwd /tmp/folder1 # <-- This is the odd part ทำไมpwdมีsudoให้ไดเรกทอรีเดิม? ฉันกำลังเขียนสคริปต์ทุบตีและต้องการเส้นทางที่แน่นอนของไดเรกทอรีปัจจุบัน ด้วย sudo ฉันไม่สามารถรับไดเรกทอรีดั้งเดิมได้

4
คุณจะทำให้คำสั่งนี้ง่ายขึ้นได้อย่างไร?
ฉันค่อนข้างใหม่กับ strace / netstat / ฯลฯ ฉันใช้คำสั่งนี้เพื่อติดตามกระบวนการ apache ที่จัดการคำขอของฉัน (telnet) มีวิธีทำให้มันง่ายขึ้นเล็กน้อยหรือไม่? sudo strace -o /tmp/strace -f -s4096 -r -p $(netstat -antlp | \ grep $(lsof -p `pidof telnet` | grep TCP | \ perl -n -e'/localhost:(\d+)/ && print $1') | grep apache2 | \ perl -n -e'/ESTABLISHED (\d+)/ && print …

5
ฉันจะเปลี่ยนชื่อไฟล์หลายไฟล์โดยการลบอักขระใน bash ได้อย่างไร
ฉันต้องเปลี่ยนชื่อหลายไฟล์ในไดเรกทอรีโดยลบ 5 ตัวอักษรแรกสำหรับแต่ละชื่อไฟล์ ฉันจะทำสิ่งนี้ฉันทุบตี / เปลือก? ฉันใช้ Ubuntu 11.10 ขอบคุณ
10 bash  rename 

1
ตรวจสอบคำสั่งปฏิเสธ
ฉันออก^z; bg; disownลำดับเพื่ออนุญาตให้ฉันปิดเซสชัน ssh ซึ่งฉันกำลังใช้กระบวนการที่มีความสำคัญยาวนานมาก กระบวนการนี้เขียนเอาต์พุตสถานะไปยัง stderr และยังคงทำเช่นนั้นแม้ว่าจะถูกถอดออก (ตรวจสอบด้วย lsof แล้ว stderr fd จะเปิดขึ้นสำหรับ r / w) มีวิธีการตรวจสอบว่ากระบวนการนั้นถูกปฏิเสธจริง ๆ หรือไม่ (จะไม่ recv SIGHUP หากเชลล์รับหนึ่ง)
10 bash  process 

3
จะบันทึก + ปิดไฟล์เมื่อแก้ไขใน bash ได้อย่างไร
ตกลง - ฉันเป็นลินุกซ์มือใหม่ - ฉันพยายามแก้ไขไฟล์จาก bash ผ่านedit <filename>คำสั่งไม่ว่าโหมดเริ่มต้นคืออะไร (ฉันกำลังสมมติว่า 'vi'?) ปัญหาสำหรับนรกของฉันฉันไม่สามารถบันทึกและออกจากโหมดแก้ไขได้ - สูตรนี้ดูเหมือนว่าจะแนะนำ ESC ควรทำตามขั้นตอน แต่ดูเหมือนจะไม่ทำงาน ฉันกำลังเชื่อมต่อผ่าน ssh จาก mac ไปยังกล่อง linux suse enterprise 11 ความช่วยเหลือใด ๆ ชื่นชม!
10 linux  bash  vi 

4
เรียกใช้งานโปรแกรมทุกครั้งที่มีคนล็อกอินด้วย SSH ลงในกล่อง Linux
ฉันมีเซิร์ฟเวอร์ SSH ขนาดเล็กและฉันต้องการเขียนสคริปต์เพื่อให้ทำงานทุกครั้งที่มีคนลงชื่อเข้าใช้ผ่าน SSH ตอนนี้ฉันจะไปเกี่ยวกับที่ได้อย่างไร ฉันต้องการให้สคริปต์ทำงานทุกครั้งที่มีใครลงชื่อเข้าใช้และฉันต้องเข้าถึงชื่อผู้ใช้อย่างน้อยของผู้ที่เข้าสู่ระบบและที่อยู่ IP ที่บุคคลนั้นลงชื่อเข้าใช้ ฉันคิดเกี่ยวกับการใช้/etc/bash.bashrcแต่นั่นเป็นทางออกที่ดีใช่ไหม ตัวอย่างเช่นมีวิธีที่ผู้ใช้สามารถปิดการใช้งานและปิดการใช้งานสคริปต์ของฉันหรือไม่ ถ้าใช่ตัวเลือกอื่นของฉันคืออะไร ขอบคุณ
10 linux  bash  ssh 

4
การหลีกเลี่ยงช่องว่างในเส้นทางระยะไกลเมื่อใช้ rsync ผ่านการเชื่อมต่อ SSH ระยะไกล
เมื่อใช้ SSH เพื่อเชื่อมต่อ rsync กับเซิร์ฟเวอร์ระยะไกลคุณจะหลีกเลี่ยงช่องว่างและเช่นนั้นในเส้นทางระยะไกลได้อย่างไร แบ็กสแลชแบบง่ายจะหนีพื้นที่สำหรับพรอมต์การทุบตีท้องถิ่น แต่บนเครื่องระยะไกลพื้นที่จะถูกอ่านเป็นตัวแบ่งในเส้นทางดังนั้นการทำเครื่องหมายจุดสิ้นสุดของเส้นทางนั้น ดังนั้นเมื่อฉันทำrsync -avz /path/to/source/some\ dir/ user@host.tld:/path/to/dest/some\ dir/สิ่งที่เกิดขึ้นก็คือรีโมตเซิร์ฟเวอร์อ่านอย่างนั้น/path/to/dest/some/และเนื่องจากไม่พบปลายทางนั้นจากระยะไกลเพราะปลายทางที่แท้จริงคือ "บางคน" แทนที่จะเป็น "บางคน" ถ้าฉันลองใช้คำสั่งเดียวกันและยกเว้นเครื่องหมายแบ็กสแลชและช่องว่างเพื่อให้ได้รับพรอมต์แบ็คโลคอลและรักษาแบ็กสแลชสำหรับ/path/to/dest/some\\\ dir/เซิร์ฟเวอร์ระยะไกล จากนั้นตีความเส้นทางเป็น/path/to/dest/some\/มากกว่าที่จะ/path/to/dest/some\ dir/ยังคงทำลายพื้นที่และตัวละครหลังจากนั้น หากฉันพยายามที่จะปิดเส้นทางด้วยเครื่องหมายคำพูดมันจะทำงานในลักษณะเดียวกันโดยตัดเส้นทางออกจากพื้นที่อย่างมีประสิทธิภาพ ดังนั้นจึงเป็นการง่ายกว่าที่จะผ่าน bash prompt ในพื้นที่ เริ่มแรกฉันใช้พา ธ ที่มีเซ็กเมนต์ "-" (space-hyphen-space) อยู่ในนั้นและรีโมตเซิร์ฟเวอร์ส่งคืนข้อผิดพลาดrsync: on remote machine: -: unknown optionซึ่งเป็นสิ่งที่เริ่มต้นความพยายามในการหลีกเลี่ยงพื้นที่ทั้งหมดในตอนแรก ดังนั้นฉันต้องทำอย่างไรเพื่อให้การทำงานนี้ถูกต้องกับรีโมตเซิร์ฟเวอร์โดยไม่ต้องลบช่องว่างหรืออักขระผิดพลาดอื่น ๆ เช่นยัติภังค์จากเส้นทางระยะไกล
10 ssh  bash  rsync  remote  path 

3
ทำไม CTRL-r ทำหน้าที่อย่างประหลาด (แสดงเพียงส่วนหนึ่งของคำสั่ง) บน OS X
Ctrl+ rเป็นเครื่องมือเล็ก ๆ ที่ยอดเยี่ยมสำหรับการค้นหา.bash_historyคำสั่งที่รันก่อนหน้านี้ อย่างไรก็ตามเมื่อฉันใช้มันใน OS X Terminal.app ฉันเห็นพฤติกรรมแปลก ๆ และฉันก็สงสัยว่าถ้ามีคนอื่นเห็นสิ่งเดียวกันหรือรู้วิธีการแก้ไข Ctrl+r พิมพ์สิ่งที่ชอบ find โอ้เยี่ยมมากดูสิ ... มันเป็นคำสั่งที่ฉันต้องการ find . -exec grep -q "hello world" '{}' \; -print ฉันต้องการเรียกใช้คำสั่งนั้น แต่เปลี่ยน Hello world เป็นอย่างอื่น ดังนั้นฉันจึงตี←หรือ→ ตอนนี้คำสั่งคือ SORTA บนบรรทัดคำสั่ง แต่ดูเหมือนว่าจะมีคำสั่งเวอร์ชัน trunctated เสมอเช่นนี้: -q "blog_posts_by" '{}' \; -printที่ซึ่งคำสั่งทั้งหมดอยู่ที่นั่นและฉันสามารถใช้เคอร์เซอร์เพื่อเลื่อนไปรอบ ๆ บรรทัด แต่ไม่ใช่ทั้งหมด มันถูกพิมพ์ มีการตัดการเชื่อมต่อระหว่างสิ่งที่แสดงบนบรรทัดและสิ่งที่เครื่องคิดว่าฉันกำลังแก้ไขอยู่ ไม่มีใครมีเบาะแสว่าทำไมสิ่งนี้อาจเกิดขึ้น? …
10 bash  mac-osx  terminal 

4
คำนวณจำนวนวันตั้งแต่ 1/1/1970
คุณสามารถคำนวณจำนวนวันตั้งแต่ 1/1/1970 ได้อย่างไร นี่สำหรับการอัพเดตแอ็ตทริบิวต์shadowLastChangeบน OpenLDAP มีวิธีทำเช่นนี้โดยใช้คำสั่งlinux dateหรือไม่?
10 linux  bash  openldap  date 

1
การใช้เชลล์สคริปต์เพื่อตรวจสอบว่า rsync ทำการเปลี่ยนแปลงหรือไม่
ฉันมีสคริปต์ทุบตีที่ rsync สองไดเรกทอรี บางครั้งมีการเปลี่ยนแปลงโอกาสก็ไม่มีอะไร ฉันต้องการรันคำสั่งเฉพาะในกรณีที่ rsync ทำการเปลี่ยนแปลงจริง (เพิ่ม / อัปเดตไฟล์) มิฉะนั้นฉันต้องการข้าม มีการตอบกลับที่ฉันควรจะดูหรือไม่?
10 unix  bash  rsync  unix-shell 

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