Anunţ

Caută printre mesajele de pe forum înainte de a scrie unul nou!
Formulează corect întrebarea sau problema pe care o ai.
Respectă regulile forumului și Codul de Conduită!

#1 26 Nov 2016 16:34:56

Valc
Membru
Locaţie: Bucureşti
Înregistrat: 28 Oct 2016
Mesaje: 72

Comandă redenumire fişier ca admin

Mă interesează să redenumesc un fişier de sistem şi aş dori o comandă completă, care bănuiesc că ar trebui să cuprindă sudo, calea (fişierul se află în /etc) şi comanda propriu-zisă. Mulţam fain.

Offline

 

#2 26 Nov 2016 19:03:59

TARA24.
Membru
Înregistrat: 23 Dec 2010
Mesaje: 964

Re: Comandă redenumire fişier ca admin

Ex:

Cod:

sudo mv fisier_vechi fisier_nou

Orice decizie pe care esti pe cale sa o iei, gandeste-o de cel putin 3 ori.
Din momentul in care ai luat-o nu mai conteaza de cate ori ai gandit-o.
Fi destept, foloseste ce ti se potriveste nu ce ti se impune.

Offline

 

#3 26 Nov 2016 22:30:15

Valc
Membru
Locaţie: Bucureşti
Înregistrat: 28 Oct 2016
Mesaje: 72

Re: Comandă redenumire fişier ca admin

Adică sudo mv /etc/fişiervechi fişiernou ?

Offline

 

#4 27 Nov 2016 08:53:16

shogun1
Membru
Înregistrat: 01 Apr 2009
Mesaje: 1206
Site web

Re: Comandă redenumire fişier ca admin

Ești conștient că redenumind un fișier de sistem poți avea probleme?
Da, ar fi ceva de gen: sudo mv /etc/nume-vechi-fișier /etc/nume-nou-fișier


Trebuie pusă calea corectă și pentru vechiul fișier și pentru cel nou, altfel pe lângă redenumire și muți fișierul în noua locație. De exemplu sudo mv /etc/fișier1 fișier2 va redenumi fișier1 în fișier2 și-l va muta din /etc în directorul de lucru curent (~ cel mai probabil, adică /home/userul tău).

Offline

 

#5 27 Nov 2016 13:24:42

Alexandru.Cucu
Administrator
Locaţie: -21.8021247, -154.6975949
Înregistrat: 17 Jun 2008
Mesaje: 6666
Site web

Re: Comandă redenumire fişier ca admin

Pentru ca nu este tutorial am mutat subiectul din acea categorie. Pe viitor incearca sa deschizi subiecte in categoria potrivita.

Offline

 

#6 27 Nov 2016 19:12:53

Valc
Membru
Locaţie: Bucureşti
Înregistrat: 28 Oct 2016
Mesaje: 72

Re: Comandă redenumire fişier ca admin

Ok, deci cu cale şi pentru fişierul vechi, dar şi pentru cel nou. Mulţam. mv vine de la move sau de la rename?

Offline

 

#7 27 Nov 2016 20:33:21

shogun1
Membru
Înregistrat: 01 Apr 2009
Mesaje: 1206
Site web

Re: Comandă redenumire fişier ca admin

Tu ce crezi? De la move, dar ”mutarea” poate fi în altă locație, o mutare ”adevărată”, dar și re-denumirea fișierului respectiv, într-un fel se poate considera mutarea conținutului într-un alt fișier. Mie mi se pare clară logica din spate.

Offline

 

#8 28 Nov 2016 19:41:14

TARA24.
Membru
Înregistrat: 23 Dec 2010
Mesaje: 964

Re: Comandă redenumire fişier ca admin

Valc a scris:

mv vine de la move sau de la rename?

mv vine de la RENAME(3);

Cu alte cuvinte o posibila implementare a lui  mv arata cam asa:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/stat.h>
#include <unistd.h>
#include <sys/types.h>

void eroare(char *ptr, char *fisier_1, char *fisier_2, int ok);
void folosire(char *ptr);
int verificaFisier(const char *sursa, const char *destinatie);

