Unix & Linux

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

4
ความแตกต่างระหว่าง [0-9], [[: digit:]] และ \ d
ในบทความวิกิพีเดียนิพจน์ปกติมันก็ดูเหมือนว่า[[:digit:]]= = [0-9]\d สถานการณ์อะไรบ้างที่พวกเขาไม่เท่ากัน? อะไรคือความแตกต่าง? หลังจากการวิจัยบางอย่างฉันคิดว่าความแตกต่างอย่างหนึ่งคือการแสดงออกของวงเล็บปีกกา[:expr:]ขึ้นอยู่กับสถานที่

5
ฉันสามารถใช้พื้นที่ดิสก์หมดได้โดยสร้างไฟล์เปล่าจำนวนมากหรือไม่?
เป็นที่ทราบกันดีว่าไฟล์ข้อความว่างเปล่ามีศูนย์ไบต์: อย่างไรก็ตามแต่ละของพวกเขามีเมตาดาต้าซึ่งตามการวิจัยของฉันถูกเก็บไว้ในinodesและทำพื้นที่การใช้งาน รับนี้ดูเหมือนว่าฉันมีเหตุผลที่เป็นไปได้ที่จะเติมดิสก์โดยการสร้างไฟล์ข้อความที่ว่างเปล่า ถูกต้องหรือไม่ ถ้าเป็นเช่นนั้นฉันจะต้องเติมไฟล์เท็กซ์เปล่ากี่อันลงในดิสก์ของพูด 1GB? ในการตรวจสอบบางอย่างฉันเรียกใช้df -iแต่สิ่งนี้แสดงให้เห็นถึง% ของ inode ที่ใช้ (?) มากกว่าที่จะชั่งน้ำหนัก Filesystem Inodes IUsed IFree IUse% Mounted on udev 947470 556 946914 1% /dev tmpfs 952593 805 951788 1% /run /dev/sda2 28786688 667980 28118708 3% / tmpfs 952593 25 952568 1% /dev/shm tmpfs 952593 5 952588 1% /run/lock …

3
เหตุใดหมายเลขการโทรระบบ Linux ใน x86 และ x86_64 จึงแตกต่างกัน?
ฉันรู้ว่าส่วนต่อประสานการโทรของระบบมีการใช้งานในระดับต่ำและด้วยเหตุนี้ขึ้นอยู่กับสถาปัตยกรรม / แพลตฟอร์มไม่ใช่รหัส "ทั่วไป" แต่ฉันไม่สามารถเห็นได้อย่างชัดเจนว่าทำไมการเรียกระบบในเคอร์เนล x86 แบบ 32 บิตมีหมายเลขที่ไม่เหมือนกันในสถาปัตยกรรมที่คล้ายกัน Linux 64-bit x86_64 แรงจูงใจ / เหตุผลเบื้องหลังการตัดสินใจนี้คืออะไร? การเดาครั้งแรกของฉันคือเหตุผลเบื้องหลังที่ทำให้แอปพลิเคชันแบบ 32 บิตสามารถทำงานได้บนระบบ x86_64 ดังนั้นการชดเชยออฟเซตที่เหมาะสมกับหมายเลขการโทรของระบบระบบจะรู้ว่าพื้นที่ผู้ใช้เป็น 32 บิตหรือ 64 บิต ตามลำดับ อย่างไรก็ตามนี่ไม่ใช่กรณี อย่างน้อยก็สำหรับฉันที่ read () เป็นสายระบบ 0 ใน x86_64 ไม่สามารถปรับให้เข้ากับความคิดนี้ อีกข้อหนึ่งคือการเปลี่ยนหมายเลขโทรศัพท์ของระบบอาจมีพื้นหลังด้านความปลอดภัย / แข็งตัวซึ่งเป็นสิ่งที่ฉันไม่สามารถยืนยันตัวเองได้ ด้วยความไม่รู้ถึงความท้าทายของการใช้งานส่วนของโค้ดที่ขึ้นอยู่กับสถาปัตยกรรมฉันยังสงสัยว่าการเปลี่ยนหมายเลขการโทรของระบบเมื่อดูเหมือนว่าไม่จำเป็น (เพราะแม้แต่การลงทะเบียนแบบ 16 บิตจะเก็บไว้มากกว่านั้นในปัจจุบัน ~ 346 การเรียกใช้) จะช่วยให้บรรลุผลทุกอย่างนอกเหนือจากความเข้ากันได้ของการแบ่ง (แม้ว่าการใช้การเรียกของระบบผ่านทางไลบรารี libc จะช่วยลดความมัน)

