Unix & Linux

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

6
เปลี่ยนหมายเลขของพาร์ติชันจาก sda1 เป็น sda2
ฉันมีดิสก์ที่มีสองพาร์ติชัน: sda1 และ sda2 ฉันต้องการเปลี่ยนจำนวน sda1 เป็น sda2 และ sda2 เป็น sda1 เป็นไปได้ แต่ฉันจำขั้นตอนไม่ได้ นั่นคือพาร์ติชั่นแรกของฉันจะเป็น sda2 และ sda1 ตัวที่สองดังนั้นฉันต้องระบุคำสั่งด้วยตนเองไม่ใช่การสั่งซื้ออัตโนมัติเช่นใน fdisk -> x -> f ฉันจะเปลี่ยนคำสั่งซื้อได้อย่างไร ลิงค์ไปยังคู่มือหรือบทช่วยสอนก็มีประโยชน์เช่นกัน ขอบคุณ เหตุผล: ฉันมีแอปพลิเคชันที่ต้องการอ่านข้อมูลจาก sda1 แต่ข้อมูลอยู่ใน sda2 เปลี่ยนตารางพาร์ทิชันเป็นวิธีที่เร็วกว่าสำหรับปัญหานี้ ระบบไม่สำคัญ แต่ฉันไม่ต้องการหยุดระบบนานเกินไป อัปเดต : OpenBSD เวอร์ชัน fdisk มีฟังก์ชันการทำงาน
20 linux  partition  fdisk 

3
วิธี“ เหมาะสม” ในการรันเชลล์สคริปต์เป็น daemon
ฉันจะเขียนสคริปต์เชลล์ที่ผมอยากจะทำงานเป็นภูตในการเริ่มต้นโดยไม่ต้องใช้เครื่องมือภายนอกเช่นdaemontoolsหรือ daemonize Linux Daemon การเขียน HOWTO ตามที่ลินุกซ์ภูตเขียน HOWTOที่เหมาะสมภูตมีลักษณะดังต่อไปนี้: ส้อมจากกระบวนการหลัก ปิดทั้งหมดอธิบายไฟล์ (เช่นstdin, stdout, stderr) เปิดบันทึกสำหรับการเขียน (ถ้ากำหนดค่า) เปลี่ยนไดเรกทอรีการทำงานอย่างใดอย่างหนึ่งที่เป็นถาวร (ปกติ/) รีเซ็ตหน้ากากโหมดไฟล์ (umask) สร้างSession ID ที่ไม่ซ้ำกัน(SID) daemonizeบทนำ daemonizeบทนำไปไกลระบุว่าภูตทั่วไปเพิ่มเติม: ยกเลิกการเชื่อมโยงจากเทอร์มินัลการควบคุม (หากมี) และจะละเว้นสัญญาณเทอร์มินัลทั้งหมด ยกเลิกการเชื่อมโยงจากกลุ่มกระบวนการ จับ SIGCLD ฉันจะทำทั้งหมดนี้ในsh, dashหรือbashสคริปต์ด้วยเครื่องมือลินุกซ์ร่วมกันเท่านั้น? สคริปต์ควรสามารถทำงานบน distros ได้มากที่สุดโดยไม่ต้องมีซอฟต์แวร์เพิ่มเติมแม้ว่าDebianจะเป็นจุดสนใจหลักของเรา หมายเหตุ:ฉันรู้ว่ามีคำตอบมากมายในเครือข่ายStackExchange ที่แนะนำให้ใช้nohupหรือsetsidแต่วิธีการเหล่านี้ไม่ได้จัดการข้อกำหนดทั้งหมดข้างต้น แก้ไข: ภูต (7) manpageยังช่วยให้คำแนะนำบางส่วนแม้ดูเหมือนจะมีความแตกต่างบางอย่างระหว่างแบบเก่าSysVภูตและใหม่กว่าsystemdคน เนื่องจากความเข้ากันได้กับความหลากหลายของ distros เป็นสิ่งสำคัญโปรดตรวจสอบให้แน่ใจว่าคำตอบนั้นชัดเจนแตกต่างกัน

3
Bash เพิ่มช่องว่างต่อท้ายเพื่อจัดเรียงสตริง
รหัสปัจจุบันของฉันมีลักษณะดังนี้: x=${y:0:40}ซึ่งจำกัดความยาวของสตริงไว้ที่ 40 ตัวอักษร ในกรณีที่สตริงมีความยาวน้อยกว่า 40 ตัวอักษรเป็นไปได้หรือไม่ที่จะเติมช่องว่างท้ายท้ายด้วยช่องว่าง? ดังนั้นหากฉัน y="very short text" ฉันอยากให้ y เป็น: y = "ข้อความสั้นมาก(+25 ช่องว่างต่อท้าย) "
20 bash 