int main(int argc, char *argv[]){
    errno = 0;
    int succces;
    int ok;

    if ( argc != 3){
        folosire(argv[0]);
        exit(EXIT_FAILURE);
    }

    if ( strcmp(argv[1], argv[2]) == 0){
        printf("EROARE: '%s' si '%s' este acelasi Fisier\n",argv[1], argv[2]);
        exit(EXIT_FAILURE);
    }

    ok = verificaFisier(argv[1], argv[2]);
    if( ok == 1){
        printf("EROARE: Sursa este un fisier iar Destinatia este un Director\n");
        exit(EXIT_FAILURE);
    }else if( ok == 2){
        printf("Sursa este un Director iar Destinatia este un fisier\n");
        exit(EXIT_FAILURE);
    }

    succces = rename(argv[1], argv[2]); // Aici are loc apelarea lui rename()

    if (succces == -1){
        eroare(argv[0], argv[1], argv[2],ok);
    }else{
        printf("Fisierul %s a fost redenumit in %s\n",argv[1], argv[2]);
    }
}

int verificaFisier(const char *sursa, const char *destinatie){
    struct stat src, dest;

    stat(sursa, &src);
    stat(destinatie, &dest);

    if (S_ISREG(src.st_mode) && S_ISDIR(dest.st_mode) ) {
        return 1;
    }
    if (S_ISDIR(src.st_mode) && S_ISREG(dest.st_mode) ) {
        return 2;
    }

    return 0;
}
void eroare(char *ptr, char *fisier_1, char *fisier_2, int ok){
    if(ok > 0){
        fprintf(stderr, "%s nu se poate muta %s in %s\n%s\n", ptr , fisier_1, fisier_2, strerror(errno));
    }else{
        fprintf(stderr, "%s nu se poate redenumi %s in %s\n%s\n", ptr , fisier_1, fisier_2, strerror(errno));
    }
    exit(EXIT_FAILURE);
}

void folosire(char *ptr){
    fprintf(stderr, "EROARE SINTAXA:\nFoloseste %s [fisier_vechi] [fisier_nou]\n", ptr);
    exit(EXIT_FAILURE);
}

daca vrei sa faci o proba atunci:
1)

touch move.c

2)

Cod:

nano move.c

Copiaza continutul de mai sus si salveaza fisierul ala.

3)

Cod:

gcc move.c -o move

4
posibile rezultate:

tara24@tara24-HP-Pavilion-17-Notebook-PC ~ $ ./move
EROARE SINTAXA:
Foloseste ./move [fisier_vechi] [fisier_nou]

tara24@tara24-HP-Pavilion-17-Notebook-PC ~ $ ./move test.txt lol
EROARE: Sursa este un fisier iar Destinatia este un Director

tara24@tara24-HP-Pavilion-17-Notebook-PC ~ $ ./move lol test.txt
EROARE: Sursa este un Director iar Destinatia este un fisier

michi@michi-HP-Pavilion-17-Notebook-PC ~ $ ./move test.txt test.txt
EROARE: 'test.txt' si 'test.txt' este acelasi Fisier

tara24@tara24-HP-Pavilion-17-Notebook-PC ~ $ ./move test.txtt test.txt.bak
./move nu se poate redenumi test.txtt in test.txt.bak
No such file or directory

tara24@tara24-HP-Pavilion-17-Notebook-PC ~ $ ./move test.txt test.backup
Fisierul test.txt a fost redenumit in test.backup

Evident sunt multe alte modificari necesare, cum ar fi daca vrei sa muti fisierul dintr-un director in altul, sau daca ai permisiunile necesare pe acel fisiere, atunci trebuie modificat codul.

In acest moment are loc doar redenumirea unui fisier in alt fisier.
Bafta.

Editat ultima oară de TARA24. (28 Nov 2016 21:24:55)


Orice decizie pe care esti pe cale sa o iei, gandeste-o de cel putin 3 ori.
Din momentul in care ai luat-o nu mai conteaza de cate ori ai gandit-o.
Fi destept, foloseste ce ti se potriveste nu ce ti se impune.

Offline

 

#9 28 Nov 2016 22:09:12

TARA24.
Membru
Înregistrat: 23 Dec 2010
Mesaje: 964

Re: Comandă redenumire fişier ca admin

shogun1 a scris:

Tu ce crezi? De la move, dar ”mutarea” poate fi în altă locație, o mutare ”adevărată”, dar și re-denumirea fișierului respectiv, într-un fel se poate considera mutarea conținutului într-un alt fișier. Mie mi se pare clară logica din spate.

mv este un program scris in C avand la baza multe linii de cod precum si apelarea unor Functii standard cum ar fi de ex ]rename(), care la randul ei, nu are nimic de-aface cu "mutarea".

Description



The rename() function shall change the name of a file. The old argument points to the pathname of the file to be renamed. The new argument points to the new pathname of the file.

