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

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

4
จะแบ่งไฟล์และบีบอัดโดยตรงได้อย่างไร?
ฉันมีไฟล์ 100GB และฉันต้องการแยกไฟล์เป็น 100 จาก 1GB แต่ละไฟล์ (แยกตามบรรทัด) เช่น split --bytes=1024M /path/to/input /path/to/output สำหรับ 100 ไฟล์ที่สร้างขึ้นฉันต้องการใช้ gzip / zip กับไฟล์เหล่านี้แต่ละไฟล์ เป็นไปได้ไหมที่จะใช้คำสั่งเดียว?

5
ulimit -n ไม่เปลี่ยนแปลง - values ​​limits.conf ไม่มีผลกระทบ
ฉันพยายามยกระดับตัวอธิบายไฟล์ที่เปิดสูงสุดสำหรับผู้ใช้ทั้งหมดบนเครื่องอูบุนตู คำถามนี้ค่อนข้างติดตามคำถามนี้ open file descriptor limit.conf การตั้งค่าไม่ได้อ่านโดย ulimit แม้ว่าจะต้องมี pam_limits.so ยกเว้นว่าฉันได้เพิ่มรายการ "root" ที่จำเป็นใน limit.conf นี่คือรายการ * soft nofile 100000 * hard nofile 100000 root soft nofile 100000 root hard nofile 100000 บรรทัดที่เกี่ยวข้องที่pam_limits.soไม่ได้แสดงความคิดเห็นในไฟล์ที่เกี่ยวข้องทั้งหมดใน /etc/pam.d/ และfs.file-maxได้รับการตั้งค่าอย่างถูกต้องใน /etc/sysctl.conf อย่างไรก็ตามฉันยังเห็น abc@machine-2:/etc/pam.d$ ulimit -n 1024 หลังจากรีบูตเครื่อง มีปัญหาอะไร เชลล์เริ่มต้นของฉันคือ / bin / sh และฉันไม่สามารถใช้ chsh เพื่อเปลี่ยนเชลล์เริ่มต้นเนื่องจากผู้ใช้ของฉันบนเครื่องได้รับการรับรองความถูกต้องผ่านรูปแบบการตรวจสอบสิทธิ์แบบกระจายบางส่วน
13 linux  ubuntu  bash  pam  ulimit 

2
มี. bash_profile ทั่วโลกสำหรับผู้ใช้ทั้งหมดในระบบหรือไม่?
ดังนั้นฉันจึงสะดุดสี svnและคิดว่ามันเป็นสิ่งที่มีประโยชน์ทุก devs ของเราจะขอบคุณ การอ่านเพื่อสิ่งนี้บอกให้ใส่รหัสในของคุณ~/.bash_profileแต่ฉันสงสัยว่าฉันจะรวมรหัสนี้ไว้ในเซิร์ฟเวอร์ได้อย่างไรจึงเป็นค่าเริ่มต้นสำหรับทุกคน มีบางส่วนของโลกที่.bash_profileฉันสามารถเพิ่มสิ่งนี้ได้หรือไม่ อาจจะเป็นอีกวิธีหนึ่ง?
13 bash  svn 

6
จะแยกวิเคราะห์และแปลงไฟล์ ini เป็นตัวแปรอาเรย์ bash ได้อย่างไร?
ฉันพยายามแปลงไฟล์ ini เป็นตัวแปรอาเรย์ของ bash ตัวอย่าง ini ดังต่อไปนี้: [foobar] session=foo path=/some/path [barfoo] session=bar path=/some/path ดังนั้นสิ่งเหล่านี้จึงกลายเป็น: session[foobar]=foo path[foobar]=/some/path session[barfoo]=bar และอื่น ๆ ตอนนี้ฉันสามารถขึ้นมาด้วยคำสั่งนี้เท่านั้น awk -F'=' '{ if ($1 ~ /^\[/) section=$1; else if ($1 !~ /^$/) print $1 section "=" $2 }' นอกจากนี้ยังมีปัญหาอื่นคือมันไม่ได้ใช้พื้นที่ใกล้=เข้าสู่การพิจารณา ฉันคิดว่าsedน่าจะเหมาะกว่าสำหรับงานนี้ แต่ฉันไม่รู้ว่าจะเก็บและเก็บตัวแปรชั่วคราวสำหรับชื่อส่วนsedได้อย่างไร ดังนั้นความคิดวิธีการทำเช่นนี้?

