Comandos do Linux e Unix: Sistema; Processos; Sistema de Arquivos; Rede; SSH SCP; VPN com SSH; RSYNC; SUDO; Arquivos Encriptados; Partições Encriptadas; Certificados SSL; CVS; SVN; Comando Úteis; Instalar Software; Converter Mídia; Impressão; Banco de Dados; Quota de Disco; Shells; Scripting; Programação

Sistema de arquivos Linux

Permissões

Altere permissão e proprietário com o chmod e chown. O umask padrão pode ser alterado para todos os usuários em /etc/profile para Linux ou /etc/login.conf para FreeBSD. O umask padrão é normalmente 022. O umask é subtraído a partir do 777, assim o umask 022 resulta em uma permissão de 755.

1 --x execute                        # Mode 764 = exec/read/write | read/write | read
    2 -w- write                          # For:       |--  Owner  --|   |- Group-|   |Oth|
    4 r-- read
      ugo=a                              u=user, g=group, o=others, a=everyone
# chmod [OPTION] MODE[,MODE] FILE    # MODE é da forma [ugoa]*([-+=]([rwxXst]))
# chmod 640 /var/log/maillog         # Restrito ao log -rw-r-----
# chmod u=rw,g=r,o= /var/log/maillog # O mesmo que acima
# chmod -R o-r /home/*               # Remove recursivamente outros legíveis para todos os usuários
# chmod u+s /path/to/prog            # Configura o SUID bit no executável (Saiba o que fazer!)
# find / -perm -u+s -print           # Encontra todos os programas com o SUID bit
# chown user:group /path/to/file     # Altera o usuário e proprietário do grupo de um arquivo
# chgrp group /path/to/file          # Altera o proprietário de um grupo de um arquivo
# chmod 640 `find ./ -type f -print` # Altera as permissões para 640 para todos os arquivos
# chmod 751 `find ./ -type d -print` # Altera as permissões para 751 para todos os diretórios

Informações de disco

# diskinfo -v /dev/ad2               # informações a respeito do disco (sector/size) FreeBSD
# hdparm -I /dev/sda                 # informação a respeito do disco IDE/ATA (Linux)
# fdisk /dev/ad2                     # Exibe e manipula a tabela de partição
# smartctl -a /dev/ad2               # Exibe a informação disk SMART

Boot

FreeBSD

Para iniciar (boot) um kernel antigo se o novo não iniciar, pare o boot durante a contagem regressiva.

# unload
# load kernel.old
# boot

Pontos de montagem do sistema/Uso de disco

# mount | column -t                  # Mostra o sistemas de arquivos montados no sistema
# df                                 # Exibe espaço livre de disco e dispositivos montados
# cat /proc/partitions               # Mostra todas as partições registradas (Linux)

Uso de disco

# du -sh *                           # Tamanhos de diretórios como listado
# du -csh                            # Tamanho total do diretório atual
# du -ks * | sort -n -r              # Classifica tudo por tamanho em kilobytes
# ls -lSr                            # Mostra arquivos, maiores por ultimo

Quem tem quais arquivos abertos

Isso é útil para descobrir qual arquivo está bloqueando uma partição que tem que ser desmontada e dá um típico erro de:

# umount /home/
    umount: unmount of /home             # umount impossible because a file is locking home (impossível desmontar por que um arquivo está travando o home)
       failed: Device busy (falhou: dispositivo ocupado)

FreeBSD e muitos Unixes

# fstat -f /home                     # para um ponto de montagem
# fstat -p PID                       # para uma aplicação com o PID
# fstat -u user                      # para um name

Encontre arquivo de log aberto (ou outros arquivos abertos), diga para o Xorg:

# ps ax | grep Xorg | awk '{print $1}'
    1252
    # fstat -p 1252
    USER     CMD          PID   FD MOUNT      INUM MODE         SZ|DV R/W
    root     Xorg        1252 root /             2 drwxr-xr-x     512  r
    root     Xorg        1252 text /usr     216016 -rws--x--x  1679848 r
    root     Xorg        1252    0 /var     212042 -rw-r--r--   56987  w

O arquivo com o inum 212042 é o único arquivo em /var:

# find -x /var -inum 212042
    /var/log/Xorg.0.log

Linux

Encontre arquivos abertos em um ponto de montagem com fuser ou lsof:

# fuser -m /home        # Lista processos acessando /home
# lsof /home
 COMMAND   PID    USER   FD   TYPE DEVICE    SIZE     NODE NAME
 tcsh    29029 eedcoba  cwd    DIR   0,18   12288  1048587 /home/eedcoba (guam:/home)
 lsof    29140 eedcoba  cwd    DIR   0,18   12288  1048587 /home/eedcoba (guam:/home)