Mai sus am creat o Implementare a lui mv in care se vede clar modul cum lucreaza.
Daca vrei sa muti un fisier dintr-un folder in altul este necesara apelarea altor functii care nu au nimic in comun cu rename (eg: fopen, fclose, open, read, write, create, close, chdir, fgetc...etc).

Ceva de genul:

#include<stdio.h>
#include<fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/stat.h>
#include <unistd.h>
#include <sys/types.h>

int main(int argc,char *argv[]){
    int fisier_1, fisier_2;
    ssize_t found;
    char buffer[512];

    if(argc!=3){
        printf("Prea putine Argumente\n");
        exit(EXIT_FAILURE);
    }else{
        fisier_1=open(argv[1],O_RDONLY);

        if(fisier_1==-1){
            printf("Fisierul sursa inexistent"); /* Aici trebuie citite erorile din ce cauza */
            exit(EXIT_FAILURE);
        }

        fisier_2=open(argv[2],O_WRONLY);
        if(fisier_2==-1){
            fisier_2=creat(argv[2],0666);
        }

        while((gasit=read(fisier_1,buffer,512))>0){
            write(fisier_2,buffer,(size_t)gasit);
        }

        close(fisier_1);
        close(fisier_2);
    }
    int c=unlink(argv[1]);
    if(c==0){
        printf("Mutat cu succes\n");
    }else{
        printf("Mutare esuata\n"); /* Aici trebuie citite erorile din ce cauza */
    }
}

shogun1 a scris:

într-un fel se poate considera mutarea conținutului într-un alt fișier. Mie mi se pare clară logica din spate.

Cand o sa am timp voi crea implementarea completa a lui mv din Linux pentru a putea fi mai usor inteleasa, care tine si de accesult tau ca USER precum si drepturile tale pe acel fisier.

Exemplu:

#include <stdio.h>
#include <stdlib.h>
#include<unistd.h>

void verificaAcces(const char *fisier);

int main (void) {

   const char *fisier = "/boot/grub/grub.cfg";

    verificaAcces(fisier);

   return 0;
}

void verificaAcces(const char *fisier){

    if(!access(fisier, F_OK )){
        printf("Fisierul %s\t A fost gasit\n",fisier);
    }else{
        printf("Fisierul %s\t nu a fost gasit\n",fisier);
    }

    if(!access(fisier, R_OK )){
        printf("Fisierul %s\t poate fi citit\n",fisier);
    }else{
        printf("Fisierul %s\t nu poate fi citit\n",fisier);
    }

    if(!access( fisier, W_OK )){
        printf("Fisierul %s\t poate fi editat\n",fisier);
    }else{
        printf("Fisierul %s\t nu poate fi editat\n",fisier);
    }

    if(!access( fisier, X_OK )){
        printf("Fisierul %s\t este executabil\n",fisier);
    }else{
        printf("Fisierul %s\t nu este executabil\n",fisier);
    }
}

Output fara sudo:

tara24@tara24-HP-Pavilion-17-Notebook-PC ~ $ ./move
Fisierul /boot/grub/grub.cfg     A fost gasit
Fisierul /boot/grub/grub.cfg     poate fi citit
Fisierul /boot/grub/grub.cfg     nu poate fi editat
Fisierul /boot/grub/grub.cfg     nu este executabil

Output cu sudo:

tara24@tara24-HP-Pavilion-17-Notebook-PC ~ $ sudo ./move
Fisierul /boot/grub/grub.cfg     A fost gasit
Fisierul /boot/grub/grub.cfg     poate fi citit
Fisierul /boot/grub/grub.cfg     poate fi editat
Fisierul /boot/grub/grub.cfg     nu este executabil

Toate bune.

Editat ultima oară de TARA24. (28 Nov 2016 22:30:09)


Orice decizie pe care esti pe cale sa o iei, gandeste-o de cel putin 3 ori.
Din momentul in care ai luat-o nu mai conteaza de cate ori ai gandit-o.
Fi destept, foloseste ce ti se potriveste nu ce ti se impune.

Offline

 

#10 29 Nov 2016 07:05:20

shogun1
Membru
Înregistrat: 01 Apr 2009
Mesaje: 1206
Site web

Re: Comandă redenumire fişier ca admin

Asta ai inteles tu ca intreba initiatorul?
Mv e prescurtare de la move (evident), descrierea autorilor (Mike Parker, David MacKenzie si Jim Meyering):

Cod:

Name
mv - move (rename) files
Description
Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.

Offline

 
Feed

Antet forum

Powered by FluxBB