Unix & Linux

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

1
Linux, GNU GCC, ld, สคริปต์เวอร์ชันและรูปแบบไบนารีของ ELF - มันทำงานอย่างไร
ฉันพยายามเรียนรู้เพิ่มเติมเกี่ยวกับการกำหนดเวอร์ชันของไลบรารีใน Linux และวิธีการทำให้ทุกอย่างทำงานได้ นี่คือบริบท: - ฉันมีสองรุ่นของห้องสมุดแบบไดนามิกซึ่งเผยให้เห็นชุดเดียวกันของอินเตอร์เฟซพูดและlibsome1.solibsome2.so - libsome1.soโปรแกรมที่มีการเชื่อมโยงกับ - โปรแกรมนี้จะใช้ในการโหลดแบบไดนามิกโมดูลอื่นพูดlibdl.solibmagic.so - ตอนนี้มีการเชื่อมโยงกับlibmagic.so libsome2.soเห็นได้ชัดโดยไม่ต้องใช้สคริปต์ลิงเกอร์สัญลักษณ์ซ่อนตัวอยู่ในlibmagic.soที่เวลาทำงานทุกสายอินเตอร์เฟซในการได้รับการแก้ไขไปlibsome2.so libsome1.soนี้ได้รับการยืนยันโดยการตรวจสอบค่าส่งกลับโดยเทียบกับมูลค่าของแมโครlibVersion()LIB_VERSION - ดังนั้นฉันลองถัดไปเพื่อคอมไพล์และเชื่อมโยงlibmagic.soกับสคริปต์ linker ซึ่งซ่อนสัญลักษณ์ทั้งหมดยกเว้น 3 ซึ่งกำหนดไว้ในlibmagic.soและถูกส่งออกโดยมัน ใช้งานได้ ... หรืออย่างน้อยที่สุดlibVersion()และLIB_VERSIONค่าตรงกัน (และรายงานรุ่น 2 ไม่ใช่ 1) - อย่างไรก็ตามเมื่อโครงสร้างข้อมูลบางอย่างต่อเนื่องเป็นดิสก์ฉันสังเกตเห็นความเสียหายบางอย่าง ในไดเรกทอรีของแอปพลิเคชันหากฉันลบlibsome1.soและสร้างลิงค์ซอฟต์ลิสต์ในตำแหน่งที่จะชี้ไปlibsome2.soทุกอย่างทำงานได้ตามที่คาดหวังและความเสียหายเดียวกันจะไม่เกิดขึ้น ฉันอดไม่ได้ที่จะคิดว่าสิ่งนี้อาจเกิดขึ้นเนื่องจากความขัดแย้งในการแก้ปัญหาสัญลักษณ์ของลิงเกอร์ ฉันได้ลองหลายสิ่งหลายอย่างเช่นพยายามเชื่อมโยงlibsome2.soเพื่อให้สัญลักษณ์ทั้งหมดเป็นสัญลักษณ์symbol@@VER_2(ซึ่งฉันยังสับสนอยู่เพราะคำสั่งnm -CD libsome2.soยังคงแสดงสัญลักษณ์เป็นsymbolและไม่ใช่symbol@@VER_2) ... ดูเหมือนจะไม่มีอะไรทำงาน !!! ช่วยด้วย!!!!!!

2
ความแตกต่างระหว่าง fork () และ vfork () คืออะไร
ฉันต้องการที่จะเข้าใจในรายละเอียดความแตกต่างระหว่าง fork () และ vfork () ฉันไม่สามารถแยกแยะหน้าคนได้อย่างสมบูรณ์ ฉันต้องการชี้แจงเพื่อนร่วมงานคนหนึ่งให้ความเห็นว่า " ใน Linux ปัจจุบันไม่มี vfork () แม้ว่าคุณจะเรียกมันว่ามันจะเรียกส้อมภายใน () "

1
ตัวอธิบายไฟล์รั่วไหล
มันหมายความว่าอะไรถ้าไฟล์ descriptor รั่ว File descriptor 6 (socket:[901758]) leaked on lvextend invocation. Parent PID 10035: /bin/zsh File descriptor 9 (/dev/pts/1) leaked on lvextend invocation. Parent PID 10035: /bin/zsh File descriptor 11 (/dev/pts/1) leaked on lvextend invocation. Parent PID 10035: /bin/zsh File descriptor 12 (/dev/pts/1) leaked on lvextend invocation. Parent PID 10035: …
13 shell  lvm 

3
การสร้างบัญชี UNIX ซึ่งดำเนินการเพียงคำสั่งเดียวเท่านั้น
มีวิธีการสร้างบัญชีผู้ใช้ใน Solaris ซึ่งอนุญาตให้ผู้ใช้เรียกใช้คำสั่งเดียวเท่านั้นหรือไม่ ไม่มีล็อกอินเชลล์หรืออะไรอย่างอื่น ฉันอาจจะทำมันด้วย/usr/bin/falseใน/etc/passwdและเพิ่งได้รับให้ผู้ใช้ssh <hostname> <command>แต่มีวิธีที่ดีกว่าที่จะทำมันได้หรือไม่


