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

เชลล์เป็นคำศัพท์สำหรับล่ามบรรทัดคำสั่งที่ใช้บ่อยที่สุดกับระบบปฏิบัติการแบบ Unix แต่ยังใช้ในการโต้ตอบกับระบบปฏิบัติการที่ใช้ GUI ในรูปแบบที่ละเอียดยิ่งขึ้น ไม่เพียง แต่จะช่วยให้ผู้ใช้เรียกใช้โปรแกรมจากส่วนต่อประสานข้อความ แต่ยังมีคุณสมบัติการเขียนโปรแกรมขั้นพื้นฐานเช่นตัวแปรการทดแทนการเปลี่ยนเส้นทางเอาต์พุตและสัญลักษณ์แทน


5
วิธีลบไฟล์ (200,000 ไฟล์) จำนวนมาก?
ฉันต้องลบ 200,000 ไฟล์ (ทั้งหมดนี้) จากโฟลเดอร์และฉันไม่ต้องการลบโฟลเดอร์เอง ใช้ rm ฉันได้รับข้อผิดพลาด "รายการอาร์กิวเมนต์ยาวเกินไป" ฉันพยายามทำบางสิ่งด้วย xargs แต่ฉันไม่ใช่ Shell Guy ดังนั้นจึงไม่ทำงาน: find -name * | xargs rm -f

3
การรันเชลล์สคริปต์โดยไม่มีตัวแปรสภาวะแวดล้อม
อย่างที่ฉันรู้เชลล์สคริปต์ที่รันใหม่จะสืบทอดตัวแปรสภาพแวดล้อม มีวิธีป้องกันสิ่งนี้หรือไม่? (การรันเชลล์โดยไม่มีการสืบทอดตัวแปร)

4
นับจำนวนไบต์ piped จากกระบวนการหนึ่งไปยังกระบวนการอื่น
ฉันใช้เชลล์สคริปต์ที่ท่อข้อมูลจากกระบวนการหนึ่งไปยังกระบวนการอื่น process_a | process_b ไม่มีใครรู้วิธีหาจำนวนไบต์ที่ถูกส่งระหว่างโปรแกรมทั้งสอง? ทางออกเดียวที่ฉันสามารถนึกได้ในขณะนี้คือการเขียนโปรแกรม c ขนาดเล็กที่อ่านจาก stdin, เขียนไปยัง stdout และนับจำนวนข้อมูลที่ถ่ายโอนทั้งหมด, จัดเก็บจำนวนในตัวแปรสภาพแวดล้อมเช่น: process_a | count_bytes | process_b ไม่มีใครมีวิธีแก้ปัญหา neater?
17 bash  shell  pipe 

1
บังคับใช้คำสั่ง“ net user” เพื่อตั้งรหัสผ่านที่ยาวเกิน 14 ตัวอักษร
ฉันกำลังออกคำสั่ง "ผู้ใช้เน็ต" เพื่อตั้งค่าผู้ใช้ท้องถิ่นบนเดสก์ท็อปของฉันเพื่อการทดสอบบางอย่างและต้องการตั้งรหัสผ่านที่ยาวกว่า 14 ตัวอักษร ในการทำเช่นนี้ Windows จะส่งสัญญาณเตือนกลับมาเพื่อยืนยันรหัสผ่านที่ยาวและฉันสงสัยว่าถ้าใครรู้วิธีระงับข้อความนั้นและบังคับให้ตั้งรหัสผ่านยาว คุณสามารถเห็นข้อความแจ้งที่ฉันกำลังพูดด้วยการออกคำสั่งต่อไปนี้ ... net user MyUser MyPasswordIsReallyLong /ADD มันก่อให้เกิดพรอมต์ต่อไปนี้ รหัสผ่านที่ป้อนมีความยาวมากกว่า 14 ตัวอักษร คอมพิวเตอร์ที่ใช้ Windows ก่อน Windows 2000 จะไม่สามารถใช้บัญชีนี้ได้ คุณต้องการดำเนินการต่อไปหรือไม่? (Y / N) [Y]: นอกจากนี้สมาชิกอาวุโสอีกคนหนึ่งที่สามารถช่วยสร้างแท็กต่อไปนี้: ผู้ใช้เน็ต