Sobre uma aplicação:

ps ax | grep Xorg | awk '{print $1}'
    3324
    # lsof -p 3324
    COMMAND   PID    USER   FD   TYPE DEVICE    SIZE    NODE NAME
    Xorg    3324 root    0w   REG        8,6   56296      12492 /var/log/Xorg.0.log

Sobre um único arquivo:

# lsof /var/log/Xorg.0.log
    COMMAND  PID USER   FD   TYPE DEVICE  SIZE  NODE NAME
    Xorg    3324 root    0w   REG    8,6 56296 12492 /var/log/Xorg.0.log

Monta/remonta um sistema de arquivo

Por exemplo o cdrom. Se listado em /etc/fstab:

# mount /cdrom

Ou encontre o dispositivo em /dev/ ou com o dmesg

FreeBSD

# mount -v -t cd9660 /dev/cd0c /mnt  # cdrom
# mount_cd9660 /dev/wcd0c /cdrom     # outro método
# mount -v -t msdos /dev/fd0c /mnt   # floppy

Entrada em /etc/fstab:

# Device                Mountpoint      FStype  Options         Dump    Pass#
    /dev/acd0               /cdrom          cd9660  ro,noauto       0       0

Para deixar os usuários fazerem isso:

# sysctl vfs.usermount=1  # Ou insira a linha "vfs.usermount=1" in /etc/sysctl.conf

Linux

# mount -t auto /dev/cdrom /mnt/cdrom   # comando mount típico do para cdrom
# mount /dev/hdc -t iso9660 -r /cdrom   # IDE típico
# mount /dev/scd0 -t iso9660 -r /cdrom  # cdrom SCSI típico
# mount /dev/sdc0 -t ntfs-3g /windows   # SCSI típico

Entrada em /etc/fstab:

/dev/cdrom   /media/cdrom  subfs noauto,fs=cdfss,ro,procuid,nosuid,nodev,exec 0 0

Montar uma partição FreeBSD com o Linux

Encontre o número da partição com o fdisk, essa é normalmente a partição root, mas pode ser uma outra outra fatia de BSD também. Se o FreeBSD tiver muitas fatias, elas são as não listadas na tabela do fdisk, mas visíveis em /dev/sda* ou /dev/hda*.

# fdisk /dev/sda                     # Encontre a partição FreeBSD
    /dev/sda3   *        5357        7905    20474842+  a5  FreeBSD
    # mount -t ufs -o ufstype=ufs2,ro /dev/sda3 /mnt
    /dev/sda10 = /tmp; /dev/sda11 /usr   # As outras fatias

Remontar

Remontar um dispositivo sem remontá-lo. Necessário para o fsck

# mount -o remount,ro /              # Linux
# mount -o ro -u /                   # FreeBSD

Cópiar o arquivo bruto a partir de um cdrom dentro de uma imagem ISO (tamanho de blocos padrão de 512 podem causar problemas):

# dd if=/dev/cd0c of=file.iso bs=2048

Virtualbox

Permite um compartilhamento no host:

# VBoxManage sharedfolder add "GuestName" --name "share" --hostpath "C:\hostshare"

Montar compartilhamento no guest (convidado) (linux, FreeBSD)

# sudo mount -t vboxsf share /home/vboxshare # -o uid=1000,gid=1000 (as appropriate)
    share /home/colin/share vboxsf defaults,uid=colin 0 0 # fstab entry

OSX

# diskutil list                      # Lista as partições de um disco
# diskutil unmountDisk /dev/disk1    # Desmonta um disco inteiro (todos os volumes)
# chflags hidden ~/Documents/folder  # Enconde pastas (diretórios) (reverta com o unhidden)

Adicionar swap com o sistema em pleno uso (on-the-fly)

Suponhamos que você precise de mais swap (agora mesmo), diga um arquivo de 2GB /swap2gb (somente em Linux).

# dd if=/dev/zero of=/swap2gb bs=1024k count=2000
# mkswap /swap2gb                    # cria a área de swap
# swapon /swap2gb                    # ativa a SWAP. Isso agora em uso
# swapoff /swap2gb                   # Quando feito desative a swap
# rm /swap2gb

Montar um compartilhamento SMB

Suponhamos que queremos acessar compartilhamento SMB myshare no computador smbserver, o endereço como digitado em um PC Windows PC é \\smbserver\myshare\. Nós montamos no /mnt/smbshare. Warning> cifs wants an IP or DNS name, not a Windows name.

Linux/OSX

# smbclient -U user -I 192.168.16.229 -L //smbshare/    # Lista os compartilhamentos
# mount -t smbfs -o username=winuser //smbserver/myshare /mnt/smbshare
# mount -t cifs -o username=winuser,password=winpwd //192.168.16.229/myshare /mnt/share

