Sobes.tech
Junior

Символдук шилтеменин эмне экенин?

sobes.tech AI

AIден жооп

Белги (symbolic link же symlink) — бул операциялык тутумда атайын түрдөгү файл, ал башка файлга же каталогго көрсөтөт. Ал шилтеме катары иштейт.

Негизги өзгөчөлүктөрү:

  • Жолду камтыйт: Белги шилтемеде тексттик сап — максаттуу файлга же каталогго жол бар. Шилтемеге киргенде, системасы ошол жолду ээрчийт.
  • Маалымат камтыбайт: Өзү — шилтеме, максаттуу файлдын маалыматтарын камтыбайт. Шилтеменин өлчөмү адатта кичинекей жана жолдун узундугуна көз каранды.
  • Бөлүмдөн көз каранды эмес: Максаттуу файл же каталог башка бөлүмдө же файлдык системада болушу мүмкүн, ал шилтемеден айырмаланат.
  • Сынган шилтемелер: Эгер максаттуу файл же каталог өчүрүлсө, белги шилтемеси "сынган" (broken) же "калгандар" (dangling) болуп калат, бирок өзү — шилтеме, дагы эле бар.
  • Колдоо: Көптөгөн заманбап операциялык тутумдарда (Linux, macOS, Windows менен NTFS) колдоого алынат.

Катуу шилтеме менен салыштыруу:

Критерий Белги шилтеме Катуу шилтеме
Файл түрү Өзүнчө файл түрү inode'га кошумча шилтеме
Жол Максатка жолду сактайт Жолду сактабайт
Бөлүм/ФС Башка бөлүмгө/ФС'ге көрсөтө алат Ошол бөлүмдө/ФС'де болушу керек
Максат өчүрүлгөндө Шилтеме сынган болот Маалымат башка шилтемелер аркылуу жеткиликтүү
Каталогдор үчүн Каталогдорго көрсөтө алат Адатта, каталогдорго көрсөтө албайт

Javaда, символикалык шилтемелер менен иштөө java.nio.file API аркылуу жүргүзүлөт.

// Симболикалык шилтемени түзүү мисалы
import java.io.IOException;
import java.nio.file.*;

public class SymlinkExample {

    public static void main(String[] args) {
        Path target = Paths.get("target_file.txt"); // Максаттуу файл
        Path link = Paths.get("mylink_to_target"); // Симболикалык шилтеменин аты

        try {
            // Максаттуу файлды түзүү (мисал)
            Files.write(target, "Hello, World!".getBytes());

            // Симболикалык шилтемени түзүү
            Files.createSymbolicLink(link, target);
            System.out.println("Симболикалык шилтеме түзүлдү: " + link.toAbsolutePath());

            // Жол симболикалык шилтеме экенин текшерүү
            System.out.println(link.getFileName() + " — симболикалык шилтеме: " + Files.isSymbolicLink(link));

            // Шилтеме аркылуу мазмунду окуу
            byte[] content = Files.readAllBytes(link);
            System.out.println("Шилтеме аркылуу мазмун: " + new String(content));

            // Шилтемени чечип, максатка жетүү
             Path resolvedTarget = Files.readSymbolicLink(link);
             System.out.println("Шилтеменин максаты: " + resolvedTarget);

        } catch (IOException e) {
            e.printStackTrace();
         } finally {
             // Жасалган файлдарды өчүрүү
             try {
                 Files.deleteIfExists(link);
                 Files.deleteIfExists(target);
             } catch (IOException e) {
                 e.printStackTrace();
             }
         }
    }
}