4
ฉันสามารถป้องกัน“ สถานะบริการ foo” ไม่ให้เพจจิ้งเอาต์พุตผ่าน "น้อยลง" ได้หรือไม่
คุณจะหยุดคำสั่งservice <name> statusจากการใช้lessในการส่งออกได้อย่างไร ฉันมีสคริปต์ที่ดำเนินการดูแลระบบบางอย่างโดยอัตโนมัติและหลังจากฉันอัพเกรดเซิร์ฟเวอร์ของฉันเป็น Ubuntu 16.04 แล้วมันก็พังเพราะการกระทำที่ตรวจสอบสถานะบริการกำลังปิดกั้นเพราะใช้สิ่งที่ต้องการlessแสดงผลลัพธ์โดยเฉพาะsupervisorบริการ ฉันมี daemons หลายตัวที่กำหนดค่าให้ทำงานและเมื่อทำงานsudo service supervisor statusฉันจะได้รับ: * supervisor.service - Supervisor process control system for UNIX Loaded: loaded (/lib/systemd/system/supervisor.service; disabled; vendor preset: enabled) Active: active (running) since Mon 2017-02-06 20:35:34 EST; 12h ago Docs: http://supervisord.org Process: 18476 ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown (code=exited, status=0/SUCCESS) Main PID: …
35 systemd  services 

1
ข้อความแสดงข้อผิดพลาด“ วันที่: วันที่ไม่ถูกต้อง” 2016-10-16 '”
วันนี้นาฬิกาของฉันถูกปรับเป็นฤดูร้อนโดยอัตโนมัติและสคริปต์จาก crontab เริ่มต้นล้มเหลว ฉันได้ดูสิ่งที่เกิดขึ้นและข้อผิดพลาดต่อไปนี้จะถูกแสดงด้วยLC_ALL=C: วันที่: วันที่ไม่ถูกต้อง '2016-10-16' ฉันว่ามันจะเป็นการดีที่สุดเพียงแค่รีบูตระบบ แต่ตอนนี้ฉันได้รีบูตและข้อผิดพลาดยังคงปรากฏขึ้น: $ date -d '2016-10-15' Sat Oct 15 00:00:00 BRT 2016 $ date -d '2016-10-16' date: data inválida “2016-10-16” $ date -d '2016-10-17' Mon Oct 17 00:00:00 BRST 2016 สิ่งใดที่ทำให้เกิดสิ่งนี้
35 date  timezone 

4
ฉันจะทำให้ rsync ช้าลงได้อย่างไร
ฉันกำลังพยายามคัดลอกเนื้อหาของธัมบ์ไดรฟ์ USB ที่ล้มเหลว ถ้าฉันอ่านข้อมูลเร็วเกินไปชิปคอนโทรลเลอร์ของไดรฟ์ร้อนเกินไปและไดรฟ์หายไปจากระบบ เมื่อเกิดเหตุการณ์นี้ขึ้นฉันต้องถอดปลั๊กไดรฟ์รอสักครู่เพื่อให้มันเย็นลงแล้วเสียบกลับเข้าไปใหม่และเริ่มการคัดลอกใหม่ ฉันได้รับการสำรองข้อมูลเก่าของเนื้อหาของไดรฟ์ดังนั้นวิธีที่ชัดเจนในการรับข้อมูลส่วนที่เหลือคือใช้rsyncเพื่อทำให้การสำรองข้อมูลเป็นปัจจุบัน แต่การทำงานทั้งหมด "อ่านเร็วเกินไปไดรฟ์จะหายไป และฉันต้องเริ่มต้นใหม่ "ปัญหา มีวิธีบอกrsyncให้อ่านข้อมูลเพียง X เมกะไบต์ต่อนาทีหรือไม่? หรือเป็นไปได้ที่จะบอกให้ระงับการทำงานเมื่อไดรฟ์หายไปและกลับมาทำงานอีกครั้งเมื่อเสียบกลับเข้าไปใหม่
35 rsync 