4
ขยายพาร์ติชันที่เข้ารหัสของ LUKS เพื่อเติมดิสก์
ฉันเพิ่งอัพเกรดดิสก์จาก 128GB SSD เป็น 512GB SSD กระบวนการ / พาร์ติชันถูกเข้ารหัสด้วย LUKS ฉันต้องการความช่วยเหลือในการขยายพาร์ติชันเพื่อใช้พื้นที่ว่างทั้งหมดบนดิสก์ใหม่ ฉันได้ขับรถเก่าไปยังไดรฟ์ใหม่แล้ว: [root@localhost ~]# fdisk -l /dev/sda Disk /dev/sda: 477 GiB, 512110190592 bytes, 1000215216 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes …
20 filesystems  luks 

4
dirname และ basename เทียบกับการขยายพารามิเตอร์
มีเหตุผลใดที่จะชอบอีกรูปแบบหนึ่งหรือไม่ ประสิทธิภาพความน่าเชื่อถือความสะดวกในการพกพา? filename=/some/long/path/to/a_file parentdir_v1="${filename%/*}" parentdir_v2="$(dirname "$filename")" basename_v1="${filename##*/}" basename_v2="$(basename "$filename")" echo "$parentdir_v1" echo "$parentdir_v2" echo "$basename_v1" echo "$basename_v2" ผลิต: /some/long/path/to /some/long/path/to a_file a_file (v1 ใช้การขยายพารามิเตอร์เชลล์ v2 ใช้ไบนารีภายนอก)

3
วิธีการส่งรหัสผ่านไปยังบรรทัดคำสั่ง mysql
ฉันมีรหัสผ่าน MySQL บันทึกไว้ในไฟล์foo.phpเช่นP455w0rdเมื่อฉันพยายามใช้: $ cat foo.php | grep '$dbpwd=' | cut -d '"' -f 2 | mysql -U root -p mydb -h friendserver Enter password: (holds) $ echo P455w0rd | mysql -u root -p mydb -h friendserver Enter password: (holds) ตัวเลือกทั้งสองยังคงถามรหัสผ่านวิธีการที่ถูกต้องในการส่งรหัสผ่านstdinคืออะไร?
20 password  mysql  stdin 

4
ใช้ sed / awk เพื่อลบอะไรหลังจากช่องว่างแรก
aaaaaaaa 09 bbbbbbbb 90 ccccccccccccccc 89 ddddd 09 ใช้ sed / awk / replace ในข้อความด้านบนฉันต้องการลบสิ่งที่เกิดขึ้นหลังจากช่องว่างแรกในแต่ละบรรทัด ตัวอย่างเช่นผลลัพธ์จะเป็น: aaaaaaaa bbbbbbbb ccccccccccccccc ddddd ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชม.
20 sed  grep  awk 

3
initramfs ใช้ / etc / fstab หรือไม่
วิธีที่ฉันเข้าใจมัน initramfs รับผิดชอบการโหลดระบบไฟล์รูท "ของจริง" ตอนนี้มีสองที่ที่เรานิยามรูตนั้น /etc/fstabครั้งแรกที่เรานำรายการใน root=/dev/sda1ประการที่สองเราวางอุปกรณ์บนเคอร์เนลบูตคำสั่งเช่น initramfs อันใดที่ใช้เพื่อพิจารณาว่าระบบไฟล์รูทอยู่ที่ไหน? ถ้ามันใช้พารามิเตอร์เคอร์เนลรากทำไมเรามีรายการใน/etc/fstab? ตัวเลือกที่สอง (อ่าน/etc/fstab) ค่อนข้างไร้เหตุผลเพราะ/etc/fstabไฟล์อยู่ในอุปกรณ์รูทมากที่ initramfs พยายามเมาท์ตั้งแต่แรก สิ่งที่สับสนมาก
20 boot  fstab  initramfs 

2
จะฆ่ากระบวนการที่ระบุว่า "ไม่อนุญาตให้ดำเนินการ" เมื่อพยายามทำอย่างไร
ฉันมีกระบวนการที่ฉันต้องการฆ่า: computer@ubuntu:~$ ps aux | grep socat root 2092 0.0 0.0 5564 1528 pts/1 T 14:37 0:00 sudo socat TCP:xxx.17.29.152:54321 PTY,link=/dev/ttyGPS0,raw,echo=0,mode=666 computer@ubuntu:~$ kill 2092 -bash: kill: (2092) - Operation not permitted <--------------- How to kill ??
20 sudo  kill 


3
การอ่านรหัสผ่านโดยไม่แสดงบนหน้าจอใน Bash Scripts
วิธีการอ่านรหัสผ่านในสคริปต์ทุบตีในลักษณะเช่นเครื่องมือที่ไม่แสดงใน terminal? (การเปลี่ยนแบบอักษรเป็นสีดำบนพื้นสีดำอาจทำได้ยากโดยการคัดลอกและวางอย่างง่ายดายดังนั้นจึงไม่ใช่วิธีแก้ปัญหา)
20 bash  password 