10
ฉันจะลงชื่อเข้าใช้ผ่าน SSH ได้อย่างไร
ขณะนี้ฉันกำลังตั้งค่าการกำหนดค่า bash ที่ค่อนข้างซับซ้อนซึ่งจะใช้กับเครื่องหลายเครื่อง ฉันพยายามที่จะตรวจสอบว่ามันเป็นไปได้ที่จะตรวจสอบว่าฉันเข้าสู่ระบบผ่านทาง SSH หรือบนเครื่องท้องถิ่น เช่นนี้ฉันสามารถตั้งค่านามแฝงบางอย่างขึ้นอยู่กับความจริงที่ว่า เช่นเดียวกับ aliasing haltการrestartตั้งแต่หยุดเซิร์ฟเวอร์ระยะไกลไม่อาจจะเป็นสิ่งที่ดีที่สุดที่จะทำ สิ่งที่ฉันรู้จนถึงตอนนี้คือตัวแปรสภาพแวดล้อมSSH_CLIENTถูกตั้งค่าเมื่อฉันเข้าสู่ระบบผ่านทาง ssh แต่น่าเสียดายที่ตัวแปรนี้จะถูกยกเลิกเมื่อฉันเริ่มต้นเปลือกใช้ super sudo -sกับ ฉันก็รู้ว่าฉันสามารถส่งพารามิเตอร์ไปยัง sudo ที่สั่งให้ sudo เพื่อคัดลอกตัวแปรสภาพแวดล้อมทั้งหมดของฉันไปยังสภาพแวดล้อมเชลล์ใหม่ แต่ถ้าฉันไม่ต้องการทำสิ่งนี้จะมีวิธีอื่นหรือไม่?
17 linux  ssh  shell 

4
Shell = ตรวจสอบว่าตัวแปรเริ่มต้นด้วย #
ฉันจะขอบคุณถ้าคุณสามารถช่วยฉันวิธีการคิดวิธีการตรวจสอบว่าเนื้อหาของตัวแปรเริ่มต้นด้วยเครื่องหมายแฮ: #!bin/sh myvar="#comment asfasfasdf" if [ myvar = #* ] สิ่งนี้ใช้ไม่ได้ ขอบคุณ! Jans
16 linux  shell 