9
คอมพิวเตอร์ขนาดใหญ่ที่เชื่อมต่อกับเทอร์มินัลจริงมีลักษณะอย่างไร
ฉันกำลังศึกษาประวัติของคอมพิวเตอร์เพื่อทำความเข้าใจว่าทำไมเทอร์มินัล Linux ทำงานอย่างไร ฉันได้อ่านว่าในช่วงกลางปี ​​1970 ถึงกลางปี ​​1980 คนส่วนใหญ่ใช้เทอร์มินัลจริง (ซึ่งต่างจากเทอร์มินัลอีมูเลเตอร์) เพื่อสื่อสารกับคอมพิวเตอร์ขนาดใหญ่นี่เป็นตัวอย่างของเทอร์มินัลจริง: แต่ฉันไม่สามารถค้นหาข้อมูลเกี่ยวกับคอมพิวเตอร์ขนาดใหญ่เหล่านี้ที่เชื่อมต่อกับเทอร์มินัลจริง ใครสามารถให้ชื่อ / รูปภาพของคอมพิวเตอร์ขนาดใหญ่เช่นนั้นได้หรือไม่?
35 terminal  history 

5
วิธีการอ่านเชลล์สคริปต์ทั้งหมดก่อนที่จะรันมัน?
โดยปกติหากคุณแก้ไขการเจาะลึกการใช้สคริปต์ที่ทำงานอยู่ทั้งหมดมักจะเกิดข้อผิดพลาด เท่าที่ฉันเข้าใจทุบตี (กระสุนอื่น ๆ ด้วย?) อ่านสคริปต์เพิ่มขึ้นดังนั้นถ้าคุณแก้ไขไฟล์สคริปต์ภายนอกมันเริ่มอ่านสิ่งผิดปกติ มีวิธีป้องกันไหม? ตัวอย่าง: sleep 20 echo test หากคุณรันสคริปต์นี้ทุบตีจะอ่านบรรทัดแรก (พูด 10 ไบต์) และไปที่โหมดสลีป เมื่อดำเนินการต่ออาจมีเนื้อหาต่าง ๆ ในสคริปต์เริ่มต้นที่ 10 ไบต์ ฉันอาจจะอยู่ตรงกลางบรรทัดในสคริปต์ใหม่ ดังนั้นสคริปต์ที่ใช้งานจะเสียหาย
35 shell 

5
ฉันจะแบ่งไฟล์เสียงเป็นหลายไฟล์ได้อย่างไร
ฉันพบบางอย่างสำหรับวิดีโอซึ่งมีลักษณะเช่นนี้ ffmpeg -i * -c:v libx264 -crf 22 -map 0 -segment_time 1 -g 1 -sc_threshold 0 -force_key_frames "expr:gte(t,n_forced*9)" -f segment output%03d.mp4 ฉันพยายามใช้ไฟล์เสียงนั้น แต่ไฟล์เสียงแรกเท่านั้นที่มีไฟล์เสียงจริงไฟล์อื่น ๆ เงียบกว่านั้นดีมากมันสร้างไฟล์เสียงใหม่ทุกวินาที ไม่มีใครรู้ว่าสิ่งที่จะแก้ไขเพื่อให้งานนี้กับไฟล์เสียงหรือคำสั่งอื่นที่สามารถทำเช่นเดียวกัน?
35 audio  ffmpeg 

6
วิธีที่ปลอดภัยที่สุดสำหรับการเขียนทางโปรแกรมไปยังไฟล์ที่มีสิทธิ์รูทคืออะไร
แอปพลิเคชันขนาดใหญ่ต้องการในเวลาหนึ่งเพื่อทำการเขียนจำนวนเล็กน้อยไปยังไฟล์ที่ต้องการการอนุญาตรูต มันไม่ได้เป็นไฟล์จริงๆ แต่เป็นส่วนต่อประสานฮาร์ดแวร์ที่สัมผัสกับลีนุกซ์เป็นไฟล์ เพื่อหลีกเลี่ยงการให้สิทธิ์รูทแก่แอปพลิเคชันทั้งหมดฉันเขียนสคริปต์ทุบตีซึ่งทำหน้าที่สำคัญ ตัวอย่างเช่นสคริปต์ต่อไปนี้จะเปิดใช้งานพอร์ต 17 ของอินเตอร์เฟสฮาร์ดแวร์เป็นเอาต์พุต: echo "17" > /sys/class/gpio/export echo "out" > /sys/class/gpio/gpio17/direction อย่างไรก็ตามตามที่suidถูกปิดการใช้งานสำหรับสคริปต์ทุบตีในระบบของฉันฉันสงสัยว่าอะไรคือวิธีที่ดีที่สุดในการบรรลุเป้าหมาย ใช้วิธีแก้ปัญหาที่แสดงไว้ที่นี่ เรียกใช้สคริปต์ด้วยsudoจากแอปพลิเคชันหลักและแก้ไขรายการ sudoers ตามเพื่อหลีกเลี่ยงการต้องใช้รหัสผ่านเมื่อเรียกใช้สคริปต์ ฉันเล็กน้อยอึดอัดที่จะให้สิทธิ์ sudo echoไป เพียงแค่เขียนโปรแกรม C ด้วยfprintfและตั้งเป็น suid root ฮาร์ดโค้ดสตริงและชื่อไฟล์และตรวจสอบให้แน่ใจว่าเฉพาะ root เท่านั้นที่สามารถแก้ไขได้ หรืออ่านสตริงจากไฟล์ข้อความเช่นเดียวกันตรวจสอบให้แน่ใจว่าไม่มีใครสามารถแก้ไขไฟล์ได้ วิธีแก้ปัญหาอื่นที่ไม่ได้เกิดขึ้นกับฉันและปลอดภัยกว่าหรือง่ายกว่านั้นคือวิธีที่นำเสนอข้างต้น

