Unix & Linux

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

2
โครงสร้างข้อมูลของ $ @ ในเชลล์คืออะไร?
เรามักจะใช้$@เพื่อเป็นตัวแทนของการโต้แย้งทั้งหมดยกเว้น $ 0 อย่างไรก็ตามฉันไม่รู้ว่าโครงสร้างข้อมูล$@คืออะไร ทำไมมันมีพฤติกรรมแตกต่างกัน$*เมื่อรวมอยู่ในเครื่องหมายคำพูดคู่ใครสามารถให้คำอธิบายระดับล่ามให้ฉันได้หรือไม่ มันสามารถวนซ้ำในห่วงดังนั้นดูเหมือนว่าจะเป็นอาร์เรย์ อย่างไรก็ตามมันยังสามารถสะท้อนได้อย่างง่ายดายecho $@ถ้าเป็นอาร์เรย์จะมีเพียงองค์ประกอบแรกเท่านั้นที่แสดง เนื่องจากข้อ จำกัด ของเชลล์ฉันไม่สามารถเขียนโค้ดการทดสอบเพิ่มเติมเพื่อดำเนินการได้ ความแตกต่างระหว่างโพสต์นี้ : โพสต์นี้แสดงให้เห็นว่า$@พฤติกรรมแตกต่างจาก$*อย่างไร $@แต่ฉันสงสัยเกี่ยวกับชนิดข้อมูลของ เชลล์ในฐานะภาษาตีความเช่น Python ควรแสดงข้อมูลตามชุดของประเภทพื้นฐาน หรือกล่าวอีกนัยหนึ่งฉันต้องการทราบว่า $ @ เก็บไว้ในหน่วยความจำคอมพิวเตอร์อย่างไร มันเป็นสตริงสตริงหลายบรรทัดหรืออาร์เรย์หรือไม่? หากเป็นชนิดข้อมูลที่ไม่ซ้ำใครเป็นไปได้ไหมที่จะกำหนดตัวแปรที่กำหนดเองเป็นตัวอย่างของประเภทนี้
13 bash  shell 