2
เปลี่ยนสีของพรอมต์ขึ้นอยู่กับผู้ใช้หรือรูทใน zsh
ใน zsh คุณสามารถมี%#ในPS1(หรือPROMPTตัวแปรอะไรก็ได้) ซึ่งโดยทั่วไปหมายถึงแสดง%ว่าผู้ใช้หรือแสดง#ถ้ารูต ฉันสงสัยว่ามีวิธีใดที่จะส่งผลกระทบต่อสิ่งนี้%หรือไม่หรือ#เปลี่ยนสีขึ้นอยู่กับว่าเป็นผู้ใช้หรือรูท (สีแดงสำหรับรูต, สีฟ้าสำหรับผู้ใช้) วิธีที่ชัดเจนคือการเปลี่ยนPS1ในรูทของฉัน~/.zshrcแต่พิจารณา นี่เป็นสัญลักษณ์พิเศษแล้วฉันสงสัยว่าอาจจะไม่มีวิธีที่ฉันสามารถใช้แบบเดียวกันPS1สำหรับทั้งสองได้ ... สิ่งที่เฉพาะเจาะจงสำหรับ%#มันสำหรับ zsh (ฉันแน่ใจว่ามีแฮ็กอื่น ๆ ที่ฉันสามารถทำได้เช่นกัน ถ้างบแล้ว)
13 shell  zsh  colors  prompt 

4
sendmail หมายถึงอะไรที่นี่?
เมื่อฉันติดตั้ง sendmail จาก debian repos ฉันจะได้ผลลัพธ์ต่อไปนี้: Disabling HOST statistics file(/var/lib/sendmail/host_status). Creating /etc/mail/sendmail.cf... Creating /etc/mail/submit.cf... Informational: confCR_FILE file empty: /etc/mail/relay-domains Informational: confCT_FILE file empty: /etc/mail/trusted-users Updating /etc/mail/access... Updating /etc/mail/aliases... WARNING: local host name (ixtmixilix) is not qualified; see cf/README: WHO AM I? ใครช่วยกรุณาบอกฉันว่าสิ่งนี้หมายถึงสิ่งที่ฉันต้องทำเพื่อให้มีคุณสมบัติชื่อโฮสต์ของฉัน?

2
ฉันจะระบุโลคัลพอร์ตเมื่อสร้างการเชื่อมต่อ SSH ได้อย่างไร
ฉันมีเซิร์ฟเวอร์สองโฮสต์ใน IDC ฉันสามารถใช้พอร์ต 20/21/22/23/3389 / 33101-33109 เพื่อสร้างการเชื่อมต่อระหว่างสองเซิร์ฟเวอร์ อุปกรณ์เครือข่าย IDC จะปิดกั้นแพ็กเก็ตอื่น ๆ ที่มีพอร์ตต้นทางหรือปลายทางไม่อยู่ในรายการ / ช่วง 20/21 / 22/23/80/3389 / 33101-33109 แต่พอร์ตต้นทางของ SSH นั้นสุ่ม ใช้คำสั่ง หนึ่งสามารถระบุพอร์ตระยะไกลได้อย่างง่ายดายssh username@server -p remote_port ดังนั้นจะมีsshพารามิเตอร์คำสั่งหรือวิธีอื่นเพื่อระบุพอร์ตต้นทางในเครื่องเพื่อให้ฉันสามารถใช้ตัวอย่างเช่นพอร์ต 33101 เพื่อสร้างการเชื่อมต่อ SSH? โครงสร้างเครือข่ายของฉันเป็นเช่นนี้:
13 ssh  networking 

1
ป้องกันการออกจากระบบจากการฆ่า tmux Session
ฉันได้สังเกตเห็นว่าการออกจากระบบ (ออกจากระบบ) จากเซสชันผู้ใช้ X ของฉันจะฆ่าtmuxเซสชันใด ๆ ที่ฉันได้เริ่มต้นขึ้นแม้กระทั่งเซสชันที่ฉันใช้ด้วยsudo tmuxและคำสั่งที่คล้ายกัน ฉันแน่ใจว่าก่อนหน้านี้ไม่ได้เกิดขึ้น แต่การเปลี่ยนแปลงล่าสุดบางอย่างได้ส่งผลกระทบต่อพฤติกรรมนี้ ฉันจะรักษาเซสชันเหล่านี้tmux(หรือscreen) ได้อย่างไรหลังจากฉันสิ้นสุดเซสชัน X ของฉันแล้ว