3
การทำงานของแท็บของฉันและลูกศรขึ้นอยู่ที่ไหน (Ubuntu 10.04)
ฉันยังใหม่กับ Linux ลองใช้ Ubuntu 10.04 กำหนดค่าล่วงหน้าโดยโฮสต์ เมื่อฉันเข้าสู่ระบบ (SSH) โดยใช้บัญชีที่กำหนดค่าล่วงหน้าเชลล์พรอมต์คือ: user @ hostname: ~ $ ลูกศรขึ้นเลื่อนผ่านรายการคำสั่งเชลล์ล่าสุดและการเติมแท็บจะทำงานตามที่คาดไว้ อย่างไรก็ตามเมื่อฉันสร้างบัญชีและเข้าสู่ระบบ (SSH) โดยใช้บัญชีนั้น shell prompt นั้นเป็นเพียงแค่ "$" และลูกศรขึ้นเพียงพิมพ์อักขระควบคุม (^ [[A)) ทุกคนสามารถบอกวิธีรับการแจ้งเตือนการแท็บเสร็จและการตั้งค่าลูกศรของฉันได้หรือไม่ ความจริงที่ว่าฉันได้รับตัวควบคุมเมื่อฉันขึ้น arrow ทำให้ฉันคิดว่าบัญชีของฉัน (หรือเซสชั่น) อยู่ในโหมดที่ฉันไม่คุ้นเคย ฉันรู้ว่ามีรหัสการกรอกข้อมูลแท็บใน bashrc ที่ฉันสามารถแสดงความคิดเห็นได้ แต่ดูเหมือนจะไม่มีผลใด ๆ แม้หลังจากออกจากระบบและกลับเข้าสู่ระบบแล้ว ฉันอยู่ในโหมดแปลก ๆ เมื่อฉันใช้ SSH ด้วยบัญชีใหม่หรือมีการตั้งค่าเซสชัน / บัญชีบางอย่างที่ฉันต้องตั้งค่าและสามารถหาข้อมูลได้จากทุกที่บนอินเทอร์เน็ตถ้าฉันเพิ่งรู้ว่าจะมองหาอะไร?
16 linux  ssh  shell  accounts 

7
ฉันจะใช้นามแฝงใน crontab ได้อย่างไร
ฉันมีคำสั่งบางอย่างในของฉันที่ฉันต้องการจะเรียกจากฉัน.profilecrontab ตัวอย่างเช่นถ้าฉันมี alias notify-me="~/bin/notify.pl -u user1" alias notify-team="~/bin/notify.pl -u user1 user2 user3 user4 ...." ฉันต้องการเรียกนามแฝง 0 11 * * * notify-team ดังนั้นหากรายการในฉัน.profileได้รับการปรับปรุงฉันก็ไม่จำเป็นต้องอัปเดตcrontabด้วย อย่างไรก็ตามดูเหมือนว่าฉันจะไม่สามารถใช้ชื่อแทนcrontabได้ มีวิธีแก้ไขไหม? ฉันลองคำแนะนำที่นี่เพื่อตั้งค่าสภาพแวดล้อม (เช่น / bin / bash -lc และสคริปต์-wrapper script) ดูเหมือนว่าจะใช้งานได้กับสคริปต์ แต่ไม่ใช่นามแฝง ความคิดใด ๆ
16 shell  cron  alias 

5
nc (netcat) หยุดทำงานรอข้อมูลเพิ่มเติมในโหมด UDP
ฉันพยายามส่งสตริงเล็ก ๆ เพื่อ statsd ผ่าน nc ภายในบล็อกการอ่าน: while read line; do printf "folder.counter:value|1c" | nc -q 0 -u $host $port done น่าเสียดายที่เมื่ออยู่ในโหมด UDP ดูเหมือนว่า nc ต้องการรออย่างไม่มีกำหนดแม้ว่าฉันจะระบุไว้-q 0แล้วก็ตามซึ่ง man page บอกว่าจะทำให้โปรแกรมออกจาก EOF ทันที ฉันพยายามผ่านไป-w 1แล้ว แต่ถ้าข้อมูลที่ฉันส่งมามีมากกว่าหนึ่งบรรทัดต่อวินาทีบัฟเฟอร์ข้อมูลจะหมดลงและฉันสูญเสียสถิติตามเวลาจริงของฉัน เป็นไปได้ไหมที่จะทำในสิ่งที่ฉันพยายามจะทำกับ netcat หรือฉันจะต้องเขียนอะไรบางอย่างในภาษาที่มีห้องสมุด statsd อยู่ใช่ไหม?
16 shell  netcat  statsd 

1
ฉันสามารถเรียก pushd / popd และป้องกันไม่ให้มันพิมพ์สแต็คได้หรือไม่?
หลังจากการเรียกpushd/ popdin bash มันจะพิมพ์ออกจากไดเรกทอรีสแต็คปัจจุบัน มีวิธีใดที่จะป้องกันพฤติกรรมนี้ได้ เสียงรบกวนในคำสั่งนี้เป็นเรื่องแปลกในเครื่องมือยูนิกซ์

2
Bash Prompt ด้านล่างผลลัพธ์ - หางบันทึกประวัติความเป็นมา
ฉันเคยทำงานให้กับ บริษัท ที่มีเชลล์แบบกำหนดเองสำหรับการจัดการหนึ่งในผลิตภัณฑ์ของตนที่ใช้งานบน Linux และฉันต้องการจำลองคุณลักษณะสำคัญของเชลล์นี้ งานทั้งหมดทำโดยกระบวนการพื้นหลังและผลลัพธ์จากบันทึกแสดงต่อผู้ใช้ที่เชื่อมต่อทั้งหมด บันทึกจะอยู่ในพื้นหลังกับเชลล์ของคุณและบรรทัดพรอมต์จะอยู่ที่ด้านล่างเสมอ สำหรับเช่น Log line 1 Log line 2 Log line 3 ![ROOT@PRODUCT51-LIVE]:~/ # วิธีที่ฉันพยายามทำกับ bash คือการเริ่ม tail tail ในไฟล์. bashrc ของผู้ใช้ แต่เมื่อ output จากคำสั่งถูกส่งไปยัง stdout - มันมาใน bash prompt เช่น ![ROOT@PRODUCT51-LIVE]:~/ #Log line 1 Log line 2 Log line 3 และผู้ใช้จะต้องกด Enter หรือCtrlCสำหรับบรรทัดแจ้งให้สะอาด ฉันไม่มีแนวคิดเกี่ยวกับวิธีทำให้พรอมต์กระโดดไปที่ด้านล่างสุดของผลลัพธ์เสมอและฉันคิดว่าฉันใช้คำศัพท์ที่ผิดเพื่อค้นหาสิ่งใดใน …
15 linux  bash  shell  tail 

5
รับรายการไฟล์ที่ถ่ายโอนจาก rsync หรือไม่
ขณะนี้ฉันใช้rsyncสคริปต์ที่ปรับใช้แอปพลิเคชัน PHP จากการจัดเตรียมไปยังเซิร์ฟเวอร์การผลิต นี่คือวิธี: rsync -rzai --progress --stats --ignore-times --checksum /tmp/app_export/ root@app.com:/var/www/html/app/ ขณะนี้กำลังแสดงรายการของทุกไฟล์ที่กำลังถูกเปรียบเทียบ (ทุกไฟล์ในโครงการ) แต่ฉันต้องการให้ส่งออกเฉพาะรายการที่แก้ไขดังนั้นฉันสามารถเรียกใช้ด้วย--dry-runตัวเลือกเพื่อตรวจสอบว่าการปรับใช้ทั้งหมดกำลังอัปเดตเฉพาะ ไฟล์ที่ต้องการ หมายเหตุ: สิ่งที่ดีที่สุดที่ฉันสามารถทำได้คือgrep fcstผลลัพธ์ แต่ฉันกำลังมองหาrsyncตัวเลือกที่ฉันแน่ใจว่ามี แต่ฉันไม่สามารถหาได้ในหน้าคู่มือ ขอบคุณล่วงหน้า!

7
ไม่ต้องการทั้งบรรทัดเพียงแค่การจับคู่จากนิพจน์ทั่วไป
ฉันเพียงแค่ต้องได้รับการแข่งขันจากการแสดงออกปกติ: $ cat myfile.txt | SOMETHING_HERE "/(\w).+/" ผลลัพธ์จะต้องเป็นสิ่งที่ตรงกันภายในวงเล็บ อย่าคิดว่าฉันสามารถใช้grep ได้เพราะมันตรงกับทั้งบรรทัด โปรดแจ้งให้เราทราบวิธีการทำเช่นนี้
15 bash  shell  grep  regex 

8
ทำให้ ls พิมพ์ทั้งหมดในหนึ่งบรรทัด (เช่นในเทอร์มินัล)
ls พิมพ์แตกต่างกันไปขึ้นอยู่กับว่าการส่งออกไปยังขั้วหรือสิ่งอื่น เช่น: $ ls . file1 file2 $ ls . | head file1 file2 มีวิธีที่จะlsพิมพ์ออกมาในหนึ่งบรรทัดราวกับว่ามันเป็นขั้วเมื่อมันไม่ได้ มี-Cอาร์กิวเมนต์ที่ sorta ทำ แต่จะแยกออกเป็นหลายบรรทัด $ ls file1 file10 file11 file12 file13 file14 file15 file16 file17 file18 file19 file2 file3 file4 file5 file6 file7 file8 file9 $ ls -C . | head file1 file11 file13 …

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