2
การใช้ rsync เพื่อลบไฟล์ที่ไม่เกี่ยวข้อง
อะไรคือวิธีที่ดีที่สุดในการเปรียบเทียบโครงสร้างไดเรกทอรีทั้งสองและการลบไฟล์และไดเรกทอรีที่ไม่เกี่ยวข้องในตำแหน่งเป้าหมาย ฉันมีแอพแกลเลอรี่ภาพบนเว็บขนาดเล็กที่ฉันกำลังพัฒนา ผู้ใช้เพิ่มและลบภาพโดยใช้ FTP ซอฟต์แวร์แกลเลอรีเว็บที่ฉันเขียนสร้างภาพขนาดย่อใหม่ได้ทันที แต่ไม่ได้จัดการกับการลบ สิ่งที่ฉันต้องการจะทำคือกำหนดคำสั่ง / สคริปต์ทุบตีเพื่อดูแลสิ่งนี้ตามช่วงเวลาที่กำหนดไว้ล่วงหน้า ภาพต้นฉบับจะถูกจัดเก็บไว้ใน/home/gallery/images/และจัดระเบียบในอัลบั้มโดยใช้ไดเรกทอรีย่อย ภาพขนาดเล็กถูกแคชไว้/home/gallery/thumbs/โดยใช้โครงสร้างไดเรกทอรีและชื่อไฟล์เดียวกันกับไดเรกทอรีรูปภาพ ฉันได้ลองใช้สิ่งต่อไปนี้เพื่อบรรลุเป้าหมาย: rsync -r --delete --ignore-existing /home/gallery/images /home/gallery/thumbs ซึ่งจะทำงานได้ดีหากภาพขนาดย่อทั้งหมดถูกแคชไว้แล้ว แต่ไม่รับประกันว่าจะเป็นเช่นนี้เมื่อเกิดกรณีนี้ขึ้นไดเรกทอรีภาพขนาดย่อมีภาพขนาดเต็มต้นฉบับที่คัดลอกมา ฉันจะทำสิ่งที่ฉันพยายามทำให้ดีที่สุดได้อย่างไร
13 linux  bash  rsync 

2
linux: ฆ่ากระบวนการทั้งหมดของฉัน แต่ไม่ใช่เทอร์มินัลนี้
ฉันต้องการวิธีง่าย ๆ ใน linux เพื่อฆ่ากระบวนการปัจจุบันทั้งหมดของฉัน ปัญหาkill -9 -1คือมันยังฆ่า terminal ปัจจุบัน มีวิธีง่ายๆในการฆ่าทุกอย่างยกเว้นเทอร์มินัลปัจจุบันหรือไม่?
13 linux  bash  kill 

4
คัดลอกช่วงของไฟล์ในบรรทัดคำสั่ง (ZSH / BASH)
ฉันมีรายการไฟล์ที่มีตัวเลขเรียงติดกันเป็นคำต่อท้าย ฉันต้องการคัดลอกเฉพาะไฟล์เหล่านี้เท่านั้น ฉันจะระบุช่วงเป็นส่วนหนึ่งของคำสั่ง cp ได้อย่างไร $ls P1080272.JPG* P1080273.JPG* P1080274.JPG* P1080275.JPG* P1080276.JPG* P1080277.JPG* P1080278.JPG* P1080279.JPG* P1080280.JPG* P1080281.JPG* P1080282.JPG* P1080283.JPG* ฉันต้องการคัดลอกไฟล์จาก P1080275.JPG ไปยัง P1080283.JPG ด้วยสิ่งที่คล้ายกับ: $cp P10802[75-83].JPG ~/Images/. มีวิธีทำเช่นนี้หรือไม่?
13 linux  bash  copy  zsh 

5
ซ่อนเอาต์พุตของคำสั่งเชลล์เฉพาะเมื่อสำเร็จหรือไม่
การซ่อนเอาต์พุตของคำสั่งเชลล์มักเกี่ยวข้องกับการเปลี่ยนเส้นทาง stderr และ stdout มีสิ่งอำนวยความสะดวก builtin หรือคำสั่งซึ่งโดยปกติแล้วซ่อนเอาท์พุท แต่เมื่อเกิดข้อผิดพลาดจะทิ้งเอาท์พุทสะสมทั้งหมดหรือไม่ ฉันต้องการเรียกใช้สิ่งนี้เป็น wrapper สำหรับsshคำสั่งระยะไกล ตอนนี้ฉันมีพวกเขาใช้การเปลี่ยนเส้นทาง แต่ฉันไม่เข้าใจว่าอะไรทำให้พวกเขาล้มเหลวและพวกเขาก็ verbose เกินไป แก้ไข:ในที่สุดฉันสร้างแม่แบบต่อไปนี้ตามคำตอบโดย @Belmin ซึ่งฉัน tweaked เล็กน้อยเพื่อสะสมคำสั่งก่อนหน้าทั้งหมดจากสคริปต์ใช้ตัวระบุกระบวนการปัจจุบันลบบันทึกโดยอัตโนมัติและเพิ่มข้อผิดพลาดสีแดงล้มเหลว ข้อความเมื่อมีข้อผิดพลาดเกิดขึ้น ในเทมเพลตนี้silentwrapper เริ่มต้นจะสำเร็จจากนั้นให้คำสั่งที่สามล้มเหลวเนื่องจากมีไดเรกทอรีอยู่แล้ว: #!/bin/sh set -e SILENT_LOG=/tmp/silent_log_$$.txt trap "/bin/rm -f $SILENT_LOG" EXIT function report_and_exit { cat "${SILENT_LOG}"; echo "\033[91mError running command.\033[39m" exit 1; } function silent { $* 2>>"${SILENT_LOG}" >> …
12 linux  bash  shell 