3
และรายงานไดเรกทอรีที่ว่างเปล่าอย่างผิด ๆ
ฉันกำลังใช้คำสั่งเหล่านี้: du -sh --apparent-size ./* du -sh ./* ทั้งการรายงาน: 4.0K ./Lightroom_catalog_from_win_backup 432M ./Lightroom catalog - wine_backup ในขณะที่ไดเรกทอรีเหล่านั้นประกอบด้วย: $ll ./"Lightroom catalog - wine_backup" total 432M -rwxrwx--- 1 gigi gigi 432M Mar 18 2018 Lightroom 5 Catalog Linux.lrcat -rwxrwx--- 1 gigi gigi 227 Nov 21 2015 zbackup.bat $ll ./Lightroom_catalog_from_win_backup total 396M -rwxrwx--- …
13 disk-usage 

1
แนวทางปฏิบัติที่ดีที่สุดเพื่อดำเนินการต่อ mv
ฉันใช้เทอร์มินัลเพื่อคัดลอกไฟล์จากไดรฟ์หนึ่งไปยังอีกไดรฟ์ sudo mv -vi /location/to/drive1/ /location/to/drive2/ อย่างไรก็ตามที่หยุดทันทีในขณะที่บางชั่วโมงในนั้นและไม่มีข้อผิดพลาดหลังจากสร้างไดเรกทอรี โซลูชันของฉันเองที่มักจะเป็นการผสมผสานระหว่างการแฮ็กและการเปรียบเทียบซึ่งส่วนใหญ่เป็นเวลาที่ยุ่งเหยิงเพราะตอนนี้ฉันต้องกู้คืนจากการทำสำเนากลางโดยไม่ทราบว่าไฟล์ใดหายไป (เขียนด้วยความยาวหนึ่งบรรทัดสำหรับ zsh สคริปต์นี้ใช้ไม่ได้กับการทุบตีตามที่เขียนไว้): source_directory="/path/to/source_directory/"; target_directory="/path/to/target_directory/"; while read hash_and_file; do { echo "${hash_and_file}" | read hash file; echo "${file}" | sed "s/^/${source_directory}/g" | read copy_from; echo "${copy_from}" | sed "s/${source_directory}/${target_directory}/g" | read copy_to; mv -v "${copy_from}" "${copy_to}" | tee -a log; rm -v …
13 data-recovery  mv 

3
การขยายตัวแปรอัตโนมัติภายในคำสั่ง bash [[]]
เมื่อพิจารณาตัวแปรในbashคุณต้องใช้$เครื่องหมาย อย่างไรก็ตามดูเหมือนว่าสิ่งต่อไปนี้ใช้ได้ดี: x=5 [[ x -gt 2 ]] ใครสามารถอธิบายสิ่งนี้ได้บ้าง แก้ไข: (ข้อมูลเพิ่มเติม) สิ่งที่ฉันหมายถึงคืออะไรและทำไมคำสั่ง [[]] ถึงการยกเลิกตัวแปร x ของฉันโดยไม่มีเครื่องหมาย $ และใช่ถ้า x = 1 คำสั่งจะถูกประเมินเป็นเท็จ (สถานะส่งคืน 1)

2
dd จะ = = / dev / ศูนย์ของ = / dev / sda ล้างตารางพาร์ติชันที่มีอยู่แล้วหรือไม่
จะ# dd if=/dev/zero of=/dev/sdaล้างตารางพาร์ติชันที่มีอยู่แล้วหรือไม่ หรือเป็นวิธีอื่น ๆ เช่นทำ # fdisk /dev/sda g (สำหรับ GPT) ล้างเลขศูนย์ที่เขียนโดย/dev/zero?
13 linux  dd  fdisk  gpt 

2
บันทึกเวลาของไฟล์ที่คัดลอกไปยังไดรฟ์ USB
ฉันมีปัญหากับการประทับเวลาของไฟล์ที่คัดลอกจากพีซีหรือแล็ปท็อปไปยังไดรฟ์ USB: เวลาแก้ไขครั้งล่าสุดของไฟล์ต้นฉบับและของไฟล์ที่คัดลอกมานั้นแตกต่างกัน ดังนั้นการซิงโครไนซ์ไฟล์ระหว่างพีซีของฉันและไดรฟ์ USB ค่อนข้างยุ่งยาก คำอธิบายทีละขั้นตอน ฉันคัดลอกไฟล์โดยพลการจากพีซี / แล็ปท็อปไปยังไดรฟ์ USB โดยใช้ GUI หรือด้วยคำสั่ง cp -a file.txt /media/gabor/CORSAIR/ ฉันจะตรวจสอบเวลาการแก้ไขครั้งล่าสุดของไฟล์ต้นฉบับ: $ ls -l --time-style=full-iso file.txt -rw-rw-r-- 1 gabor gabor 0 2018-09-22 15:09:23.317098281 +0200 file.txt ฉันจะตรวจสอบเวลาการแก้ไขครั้งล่าสุดของไฟล์ที่คัดลอก: $ ls -l --time-style=full-iso /media/gabor/CORSAIR/file.txt -rw-r--r-- 1 gabor gabor 0 2018-09-22 15:09:23.000000000 +0200 /media/gabor/CORSAIR/file.txt อย่างที่คุณเห็นวินาทีในช่วงเวลาการแก้ไขครั้งล่าสุดของไฟล์ที่คัดลอกจะถูกตัดให้เหลือศูนย์ทศนิยม อย่างไรก็ตามถ้าฉันป้อนคำสั่ง …

2
การเปลี่ยนชื่อไฟล์. deb นั้นปลอดภัยหรือไม่
โครงสร้างการจัดตั้งของชื่อไฟล์.deb ตามวรรคนี้package_version_architecture.deb package_version_architecture.debแพคเกจบางคนไม่ทำตามโครงสร้างชื่อ แพ็คเกจที่เปลี่ยนชื่อโดย dpkg-name จะเป็นไปตามโครงสร้างนี้ โดยทั่วไปจะไม่มีผลกระทบต่อวิธีการติดตั้งแพ็กเกจโดย dselect / dpkg แต่เครื่องมือการติดตั้งอื่น ๆ อาจขึ้นอยู่กับโครงสร้างการตั้งชื่อนี้ คำถาม: อย่างไรก็ตามจะมีสถานการณ์จริงใด ๆ เมื่อเปลี่ยนชื่อ.debแฟ้มแพคเกจเป็นอย่างสูงที่ยกเลิกแนะนำ? เป็นเรื่องปกติหรือไม่ที่จะให้.debชื่อไฟล์ที่กำหนดเองสำหรับซอฟต์แวร์ของฉัน ตัวอย่าง: My Program for Linux v1.0.0 (Pro).deb - การตั้งชื่อที่กำหนดเอง my-program_1.0.0-1_amd64.deb - การตั้งชื่ออย่างเป็นทางการที่เหมาะสม บันทึก: ฉันไม่ได้วางแผนที่จะสร้าง repo ฉันแค่โฮสติ้ง.debแพคเกจซอฟต์แวร์บนเว็บไซต์เพื่อดาวน์โหลดโดยตรง
13 debian  ubuntu  packaging  deb 

1
apt package manager บน Debian แสดงรายการแพ็กเกจที่สามารถอัพเกรดได้ แต่ไม่อัพเกรด
ปัญหานี้คล้ายกับDebian Linux ที่ไม่ได้อัปเดตแพ็คเกจแต่ในกรณีของฉันแพ็คเกจใหม่ไม่ได้มาจากbackports: § apt list --upgradable Listing... Done firefox-esr-l10n-en-gb/stable 60.2.0esr-1~deb9u2 all [upgradable from: 52.9.0esr-1~deb9u1] N: There is 1 additional version. Please use the '-a' switch to see it § sudo apt upgrade Reading package lists... Done Building dependency tree Reading state information... Done Calculating upgrade... Done 0 upgraded, 0 …
13 debian  apt  upgrade  firefox 

2
ลบ yum.conf โดยไม่ได้ตั้งใจ
ผมไม่ทราบว่าสิ่งที่ผมพยายามจะทำ yum.confแต่ฉันเป็นพื้นลบ ฉันพบการกำหนดค่าแบบเก่าสำหรับ yum บน github แต่ก็ยังใช้งานไม่ได้ ฉันจะทำอย่างไร ฉันใช้ Centos 7
13 centos  yum 


1
ทำไมฉันไม่สามารถผูก“ /” ในเนมสเปซของผู้ใช้ไม่ได้
ทำไมมันไม่ทำงาน $ unshare -rm mount --bind / /mnt mount: /mnt: wrong fs type, bad option, bad superblock on /, missing codepage or helper program, or other error. งานเหล่านี้ตกลง: $ unshare -rm mount --bind /tmp /mnt $ unshare -rm mount --bind /root /mnt $ $ uname -r # Linux kernel version …

3
วิธีตัดไฟล์ให้มีจำนวนอักขระสูงสุด (ไม่ใช่ไบต์)
ฉันจะตัดทอนไฟล์ข้อความ (UTF-8 ที่เข้ารหัส) เป็นจำนวนอักขระได้อย่างไร ฉันไม่สนใจความยาวของเส้นและการตัดอาจอยู่ตรงกลางคำ cut ดูเหมือนว่าจะทำงานบนบรรทัด แต่ฉันต้องการไฟล์ทั้งหมด head -c ใช้ไบต์ไม่ใช่ตัวอักษร

4
เป็นไปได้ไหมที่จะพิมพ์เนื้อหาของเนื้อหาของตัวแปรด้วย shell script? (การอ้างอิงทางอ้อม)
สมมุติว่าฉันประกาศตัวแปรต่อไปนี้แล้ว: $ var='$test' $ test="my string" หากฉันพิมพ์เนื้อหาของพวกเขาฉันเห็นดังต่อไปนี้: $ echo $var $test $ echo $test my string ฉันต้องการหาวิธีพิมพ์เนื้อหาของเนื้อหาของ$var(ซึ่งเป็นเนื้อหาของ$test) ดังนั้นฉันจึงพยายามทำสิ่งต่อไปนี้: $ echo $(echo $var) $test แต่นี่คือผลลัพธ์$testและไม่ใช่"my string"... เป็นไปได้หรือไม่ที่จะพิมพ์เนื้อหาของตัวแปรโดยใช้ bash?

3
ทำไมต้องตรวจสอบว่าไฟล์นั้นมีอยู่จริงก่อนที่จะทำการจัดหา?
เมื่อพยายามแหล่งที่มาของไฟล์คุณจะไม่ต้องการให้เกิดข้อผิดพลาดในการบอกว่าไฟล์ไม่มีอยู่เพื่อให้คุณรู้ว่าจะแก้ไขอย่างไร ตัวอย่างเช่นnvmแนะนำให้เพิ่มสิ่งนี้ลงในโปรไฟล์ / rc ของคุณ: export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm หากnvm.shไม่มีตัวเลือกข้างต้นคุณจะได้รับ "ข้อผิดพลาดเงียบ" แต่ถ้าคุณลองเอาท์พุทจะเป็น. "$NVM_DIR/nvm.sh"FILE_PATH: No such file or directory

3
ทำไม "ps axe" ไม่พบสคริปต์ทุบตีที่รันอยู่โดยไม่มี“ #!” หัวข้อ?
เมื่อฉันเรียกใช้สคริปต์นี้ตั้งใจให้ทำงานจนกว่าจะฆ่า ... # foo.sh while true; do sleep 1; done ... ฉันไม่สามารถหาได้โดยใช้ps ax: >./foo.sh // In a separate shell: >ps ax | grep foo.sh 21110 pts/3 S+ 0:00 grep --color=auto foo.sh ... แต่ถ้าฉันเพิ่งเพิ่ม#!ส่วนหัว " " ทั่วไปลงในสคริปต์ ... #! /usr/bin/bash # foo.sh while true; do sleep 1; done ... จากนั้นสคริปต์จะสามารถค้นหาได้โดยpsคำสั่งเดียวกัน... >./foo.sh …

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