1
เกิดอะไรขึ้นกับกระบวนการ Linux แบบมัลติเธรดหากได้รับสัญญาณ
หากกระบวนการ Unix (Posix) ได้รับสัญญาณตัวจัดการสัญญาณจะทำงาน จะเกิดอะไรขึ้นกับมันในกระบวนการแบบมัลติเธรด? เธรดใดรับสัญญาณ ในความคิดของฉันสัญญาณ API ควรขยายเพื่อจัดการ (เช่นเธรดของตัวจัดการสัญญาณควรจะสามารถกำหนดได้) แต่การค้นหา infos บนเน็ตฉันพบเปลวไฟนานแค่ปีเดียวในรายชื่อส่งเมลเคอร์เนลของ linux และบน ฟอรั่มที่แตกต่างกัน ตามที่ฉันเข้าใจแล้วแนวคิดของ Linus นั้นแตกต่างจากมาตรฐาน Posix และชั้นแรกที่รองรับเลเยอร์บางส่วนถูกสร้างขึ้น แต่ตอนนี้ Linux ตามรูปแบบ posix สถานะปัจจุบันคืออะไร

1
NetworkManager, networkd, netplan, ifupdown2 และ iproute2 โต้ตอบกันอย่างไร
ฉันกำลังเรียนรู้เกี่ยวกับเครือข่าย Linux บนเวิร์กสเตชัน Kubuntu 18.04 ของฉันและฉันเห็นว่ามีทั้งสองอย่างNetworkManagerและnetworkd-dispatcherกำลังทำงานอยู่: oleg@eclectic:~$ sudo ps -ef | grep -i net root 56 2 0 Oct11 ? 00:00:00 [netns] root 1097 1 0 Oct11 ? 00:00:02 /usr/sbin/NetworkManager --no-daemon root 1098 1 0 Oct11 ? 00:00:00 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers root 1250 1 0 Oct11 ? 00:00:02 /usr/sbin/inetd root …

4
ยกเว้นตัวแปรสำหรับใช้เป็นเนื้อหาของสคริปต์อื่น
คำถามนี้ไม่เกี่ยวกับวิธีเขียนสตริงตัวอักษรที่ใช้ Escape อย่างเหมาะสม ฉันไม่พบคำถามที่เกี่ยวข้องซึ่งไม่เกี่ยวกับวิธีการหลีกเลี่ยงตัวแปรเพื่อการบริโภคโดยตรงภายในสคริปต์หรือโดยโปรแกรมอื่น ๆ เป้าหมายของฉันคือการเปิดใช้งานสคริปต์เพื่อสร้างสคริปต์อื่น ๆ เนื่องจากงานในสคริปต์ที่สร้างขึ้นจะทำงานที่ใดก็ได้ตั้งแต่ 0 ถึงnครั้งในเครื่องอื่นและข้อมูลที่สร้างขึ้นอาจเปลี่ยนแปลงก่อนที่จะทำงาน (อีกครั้ง) ดังนั้นการดำเนินการโดยตรงผ่านเครือข่ายจะ ไม่ทำงาน. รับทราบตัวแปรที่อาจมีตัวอักษรพิเศษเช่นคำพูดเดียวฉันต้องเขียนออกมาเป็นตัวอักษรสตริงหนีเต็มอย่างเช่นตัวแปรfooที่มีbar'bazควรจะปรากฏในสคริปต์ที่สร้างขึ้นเป็น: qux='bar'\''baz' ซึ่งจะเขียนโดยการต่อท้าย"qux=$foo_esc"บรรทัดอื่นของสคริปต์ ฉันใช้ Perl แบบนี้: foo_esc="'`perl -pe 's/('\'')/\\1\\\\\\1\\1/g' <<<"$foo"`'" แต่ดูเหมือนว่าเกินความจริง ฉันไม่ประสบความสำเร็จในการทำมันด้วยการทุบตีคนเดียว ฉันได้ลองหลายแบบแล้ว: foo_esc="'${file//\'/\'\\\'\'}'" foo_esc="'${file//\'/'\\''}'" แต่เครื่องหมายสแลชพิเศษอาจปรากฏในเอาต์พุต (เมื่อฉันทำecho "$foo") หรือพวกเขาทำให้เกิดข้อผิดพลาดทางไวยากรณ์ (ต้องการอินพุตเพิ่มเติมหากทำจากเชลล์)

4
ปฏิบัติการ Linux ล้มเหลวด้วย“ ไม่พบไฟล์” แม้ว่าไฟล์จะอยู่ที่นั่นและใน PATH
ฉันต้องการเปิดใช้งานwineexecutable (เวอร์ชั่น 2.12) แต่ฉันได้รับข้อผิดพลาดต่อไปนี้ ( $= shell prompt): $ wine bash: /usr/bin/wine: No such file or directory $ /usr/bin/wine bash: /usr/bin/wine: No such file or directory $ cd /usr/bin $ ./wine bash: ./wine: No such file or directory อย่างไรก็ตามไฟล์อยู่ที่นั่น: $ which wine /usr/bin/wine ปฏิบัติการที่แน่นอนอยู่ที่นั่นและไม่มี symlink ที่ไม่ทำงาน: $ stat /usr/bin/wine File: …

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