4
การเริ่มต้นสคริปต์เป็นผู้ใช้อื่น
ฉันได้สร้างสคริปต์ใน /etc/init.d/ ซึ่งจะต้องเรียกใช้สคริปต์อื่น ๆ จากผู้ใช้ (ไม่ใช่ผู้ใช้ที่มีสิทธิ์รูท) จากโฮมไดเรกทอรีของพวกเขาราวกับว่าพวกเขาเริ่มต้นมัน ฉันเปิดใช้งานสคริปต์เหล่านี้ด้วย: sudo -b -u <username> <script_of_a_particular_user> และมันใช้งานได้ แต่สำหรับสคริปต์ของผู้ใช้ทุกคนที่ยังคงทำงานอยู่ (ตัวอย่างเช่นสุนัขเฝ้าบ้านบางคน) ฉันเห็นกระบวนการ sudo หลักที่เกี่ยวข้องยังมีชีวิตอยู่และทำงานเป็นรูท สิ่งนี้สร้างความยุ่งเหยิงในรายการกระบวนการที่ใช้งานอยู่ ดังนั้นคำถามของฉันคือ: ฉันจะเปิดตัว (แยก) สคริปต์อื่นจากสคริปต์ทุบตีที่มีอยู่ในฐานะผู้ใช้รายอื่นและปล่อยให้เป็นกระบวนการกำพร้า (ยืนอยู่คนเดียว) ได้อย่างไร คำอธิบายโดยละเอียดเพิ่มเติม: โดยทั่วไปฉันพยายามให้ผู้ใช้รายอื่นบนเครื่องมีวิธีการรันสิ่งต่าง ๆ เมื่อระบบเริ่มต้นหรือปิดระบบโดยการเรียกใช้ไฟล์ปฏิบัติการที่พบในไดเรกทอรีย่อยตามลำดับที่พบในไดเรกทอรีบ้านของพวกเขา เนื่องจากฉันไม่พบวิธีอื่นใดที่ฉันเขียนสคริปต์ทุบตีของฉันที่ทำอย่างนั้นและฉันได้กำหนดค่าเป็นสคริปต์บริการ (โดยทำตามตัวอย่างโครงกระดูก) ใน /etc/init.d/ ดังนั้นเมื่อมันทำงาน ด้วยอาร์กิวเมนต์เริ่มต้นมันจะเปิดตัวทุกอย่างจากไดเรกทอรีเริ่มต้นขึ้นและเมื่อมันถูกเรียกใช้ด้วยอาร์กิวเมนต์หยุดมันจะเปิดตัวทุกอย่างจากไดเรกทอรี. shutDown ของผู้ใช้ทั้งหมดเช่นเดียวกับพวกเขา หรือฉันก็สนใจถ้าฉันสามารถใช้วิธีแก้ปัญหาที่มีอยู่เพื่อแก้ปัญหานี้ได้ อัปเดต ฉันดูรอบ ๆ แล้วฉันพบคำถามนี้: /unix/22478/detach-a-daemon-using-sudo คำตอบที่ยอมรับได้มีการใช้: ใช้sudo -u user sh -c …
12 linux  debian  bash  sudo  init.d 

2
เปลี่ยนเส้นทางไปยัง stdin แทนการโต้แย้งเมื่อใช้ xargs [ปิด]
ปิด คำถามนี้ต้องการรายละเอียดหรือความคมชัด ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ เพิ่มรายละเอียดและชี้แจงปัญหาโดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา สำหรับ exmaple ใช้คำสั่ง cat foo.txt | xargs -I{} -n 1 -P 1 sh -c "echo {} | echo" foo.txtมีสองบรรทัด foo bar คำสั่งข้างต้นพิมพ์อะไร

3
เป็นไปได้หรือไม่ที่จะเปลี่ยนการตั้งค่า BIOS จาก Linux?
ฉันพยายามเขียนสคริปต์เพื่อเปิดใช้งาน IPMI บนเครื่องจำนวนหนึ่งโดยไม่ต้องเชื่อมต่อ KVM กับพวกเขาทีละคน เป็นไปได้หรือไม่ที่จะเปลี่ยนการตั้งค่า BIOS จาก Linux? ระบบปฏิบัติการคือ SL6 ฉันเข้าใจว่าแต่ละเครื่องจะต้องมีการหมุนเวียนพลังงาน แต่ฉันสามารถทำสิ่งนี้ได้โดยทางโปรแกรม
12 linux  bash  scripting  bios 

3
แก้ไขไฟล์ผ่านสคริปต์ทุบตี
ฉันเป็นผู้เริ่มต้นในสคริปต์ทุบตีฉันต้องการสร้างสคริปต์ทุบตีเพื่อติดตั้งและกำหนดค่าเนื้อหาในกล่อง Linux ของฉันในวิธีอัตโนมัติ สมมติว่าฉันต้องการแก้ไข /etc/yum.repos.d/epel.repo โดยสคริปต์ทุบตี สิ่งที่ฉันอยากทำมีดังนี้ เปิดไฟล์ /etc/yum.repos.d/epel.repo ค้นหาส่วน [epel] เพิ่มลำดับความสำคัญของบรรทัด = 10 หลังจากเปิดใช้งานบรรทัด = 1 ในส่วน epel สำหรับส่วนแรกฉันเพิ่ม yum install nano nano /etc/yum.repos.d/epel.repo คำถามของฉันคือวิธีการทำส่วนที่ 2 และ 3 ด้วยสคริปต์ทุบตีโดยใช้นาโน (ถ้าเป็นไปได้ในกรณีที่เป็นไปไม่ได้จากนั้นแสดงด้วย sed) นอกจากนี้ในบางจุดฉันจะต้องแก้ไขตัวแปรในไฟล์เช่น เปิดใช้งาน = 0 เพื่อเปิดใช้งาน = 1 การทดสอบ = "1" ถึงการทดสอบ = "0" เพิ่มข้อความในบรรทัด ฟังก์ชั่น = เพื่อฟังก์ชั่น = …
12 linux  centos  bash 

5
วิธีตรวจสอบที่เหมาะสมว่า PID กำลังทำงานอย่างไร
ฉันมี.pidไฟล์และฉันต้องตรวจสอบว่ากระบวนการทำงานอยู่หรือไม่ จนถึงตอนนี้ฉันพบสองตัวเลือก kill -0 `cat something.pid` ซึ่งพิมพ์ข้อผิดพลาดหาก pid ไม่ทำงาน ฉันรู้ว่านี่สามารถเปลี่ยนเส้นทางไปยัง/dev/nullแต่มันทำให้ฉันคิดว่านี่ไม่ใช่ทางออกที่ดีที่สุด ทางออกที่สองคือการใช้psซึ่งยังพิมพ์บน STDOUT ps -ef `cat something.pid` เป็นเรื่องปกติหรือไม่ที่จะเปลี่ยนเส้นทางเอาต์พุตไป/dev/nullและใช้รหัสสถานะที่ส่งคืนหรือเป็นสัญญาณว่าฉันกำลังทำอะไรผิดพลาดและฉันต้องการคำสั่งอื่นหรือไม่
12 linux  unix  bash  process  pid 

3
การส่งเมลจากบรรทัดรับคำสั่งหากร่างกายไม่ว่างเปล่า
ฉันต้องการเขียนสคริปต์ง่ายๆที่เตือนฉันหากมีการเปลี่ยนแปลงบันทึก สำหรับตอนนี้ฉันกำลังใช้ grep เพื่อค้นหาบรรทัดที่ฉันสนใจตอนนี้มันใช้งานได้: grep line /var/log/file | mail -s Log email@domain.tld ปัญหาคือสิ่งนี้จะส่งจดหมายแม้ว่าจะไม่พบบรรทัดที่ตรงกัน ดูเหมือนว่ายูทิลิตี้เมลจาก mailutils นั้นไม่มีสวิตช์บอกให้ปล่อยเมลที่ไม่มีเนื้อหา มีวิธีที่ง่ายและรวดเร็วในการทำเช่นนั้น?

1
วิธีใช้ heredoc ภายในฟังก์ชั่นทุบตี?
มันเป็นไปได้ที่จะแทรกheredocในฟังก์ชั่นทุบตี? ตัวอย่างเล็ก ๆ น้อย ๆ ด้านล่างนี้ทำให้เกิดข้อผิดพลาด: ./heredoc_in_function.sh: 10: Syntax error: end of file unexpected (expecting "}") #!/bin/sh my_function () { cat <<HEREDOC heredoc contents HEREDOC } my_function สิ่งแวดล้อม: Ubuntu 11.04 (GNU / Linux 2.6.38-8-server x86_64) GNU ทุบตีรุ่น 4.2.8 (1) - ปล่อย (x86_64-pc-linux-gnu)
12 ubuntu  bash 

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