Montar o compartilhamento Samba através de um túnel sshl

# ssh -C -f -N -p 20022 -L 445:127.0.0.1:445 me@server  # connect on 20022, tunnel 445
# mount -t smbfs //colin@localhost/colin ~/mnt
# mount_smbfs //colin:mypassword@127.0.0.1/private /Volumes/private # I use this on OSX + ssh

Adicionalmente com o pacote mount.cifs é possível armazenar as credenciais em um arquivo, por exemplo /home/user/.smb:

username=winuser
    password=winpwd

E monte como a seguir:

# mount -t cifs -o credentials=/home/user/.smb //192.168.16.229/myshare /mnt/smbshare

FreeBSD

Utilize -I para dar o IP (ou DNS name); smbserver é o nome Windows.

# smbutil view -I 192.168.16.229 //winuser@smbserver    # Liste os compartilhamentos
# mount_smbfs -I 192.168.16.229 //winuser@smbserver/myshare /mnt/smbshare

Montar uma imagem

# hdiutil mount image.iso        # OS X

Linux loop-back

# mount -t iso9660 -o loop file.iso /mnt     # Monte uma imagem de CD
# mount -t ext3 -o loop file.img /mnt        # Monte uma imagem com o sistema de arquivos ext3

FreeBSD

Com dispositivo de memória (faça # kldload md.ko se necessário):

# mdconfig -a -t vnode -f file.iso -u 0
# mount -t cd9660 /dev/md0 /mnt
# umount /mnt; mdconfig -d -u 0         # Limpa o dispositivo md

Ou como node virtual:

# vnconfig /dev/vn0c file.iso; mount -t cd9660 /dev/vn0c /mnt
# umount /mnt; vnconfig -u /dev/vn0c       # Limpa o dispositivo vn

Solaris e FreeBSD

Com interface de arquivo loop-back ou lofi:

# lofiadm -a file.iso
# mount -F hsfs -o ro /dev/lofi/1 /mnt
# umount /mnt; lofiadm -d /dev/lofi/1      # Limpa o dispositivo lofi

Criar e queimar uma imagem ISO

Isso copiar o cd ou DVD setor por setor. Sem conv=notrunc, a imagem será pequena se há menos conteúdo no cd. Veja abaixo os exemplos dd.

# dd if=/dev/hdc of=/tmp/mycd.iso bs=2048 conv=notrunc

Utilize mkisofs para criar uma imagem de CD/DVD image a partir de um diretório. Para superar as restrições de nomes de arquivos: -r habilita as extensões comuns Rock Ridge para sistemas UNIX, -J habilita extenções Joliet utilizada pelos sistemas Microsoft. -L permite nomes de arquivos ISO9660 iniciar com um período.

# mkisofs -J -L -r -V TITLE -o imagefile.iso /path/to/dir
# hdiutil makehybrid -iso -joliet -o dir.iso dir/   # OS X

No FreeBSD, mkisofs é encontrado no ports em sysutils/cdrtools.

Queimar uma imagem de CD/DVD ISO

FreeBSD

FreeBSD não habilita a DMA nos drivers ATAPI por padrão. A DMA é habilitada com o comando sysctl e os argumentos abaixo, ou com /boot/loader.conf com as seguintes entradas:

hw.ata.ata_dma="1"
hw.ata.atapi_dma="1"

Utilize burncd com um dispositivo ATAPI (burncd é parte do base system) e cdrecord (em sysutils/cdrtools) com um drive SCSI.

# burncd -f /dev/acd0 data imagefile.iso fixate  #Para drive ATAPI
# cdrecord -scanbus            # Para encontrar o dispositivo gravador (como 1,0,0)
# cdrecord dev=1,0,0 imagefile.iso

Linux

Também utiliza cdrecord com Linux como descrito acima. Adicionalmente é possível utilizar a interface ATAPI nativa que é encontrada com:

# cdrecord dev=ATAPI -scanbus

e queime o CD/DVD como acima.

dvd+rw-tools

O pacote dvd+rw-tools (FreeBSD: ports/sysutils/dvd+rw-tools) pode fazer tudo isso e inclui growisofs para queimar CDs ou DVDs. Os exemplos referem-se ao dispositivo de dvd como /dev/dvd que podia ser um symlink para /dev/scd0 (scsi típico no Linux) ou /dev/cd0 (FreeBSD típico) ou /dev/rcd0c (SCSI de caráter típico do NetBSD/OpenBSD) ou /dev/rdsk/c0t1d0s2 (exemplo de uma dispositivo de carater CD-ROM SCSI/ATAPI do Solaris). Há uma documentação boa com exemplos no FreeBSD handbook capítulo 18.7http://www.freebsd.org/handbook/creating-dvds.html.

# -dvd-compat closes the disk
# growisofs -dvd-compat -Z /dev/dvd=imagefile.iso     # Queima imagem ISO existente
# growisofs -dvd-compat -Z /dev/dvd -J -R /p/to/data  # Queima diretamente

Converter um arquivo Nero .nrg para .iso

O Nero simplesmente adicionas um cabeçalho de 300 Kb em uma imagem ISO normal. Isso pode ser aparado com o dd.

# dd bs=1k if=imagefile.nrg of=imagefile.iso skip=300

Converter uma imagem bin/cue para .iso

O título bchunk programhttp://freshmeat.net/projects/bchunk/ pode fazer isso. Ele está no ports do FreeBSD em sysutils/bchunk.

# bchunk imagefile.bin imagefile.cue imagefile.iso

Criar uma imagem basada em arquivo

Por exemplo uma partição de 1 GB utilizando o arquivo /usr/vdisk.img. Aqui no utilizamos o vnode 0, mas podia ser também 1.

FreeBSD

# dd if=/dev/random of=/usr/vdisk.img bs=1K count=1M
# mdconfig -a -t vnode -f /usr/vdisk.img -u 0         # Cria o dispositivo /dev/md1
# bsdlabel -w /dev/md0
# newfs /dev/md0c
# mount /dev/md0c /mnt
# umount /mnt; mdconfig -d -u 0; rm /usr/vdisk.img    # Limpa o dispositivo md

A imagem baseada em arquivo pode ser automaticamente montada durante o boot com uma entrada em /etc/rc.conf e /etc/fstab. Teste sua configuração com o # /etc/rc.d/mdconfig start (primeiro exclua o dispositivo md0 com o # mdconfig -d -u 0).
Note no entanto que essa configuração automática só funcionará se a imagem de arquivo não estiver na partição root. A rasão é o script /etc/rc.d/mdconfig é executado durante o boot e a partição root ainda está em somente leitura (read-only). Imagens localizadas fora da partição root serão montadas mounted mais tarde com o script /etc/rc.d/mdconfig2.
/boot/loader.conf:

md_load="YES"

/etc/rc.conf:

# mdconfig_md0="-t vnode -f /usr/vdisk.img"          # /usr não está na partição root

/etc/fstab: (O 0 0 no final é importante, Isso diz ao fsck que ignore esse dispositivo, como ainda não exite)

/dev/md0                /usr/vdisk      ufs     rw              0       0

Também é possível aumentar o tamanho da imagem depois, digamos por exemplo 300 MB maior.

# umount /mnt; mdconfig -d -u 0
# dd if=/dev/zero bs=1m count=300 >> /usr/vdisk.img
# mdconfig -a -t vnode -f /usr/vdisk.img -u 0
# growfs /dev/md0
# mount /dev/md0c /mnt      # Partição do arquivo é agora 300 MB maior

Linux

# dd if=/dev/zero of=/usr/vdisk.img bs=1024k count=1024
# mkfs.ext3 /usr/vdisk.img
# mount -o loop /usr/vdisk.img /mnt
# umount /mnt; rm /usr/vdisk.img                      # Limpa

Linux com o losetup

/dev/zero é muito mais rapido do que o urandom, mas menos seguro para criptografia.

# dd if=/dev/urandom of=/usr/vdisk.img bs=1024k count=1024
# losetup /dev/loop0 /usr/vdisk.img # Cria e associa /dev/loop0
# mkfs.ext3 /dev/loop0
# mount /dev/loop0 /mnt
# losetup -a                        # Verificar loops utilizados
# umount /mnt
# losetup -d /dev/loop0             # Destaca
# rm /usr/vdisk.img

Criar um sistema de arquivo de memória

Um sistema de arquivo baseado em memória é muito rápido para aplicações de entrada e saída (IO). Como criar uma partição de 64 MB montada em /memdisk:

FreeBSD

# mount_mfs -o rw -s 64M md /memdisk
# umount /memdisk; mdconfig -d -u 0               # Limpa o dispositivo md
    md     /memdisk     mfs     rw,-s64M    0   0 # /etc/fstab entrada

Linux

# mount -t tmpfs -osize=64m tmpfs /memdisk

Desempenho de disco

Lê e escreve um arquivo de 1 GB na partição (/home)

# time dd if=/dev/ad4s3c of=/dev/null bs=1024k count=1000
# time dd if=/dev/zero bs=1024k count=1000 of=/home/1Gb.file
# hdparm -tT /dev/hda      # Somente em Linux

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *