GNU/Linux >> Linux Esercitazione >  >> Linux

Come rilevare se c'è un CD-ROM nell'unità?

Puoi ottenere informazioni su qualsiasi dispositivo a blocchi usando il comando blkid .

[[email protected] ~]# blkid /dev/sr0
/dev/sr0: UUID="2013-05-31-23-04-19-00" LABEL="ARCH_201306" TYPE="iso9660" PTTYPE="dos"
[[email protected] ~]# echo $?
0

Se rimuovo il disco, non ottengo alcun output e il valore di uscita è 2. (0 significa successo. Un valore diverso da zero in genere significa che è successo qualcosa di anomalo o che si è verificato un errore)

[[email protected] ~]# blkid /dev/sr0
[[email protected] ~]# echo $?
2

setcd -i (nel setcd pacchetto, almeno su Debian) può dirti lo stato del disco. A differenza di alcuni degli altri approcci (mount almeno, probabilmente anche blkid), questo non tenta di chiudere il vassoio , anche su unità in grado di farlo. (Il che è davvero fastidioso se cerca di chiudersi su di te mentre stai inserendo un disco).

Con il vassoio aperto:

$ setcd -i /dev/sr0
/dev/sr0:
  CD tray is open

Subito dopo aver chiuso il vassoio:

$ setcd -i /dev/sr0
/dev/sr0:
  Drive is not ready

Dopo che è pronto:

$ setcd -i /dev/sr0
/dev/sr0:
  Disc found in drive: data disc type 1
    Volume name: «name»
    Publisher:                                                                                                                                                                                                                                                                 MKISOFS ISO 9660/HFS FILESYSTEM BUILDER & CDRECORD CD-R/DVD CREATOR (C) 1993 E.YOUNGDALE (C) 1997 J.PEARSON/J.SCHILLING                                                                                                                        2005030913034700�2005030913034700�0000000000000000
    Data preparer:                                                                                                                                 MKISOFS ISO 9660/HFS FILESYSTEM BUILDER & CDRECORD CD-R/DVD CREATOR (C) 1993 E.YOUNGDALE (C) 1997 J.PEARSON/J.SCHILLING                                                                                                                        2005030913034700�2005030913034700�0000000000000000

Chiuso, ma nessun disco:

$ setcd -i /dev/sr0
/dev/sr0:
  No disc is inserted

Puoi scriverlo abbastanza facilmente:

while true; do
    cdinfo=$(setcd -i "$dev")
    case "$cdinfo" in
        *'Disc found'*)
            break;
            ;;
        *'not ready'*)
            echo '(waiting for drive to be ready)' >&2;
            sleep 3;
            ;;
        *'is open'*)
            echo '(drive is open)' >&2;
            sleep 5;
            ;;
        *)
            printf 'Confused by setcd -i, bailing out:\n%s\n' "$cdinfo" &2
            exit 1
    esac
done

Puoi fare quanto segue con Python3 e la libreria standard:

import fcntl
import os

CDROM_DRIVE = '/dev/sr0'

def detect_tray(CDROM_DRIVE):
    """detect_tray reads status of the CDROM_DRIVE.
    Statuses:
    1 = no disk in tray
    2 = tray open
    3 = reading tray
    4 = disk in tray
    """
    fd = os.open(CDROM_DRIVE, os.O_RDONLY | os.O_NONBLOCK)
    rv = fcntl.ioctl(fd, 0x5326)
    os.close(fd)
    print(rv)

Linux
  1. Come sostituire un disco rigido guasto nel software RAID Linux

  2. Come silenziare completamente un Cronjob in /dev/null/?

  3. Linux:cosa significa la lettera "u" in /dev/urandom?

  4. Come mappare il dispositivo /dev/sdX e /dev/mapper/mpathY dal dispositivo /dev/dm-Z

  5. Come codificare in base64 /dev/random o /dev/urandom?

Quanto sono portatili /dev/stdin, /dev/stdout e /dev/stderr?

Quando usare /dev/random vs /dev/urandom?

Come si scambia /dev/sda con /dev/sdb?

kernel:disabilitare /dev/kmem e /dev/mem

echo o print /dev/stdin /dev/stdout /dev/stderr

Perché sono necessari < o > per usare /dev/tcp