2
ฉันจะทำให้อีเทอร์เน็ตมีความสำคัญมากกว่า wifi บน Ubuntu 18.04 ได้อย่างไร
เป้าหมาย ให้อีเธอร์เน็ตมีความสำคัญเหนือกว่าแบบไร้สายเมื่อเสียบสายอีเธอร์เน็ต วิธี หลังจากทำ Googling ในปริมาณที่เหมาะสมแล้วการอ่านฉันมาถึงจุดที่ฉันเชื่อว่าสิ่งที่ฉันควรจะทำคือบางสิ่งตามแนวของ nmcli connection modify [id-of-ethernet-interface] ipv4.route-metric 200 nmcli connection modify [id-of-ethernet-interface] ipv6.route-metric 200 โดยที่ 200 คือค่าต่ำกว่าตัวชี้วัดไร้สายเพื่อให้อีเธอร์เน็ตมีความสำคัญเหนือกว่าแบบไร้สาย ผล สิ่งที่ทำให้ฉันสับสนคือรายงานที่ฉันได้รับroute -nหลังจากที่ฉันดำเนินการตามคำสั่งข้างต้นและรีบูตเครื่อง (สำหรับการวัดที่ดี) และความจริงที่ว่าสิ่งนี้ดูเหมือนจะไม่คุ้มค่าที่จะไปให้ถึงเป้าหมายของฉัน $ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 123.456.89.1 0.0.0.0 UG 600 0 0 wlp1s0 0.0.0.0 …

2
เทอร์มินัลคำสั่งเพื่อค้นหาว่าเซิร์ฟเวอร์นั้นเป็นเสมือนจริงหรือจริง
ฉันกำลังมองหาคำสั่งเทอร์มินัลซึ่งไม่ต้องการให้ผู้ใช้ที่ดำเนินการอยู่ในกลุ่ม sudoers และเป็นสากลและไม่ต้องการติดตั้งแพคเกจเพิ่มเติม จนถึงตอนนี้ฉันได้พบว่าหากระบบมีการติดตั้ง systemd ฉันสามารถใช้: $ hostnamectl status Static hostname: mint Icon name: computer-laptop Chassis: laptop Machine ID: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb Boot ID: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Operating System: Linux Mint LMDE Kernel: Linux 3.16.0-6-amd64 และภายใต้ชื่อไอคอนและแชสซีฉันสามารถดูว่าเป็น VM หรือเครื่องจริง แต่ฉันสงสัยว่าฉันสามารถใช้งานได้lscpuหรือไม่โดยเฉพาะอย่างยิ่งเนื่องจากเป็นวิธีที่เป็นสากลมากกว่าhostnamectlและไม่ต้องใช้ systemd ทฤษฎีของฉันคือถ้า CPU มีเพียงหนึ่งเธรดต่อหนึ่งคอร์และยังไม่ได้ระบุความถี่ซีพียูขั้นต่ำและสูงสุดนี่ก็เป็นการบ่งชี้ว่าเซิร์ฟเวอร์นั้นเป็นเวอร์ชวลไลเซชันแน่นอน $ lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little …

2
30% ของ RAM คือ“ บัฟเฟอร์” มันคืออะไร?
$ free -h total used free shared buff/cache available Mem: 501M 146M 19M 9.7M 335M 331M Swap: 1.0G 85M 938M $ free -w -h total used free shared buffers cache available Mem: 501M 146M 19M 9.7M 155M 180M 331M Swap: 1.0G 85M 938M ฉันจะอธิบายหรืออธิบาย "บัฟเฟอร์" ในผลลัพธ์ของได้freeอย่างไร ฉันไม่มีปัญหา (รู้) กับระบบนี้ ฉันประหลาดใจและอยากรู้อยากเห็นว่า …
13 linux  memory  cache 


3
คุณจะทราบได้อย่างไรว่าตัวแปรเชลล์ส่งออกหรือไม่
ด้วยตระกูลเชลล์ Bourne ตัวแปรเชลล์ทั้งหมดมีชื่อตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก ซึ่งหมายความว่าคุณไม่สามารถบอกได้ว่าตัวแปรเฉพาะเป็นตัวแปรสภาพแวดล้อมหรือไม่เพียงแค่ดูที่ชื่อ คุณจะทราบได้อย่างไรว่าตัวแปรเชลล์ของ Bourne นั้นเป็นแบบโลคัล (กำหนดภายในเชลล์ปัจจุบันเท่านั้น)
13 bash  shell 

7
เหตุใดฉันจึงได้รับ“ บรรทัด 1: $ ': \ r': ไม่พบคำสั่ง "
ฉันใช้ Cygwin บนแล็ปท็อปของฉัน (DOS) ฉันมีชุดของสคริปต์จากเพื่อนร่วมงานของฉันและของฉันเอง ฉันไม่ใช่คนไอทีไม่เก่งเรื่องยูนิกซ์ ฉันทำตามไวยากรณ์ของเพื่อนร่วมงานและสามารถจัดการสิ่งต่าง ๆ ได้ง่ายๆ สคริปต์ทำงานได้ดีบนแล็ปท็อปเครื่องเก่าของฉัน ฉันเพิ่งเปลี่ยนแล็ปท็อปติดตั้ง Cygwin เมื่อฉันเรียกใช้สคริปต์สคริปต์จะไม่ทำงาน นี่เป็นตัวอย่างข้อผิดพลาดที่ฉันได้รับ: line 1: $':\r': command not found line 5: syntax error near unexpected token `$'\r'' line 5: `fi นี่คือสคริปต์ 5 บรรทัดแรกของฉัน : iter=1 if [ -f iter.txt ] then rm ./iter.txt fi ใครช่วยกรุณาอธิบายว่าฉันจะแก้ไขปัญหานี้ได้อย่างไร?

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