10
มีวิธีที่สะดวกในการจัดประเภทไฟล์เป็น "binary" หรือ "text" หรือไม่?
ยูทิลิตี้ Unix มาตรฐานต้องการgrepและdiffใช้ฮิวริสติกบางอย่างเพื่อจัดประเภทไฟล์เป็น "text" หรือ "binary" ( grepเอาต์พุตของEg อาจมีบรรทัดที่เหมือนBinary file frobozz matchesกัน) มีการทดสอบที่สะดวกที่สามารถนำไปใช้ในzshสคริปต์เพื่อดำเนินการจัดหมวดหมู่ "ข้อความ / ไบนารี" ที่คล้ายกัน? (นอกเหนือจากที่ต้องการgrep '' somefile | grep -q Binary) (ฉันตระหนักว่าการทดสอบใด ๆ เช่นนั้นจำเป็นต้องเป็นแบบฮิวริสติกและไม่สมบูรณ์ดังนั้น)
35 files  text 

4
uniq ไม่แตกต่างกันมากพอที่จะมี uniq --unique อย่างไร
นี่คือคำสั่งในไฟล์สุ่มจากpastebin : wget -qO - http://pastebin.com/0cSPs9LR | wc -l 350 wget -qO - http://pastebin.com/0cSPs9LR | sort -u | wc -l 287 wget -qO - http://pastebin.com/0cSPs9LR | sort | uniq | wc -l 287 wget -qO - http://pastebin.com/0cSPs9LR | sort | uniq -u | wc -l 258 หน้าคนไม่ชัดเจนในสิ่งที่-uธงทำ คำแนะนำใด ๆ?
35 uniq 

2
วิธีเปลี่ยนชื่อโฮสต์อย่างถาวรใน Fedora 21
ฉันได้ยินมาว่าการเปลี่ยนชื่อโฮสต์ใน fedora เวอร์ชันใหม่นั้นทำได้ด้วยhostnamectlคำสั่ง นอกจากนี้ฉันเมื่อเร็ว ๆ นี้ (และสำเร็จ) เปลี่ยนชื่อโฮสต์ของฉันบน Arch Linux ด้วยวิธีนี้ อย่างไรก็ตามเมื่อทำงาน: [root@localhost ~]# hostnamectl set-hostname --static paragon.localdomain [root@localhost ~]# hostnamectl set-hostname --transient paragon.localdomain [root@localhost ~]# hostnamectl set-hostname --pretty paragon.localdomain การเปลี่ยนแปลงจะไม่ถูกเก็บรักษาไว้หลังจากรีบูต (ตรงกันข้ามกับการเรียกร้องของคนจำนวนมากที่ทำ) เกิดอะไรขึ้น? ฉันจริงๆไม่ต้องการที่จะแก้ไข/etc/hostnameด้วยตนเอง ฉันยังควรทราบว่านี้เป็นสมบูรณ์ฟางหุ้น ฉันยังไม่ได้ติดตั้งแอพหลักของฉันเลย
35 fedora  hostname 

1
ทำไม crontabs ถึงไม่ถูกจัดเก็บในโฮมไดเร็กตอรี่ของผู้ใช้?
ฉันอยากรู้ว่าเหตุใด crontabs จึงถูกจัดเก็บใน / var แทนที่จะอยู่ในโฮมไดเรกทอรีของผู้ใช้ มันทำให้ความเจ็บปวดโดยรวมในการแยกไฟล์เหล่านี้สำหรับการอัพเกรด แต่ฉันสงสัยว่ามีเหตุผลเชิงตรรกะ ...


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