Repository navigation
Expand file tree
/
Copy pathdigitdisk.1
More file actions
751 lines (751 loc) · 29.8 KB
/
Copy pathdigitdisk.1
File metadata and controls
751 lines (751 loc) · 29.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
.\" SPDX-FileCopyrightText: 2026 Marat Zimnurov <zimtir@mail.ru>
.\" SPDX-License-Identifier: BSD-2-Clause
.Dd September 2, 2026
.Dt DIGITDISK 1
.Os
.Sh NAME
.Nm digitdisk
.Nd снимок системы, разбор дерева каталогов и уборка
.Sh SYNOPSIS
.Nm digitdisk
.Op Ar подкоманда
.Op Ar ключи
.Nm digitdisk Cm status
.Op Fl -json
.Op Fl -lang Ar язык
.Op Fl -why
.Op Fl -top Ar N
.Op Fl -sample Ar MS
.Op Fl -gpu-tool
.Op Fl -live | Fl -plain
.Op Fl -interval Ar MS
.Nm digitdisk Cm analyze Ar путь
.Op Fl -json
.Op Fl -lang Ar язык
.Op Fl -top Ar N
.Op Fl -places Ar файл
.Op Fl -no-places
.Op Fl -no-fold
.Op Fl -cross-device
.Op Fl -max-depth Ar N
.Nm digitdisk Cm clean Ar путь
.Op Fl -json
.Op Fl -lang Ar язык
.Op Fl -apply
.Op Fl -top Ar N
.Op Fl -trash Ar каталог
.Op Fl -protect Ar что
.Op Fl -protect-file Ar файл
.Op Fl -places Ar файл
.Op Fl -no-places
.Op Fl -cross-device
.Op Fl -max-depth Ar N
.Nm digitdisk Cm restore Ar корзина
.Op Fl -json
.Op Fl -lang Ar язык
.Op Fl -dry-run
.Nm digitdisk Cm purge Ar корзина
.Op Fl -json
.Op Fl -lang Ar язык
.Op Fl -confirm Ar N
.Nm digitdisk Cm places
.Op Fl -json
.Op Fl -lang Ar язык
.Op Fl -top Ar N
.Op Fl -places Ar файл
.Op Fl -no-measure
.Nm digitdisk Cm history Ar путь
.Op Fl -json
.Op Fl -lang Ar язык
.Op Fl -top Ar N
.Nm digitdisk Cm run
.Op Fl -json
.Op Fl -lang Ar язык
.Op Fl -plain
.Op Fl -interval Ar MS
.Op Fl -gpu-tool
.Ar команда Op Ar доводы
.Nm digitdisk
.Fl c Ar команда Op Ar доводы
.Nm digitdisk
.Fl -help | Fl -version
.Sh DESCRIPTION
.Nm
печатает два чтения машины — куда ушло место на диске и что с машиной
происходит сейчас — и по отдельной команде убирает файлы.
.Pp
Подкоманду можно не называть:
.Nm
без доводов делает то же, что
.Nm Cm status ,
со всеми его умолчаниями.
Ключ на месте подкоманды тоже относится к
.Cm status ,
поэтому
.Nm Fl -json
и
.Nm Cm status Fl -json
— одна и та же команда.
Слово, которое подкоманде не соответствует, командой не считается: оно
отвергается с кодом 2, а не толкуется как что-нибудь другое.
.Pp
.Cm status ,
.Cm analyze ,
.Cm places
и
.Cm history
только читают.
Убирают три команды, и их три:
.Cm clean
показывает план и без
.Fl -apply
не открывает ни одного файла на запись,
.Cm restore
возвращает перенесённое,
.Cm purge
стирает.
.Pp
Убирается ровно то, чему решающий слой вынес приговор
.Dq МожноУбрать :
не похожее на него и не совпавшее с маской.
.Pp
Перенос в корзину места не освобождает.
.Fl -apply
— это
.Xr rename 2
внутри той же файловой системы: файлы остаются на диске под другим именем,
и число, которое печатает
.Cm clean Fl -apply ,
— перенесённое, а не освобождённое.
Из оболочки место освобождает только
.Cm purge ,
и это необратимо.
Мимо корзины стирает клавиша
.Ic Забой
на живом экране
.Cm analyze
\(em и стирает она то, на что указал человек, а не то, что решающий слой счёл
мусором: у слоя там спрашивают, ЧТО ЭТО и чем рискуешь, а не можно ли.
.Pp
.Nm
говорит на двух языках — по-русски и по-английски, — и язык выбирает человек, а
не машина.
При первом запуске в терминале
.Nm
спрашивает, на каком языке писать, и запоминает ответ в
.Pa ~/.digitable/digitdisk/settings.conf ;
локаль машины при этом только подсказывает, что предложить по умолчанию.
Не терминал — труба, файл, скрипт, CI — или
.Fl -json :
не спрашивается ничего и не заводится никакого файла, а язык берётся из
.Ev LC_ALL ,
.Ev LC_MESSAGES ,
.Ev LANG ;
незаданная или незнакомая локаль означает английский.
На один запуск язык перекрывает
.Fl -lang ,
на сессию —
.Ev DIGITDISK_LANG ,
на живом экране его переключает клавиша
.Ic l .
.Pp
.Fl -json
НЕ переводится: ключи и машинные значения одни и те же байты на любом языке,
потому что их читают скрипты.
Русские слова, которые едут в JSON значениями — разряд
.Dq Кэш ,
приговор
.Dq МожноУбрать ,
тексты отказов, — это имена решающего слоя и записи журнала, а не текст вывода;
на экране они называются словом того языка, на котором идёт вывод, а в файле
остаются собой.
.Sh SUBCOMMANDS
.Bl -tag -width "history <путь>XX"
.It Cm status
Снимок системы: ядро и выпуск, время работы, загрузка (и доля каждого ядра),
память, процессы, диски, сеть, температура, видеокарты.
Источники платформенные:
.Pa /proc
и
.Pa /sys
на Linux,
.Xr sysctl 3
и libSystem на macOS.
Чего система не публикует, печатается прочерком, а не нулём, и называется в
разделе
.Dq НЕ ПРОЧИТАНО ;
почему — по
.Fl -why .
В терминале рисуется живой экран, в трубу и в файл печатается тот же снимок
текстом.
.It Cm analyze Ar путь
Обход дерева через
.Xr lstat 2 :
каталоги по размеру и самые крупные файлы.
Символические ссылки не раскрываются, границу файловой системы без
.Fl -cross-device
обход не пересекает, недоступное считается и пропускается.
Жёсткая ссылка считается один раз.
.It Cm clean Ar путь
План уборки: какие файлы, сколько байт и по какому правилу ядра помечены
.Dq МожноУбрать .
Без
.Fl -apply
не тронуто ничего.
С
.Fl -apply
помеченное переносится в корзину и записывается журнал.
.It Cm restore Ar корзина
Возврат корзины на прежние места по её журналу.
Ключа не требует и ничего не перезаписывает: занятое имя — это запись
.Dq не возвращено ,
а не замена файла.
.It Cm purge Ar корзина
Стирание корзины — единственное необратимое действие.
Без
.Fl -confirm
печатает план и число, которое надо назвать.
.It Cm places
Справочник известных мест: что
.Nm
знает про конкретные кэши и сколько из этого есть на этой машине.
Справочник — данные: правится без пересборки.
.It Cm history Ar путь
Чем кончались прошлые уборки под этим корнем: когда, сколько файлов, сколько
байт лежит в корзинах, сколько возвращено и сколько стёрто.
Между прогонами ничего не помнится — всё читается из журналов самих корзин.
.It Cm run Ar команда
Запуск чужой команды с показом того, во что она обошлась: пока команда
работает — строка состояния в последней строке терминала, после — сводка в
две строки.
.Pp
Считается ВСЁ ДЕРЕВО процессов, а не один прямой потомок:
параллельный
.Xr make 1 ,
npm и сборка на Go порождают десятки процессов, и мерить
одного потомка значило бы показывать почти ноль.
Способов счёта три, и сводка называет тот, который ответил: своя контрольная
группа (cgroup v2 — считает ядро, точно, ничего не теряя между замерами),
обход
.Pa /proc
по родительским связям (приближение опросом — короткоживущий процесс между
двумя замерами не виден, а сумма RSS считает общую страницу столько раз,
сколько процессов её держат) и итог
.Xr wait4 2
(точное процессорное время команды и всего, чего она
дождалась, и точный пик самого крупного одного процесса).
.Pp
Стандартный вывод принадлежит команде.
Ни строка состояния, ни сводка, ни
.Fl -json
туда не пишутся: всё, что печатает сама обёртка, идёт в поток ошибок, и
.Pp
.Dl $ digitdisk run make | tee log
.Pp
кладёт в файл ровно то же, что положил бы
.Ql make | tee log .
Строки состояния нет вовсе, когда поток ошибок — не терминал; полноэкранная
программа
.Pq Xr vim 1 , Xr ssh 1 , Xr less 1
забирает терминал себе, и строка уходит и возвращается сама.
.Pp
Ключи обёртки ставятся ДО команды, ключи команды — после:
.Nm Cm run Fl -json Cm ls Fl -json
отдаёт первый
.Fl -json
обёртке, второй —
.Xr ls 1 .
Короткий вид того же —
.Fl c .
Одно слово с пробелами и метасимволами оболочки исполняется оболочкой из
.Ev SHELL
(иначе
.Pa /bin/sh ) ,
всё остальное запускается напрямую, без оболочки между обёрткой и командой.
.El
.Sh OPTIONS
.Bl -tag -width "--protect-file файлXX"
.It Fl -json
Машиночитаемый вывод.
Принимают все подкоманды.
У
.Cm clean
список работ под
.Fl -json
едет целиком и ключом
.Fl -top
не режется.
.It Fl -lang Ar язык
Язык вывода на этот запуск:
.Cm ru
или
.Cm en .
Принимают все подкоманды.
Перекрывает и запомненный выбор, и локаль машины; ничего не сохраняет —
запомнить язык может только ответ на вопрос или клавиша
.Ic l
на живом экране.
На
.Fl -json
не влияет: он не переводится.
.It Fl -top Ar N
Сколько строк в списках: у
.Cm status
10, у
.Cm analyze
и
.Cm clean
15, у
.Cm places
40, у
.Cm history
20.
.Ar N
= 0 — без предела.
У
.Cm status
ключ режет обе десятки процессов и таблицы ДИСКИ, СЕТЬ и ТЕМПЕРАТУРА; сколько
строк осталось за краем, сказано числом в конце самой таблицы.
Итоги и разбивка по разрядам считаются по всему плану и от
.Fl -top
не зависят.
.It Fl -why
.Cm status :
вместо снимка — что не измерено и почему.
.It Fl -sample Ar MS
.Cm status :
окно замера загрузки ЦП, миллисекунды, по умолчанию 200.
.It Fl -gpu-tool
.Cm status , run :
разрешить запуск чужой программы (
.Xr nvidia-smi 1 ) ради чисел о видеокарте, которых драйвер не публикует ни в
одном файле.
По умолчанию digitdisk только читает файлы; под каждой картой написано,
откуда её числа.
У
.Cm run
спрашивается ровно одно: сколько видеопамяти держат процессы самой команды.
Долю времени карты по процессам драйвер не публикует нигде, и вместо
выдуманного числа сводка говорит об этом словом: общая загрузка карты — не
загрузка команды, пока рядом считает кто-то ещё.
.It Fl -live
.Cm status :
живой экран.
Без терминала — ошибка, а не тихая печать текстом.
.It Fl -plain
.Cm status :
один снимок текстом, даже когда вывод идёт в терминал.
.Cm run :
без строки состояния, даже когда терминал есть.
.It Fl -interval Ar MS
.Cm status :
период обновления живого экрана, миллисекунды, по умолчанию 2000.
.Cm run :
период обновления строки состояния, по умолчанию 1000.
Дерево процессов при этом опрашивается чаще, чем рисуется строка, и опрос сам
себя разрежает, если оказывается дороже двадцатой доли своего периода;
сколько вышло в итоге, сказано в сводке и в
.Fl -json .
.It Fl c Ar команда
Короткий вид
.Cm run :
всё, что стоит ПОСЛЕ
.Fl c ,
принадлежит команде, всё, что до, — обёртке.
Слово, которое подкомандой не является, поиск
.Fl c
прекращает:
.Nm Cm clean Pa ~ Fl c
— это ключ подкоманды
.Cm clean ,
а не обёртка.
.It Fl -cross-device
.Cm analyze , clean :
заходить на смонтированные другие файловые системы.
По умолчанию обход останавливается на границе.
.It Fl -max-depth Ar N
.Cm analyze , clean :
предел глубины обхода, 0 — без предела.
.It Fl -places Ar файл
.Cm analyze , clean , places :
свой справочник известных мест вместо встроенного.
.It Fl -no-places
.Cm analyze , clean :
судить одними приметами, без справочника.
.It Fl -no-fold
.Cm analyze :
судить о каждом файле внутри
.Pa node_modules ,
.Pa __pycache__
и подобных каталогов. По умолчанию такой каталог считается целиком — байты
все до одного, как и без ключа, — но приговор выносится один, о самом
каталоге. На дереве из 82 923 записей это 8,4 секунды против 17,5.
.It Fl -no-measure
.Cm places :
не считать размеры найденных мест, только назвать их.
.It Fl -apply
.Cm clean :
перенести помеченное в корзину, а не только показать план.
.It Fl -trash Ar каталог
.Cm clean :
другая корзина вместо
.Pa <корень>/.digitdisk-trash .
Обязана лежать внутри корня уборки.
.It Fl -protect Ar что
.Cm clean :
не трогать.
.Ar что
— это путь или
.Dq разряд: Ns Ar разряд .
Ключ можно повторять.
Защита только вычитает: она переносит запись из плана в
.Dq ЗАЩИЩЕНО
и никогда не добавляет файл в план.
.It Fl -protect-file Ar файл
.Cm clean :
защитный список файлом вместо
.Pa ~/.digitable/digitdisk/protect.conf .
.It Fl -dry-run
.Cm restore :
показать, что вернулось бы, и не возвращать.
.It Fl -confirm Ar N
.Cm purge :
подтвердить стирание ровно
.Ar N
файлов.
.Ar N
обязано совпасть с числом файлов в корзине.
.It Fl -help , Fl h , Cm help
Справка: подкоманды и ключи одной страницей.
.It Fl -version , Fl V , Cm version
Версия, хеш сборки, инструментарий и решающий слой этого двоичного файла.
.El
.Sh LIVE SCREEN
.Nm
и
.Nm Cm status
рисуют живой экран, когда вывод идёт в терминал.
Разделов одиннадцать, и первый из них \(em
.Sy КОМАНДЫ
\(em не читает, а запускает: это перечень подкоманд, тот же, что у
.Fl -help ,
и выбранная в нём строка выполняется.
.Pp
.Cm analyze
и
.Cm clean
спрашивают путь строкой ввода, предлагая текущий каталог и дополняя по
.Ic Tab ;
обход виден с первой секунды и прерывается по
.Ic q .
Уборка с экрана идёт тем же путём, что
.Cm clean :
приговор решающего слоя, план, и точное число файлов, набранное руками.
.Pp
В разделе
.Sy ДЕРЕВО
клавиша
.Ic Забой
задаёт решающему слою ДРУГОЙ вопрос: не
.Dq можно ли убрать ,
а
.Dq что это и чем рискуешь .
Она стирает НАСОВСЕМ всё, что лежит под отмеченным
.Ic Пробелом
\(em а без отметок под каталогом, на котором стоит курсор, \(em и сами
опустевшие каталоги, мусор это по мнению слоя или нет.
Правило уборки при этом не тронуто:
.Cm clean
и клавиша
.Ic c
берут ровно то, что брали.
.Pp
Слой отвечает СЛОВОМ:
.Dq Мусор ,
.Dq Свежее ,
.Dq Исходники ,
.Dq Личное ,
.Dq Хранилище ,
.Dq ПодПрисмотром .
Слово и предупреждение
.Pq например Dq ЭТО НЕ МУСОР: исходники
стоят в вопросе ДО стирания.
Это предупреждение, а не отказ.
.Pp
Твёрдый запрет один и короткий: корень файловой системы; системный каталог
целиком \(em
.Pa /usr ,
.Pa /etc ,
.Pa /var
и прочие поимённо; домашний каталог целиком; каталог самого
.Nm
и его настроек; корзина
.Pa .digitdisk-trash .
Запрещён каталог сам и всякий, кто его в себе содержит; то, что лежит внутри,
не запрещено.
На каждый отказ называется и причина, и способ обойти его, если человек прав.
Отдельно держит защитный список
.Pq Fl -protect и protect.conf .
.Pp
Подтверждение соразмерно опасности, и шкалу называет решающий слой
.Pq функция Dq Строгость , не экран:
до семи путей, целиком видных на экране, объёмом меньше
.Dq Порога крупного
и все до одного названные слоем
.Dq Мусор
\(em одна клавиша
.Ic y ;
есть
.Dq Свежее ,
.Dq Исходники
или
.Dq Личное ,
либо список обрезан, либо объём выше порога \(em точное число путей, как у
.Cm purge Fl -confirm ;
есть
.Dq Хранилище
или
.Dq ПодПрисмотром
\(em число путей И слово
.Dq СТЕРЕТЬ .
Строгость берётся по худшему пути в плане; слой, который второго вопроса не
отвечает вовсе, покупает самую строгую ступень.
Стёртое пишется в тот же журнал со
.Dq способом
.Dq стирание ,
и
.Cm restore
с
.Cm purge
по такому журналу отказывают: возвращать нечего, но видно, что исчезло.
.Cm purge
с экрана не запускается ни при каких условиях: он стирает корзину целиком, а у
экрана открытой корзины нет.
Подкоманда, выполненная с экрана, печатает как всегда, а по
.Ic Enter
экран состояния возвращается: программа при этом не перезапускается.
.Pp
Клавиши:
.Pp
.Bl -tag -width "PgUp, PgDnXX" -compact
.It Ic \(<-\ \(->, Tab
предыдущий и следующий раздел
.It Ic 1\(en9
раздел сразу; 1 \(em
.Sy КОМАНДЫ
.It Ic \(ua\ \(da, PgUp, PgDn
прокрутка длинного раздела
.It Ic \(ua\ \(da, 1\(en7 Pq в разделе КОМАНДЫ
выбрать подкоманду
.It Ic Enter Pq в разделе КОМАНДЫ
запустить выбранную; Esc возвращает на ОБЗОР
.It Ic p , Space
пауза
.It Ic r
замер сейчас
.It Ic l
язык вывода: ru \(<> en.
Новый выбор тут же ложится в
.Pa ~/.digitable/digitdisk/settings.conf ,
и следующий запуск начинает с него
.It Ic \&?
сразу в раздел КОМАНДЫ
.It Ic q , Esc
выход
.El
.Sh ENVIRONMENT
.Bl -tag -width "XDG_CONFIG_HOMEXX"
.It Ev DIGITDISK_LANG
Язык вывода на всю сессию:
.Cm ru
или
.Cm en .
Перекрывает запомненный выбор и локаль, уступает ключу
.Fl -lang ,
ничего не сохраняет.
.It Ev LC_ALL , LC_MESSAGES , LANG
Локаль машины, в этом порядке.
Ею язык вывода решается только там, где спросить некого: не терминал,
.Fl -json ,
скрипт, CI.
.Cm ru\&*
— по-русски,
.Cm en\&*
— по-английски; незаданная, а также
.Cm C
и
.Cm POSIX
— по-английски, потому что переносимая локаль по определению английская, а
машина, ничего не сказавшая о языке, не сказала
.Dq русский .
.It Ev DIGITDISK_PALETTE
Вариант палитры живого экрана:
.Cm carbon
(по умолчанию),
.Cm paper ,
.Cm signal .
.It Ev NO_COLOR
Установленная переменная выключает цвет.
.It Ev TERM
.Cm dumb
или пустое значение — живого экрана нет, печатается текст.
.It Ev XDG_CONFIG_HOME
Где искать СТАРЫЕ
.Pa digitdisk/places.conf
и
.Pa digitdisk/protect.conf ;
по умолчанию
.Pa ~/.config .
Новый дом настроек —
.Pa ~/.digitable/digitdisk/ ,
и от этой переменной он не зависит.
.It Ev XDG_CACHE_HOME , XDG_DATA_HOME
Куда справочник целит якоря
.Dq кэш
и
.Dq данные ;
по умолчанию
.Pa ~/.cache
и
.Pa ~/.local/share .
.El
.Sh FILES
.Bl -tag -width "<корень>/.digitdisk-trash/<метка>/journal.jsonXX"
.It Pa <корень>/.digitdisk-trash/<метка>/
Корзина, которую делает
.Cm clean Fl -apply .
Она всегда внутри корня уборки; метка — время в UTC вида
.Pa 2026-09-02T12-00-00Z .
.It Pa <корень>/.digitdisk-trash/<метка>/files/
Перенесённые файлы, каждый под своим путём относительно корня.
.It Pa <корень>/.digitdisk-trash/<метка>/journal.json
Журнал корзины: откуда взят каждый файл, его размер и отпечаток, что
возвращено и что стёрто.
Его читают
.Cm restore ,
.Cm purge
и
.Cm history ;
без него каталог не считается корзиной
.Nm .
.It Pa ~/.digitable/digitdisk/settings.conf
Настройки:
.Pa язык=ru
или
.Pa lang=en ,
по строке на ключ.
Файл заводится один раз — когда
.Nm
спросил про язык у терминала и получил ответ, — и о том, что он заведён,
говорится вслух одной строкой.
Не терминал или
.Fl -json :
не спрашивается и не заводится ничего.
.It Pa ~/.digitable/digitdisk/places.conf
Свой справочник известных мест.
Если файла нет, берётся справочник, встроенный в двоичный файл;
.Cm places
печатает, какой из двух взят.
.It Pa ~/.digitable/digitdisk/protect.conf
Защитный список: строки вида
.Pa путь|<путь>|<почему>
и
.Pa разряд|<разряд>|<почему> .
.It Pa ~/.config/digitdisk/places.conf , ~/.config/digitdisk/protect.conf
Прежний дом этих двух файлов.
Он ещё читается — там, где в новом доме своего файла нет, — и о том, откуда
файл взят, говорится один раз.
Ничего никуда не копируется само: переносит их человек, когда ему удобно.
.El
.Sh EXIT STATUS
.Bl -tag -width "0XX" -compact
.It 0
Команда отработала.
.It 1
Ошибка выполнения: нет пути, каталог не корзина,
.Fl -confirm
назвал не то число.
.It 2
Неизвестная подкоманда или неразобранный ключ.
.It 126
.Cm run :
команда есть и не запускается.
.It 127
.Cm run :
такой команды нет.
.El
.Pp
У
.Cm run
код возврата — код КОМАНДЫ, а не обёртки: 0 и 1 значат то, что они значат у
неё, и обёртку можно поставить в сценарий, ничего в нём не меняя.
Команду, убитую сигналом, обёртка повторяет на себе тем же сигналом, поэтому
оболочка видит ровно то же, что увидела бы без обёртки.
Ctrl-C доходит до команды сам: она остаётся в группе
процессов обёртки, и терминал шлёт сигнал обеим.
.Sh EXAMPLES
Живой экран состояния:
.Pp
.Dl $ digitdisk
.Pp
Тот же снимок машине:
.Pp
.Dl $ digitdisk --json | jq .memory
.Pp
Куда ушло место в домашнем каталоге, двадцатью строками:
.Pp
.Dl $ digitdisk analyze ~ --top 20
.Pp
План уборки; не тронуто ничего:
.Pp
.Dl $ digitdisk clean ~
.Pp
Перенос в корзину, с двумя изъятиями:
.Pp
.Dl $ digitdisk clean ~ --protect ~/projects --protect разряд:сборка --apply
.Pp
Передумать:
.Pp
.Dl $ digitdisk restore ~/.digitdisk-trash/2026-09-02T12-00-00Z
.Pp
Освободить место — необратимо, число называется вслух:
.Pp
.Dl $ digitdisk purge ~/.digitdisk-trash/2026-09-02T12-00-00Z
.Dl $ digitdisk purge ~/.digitdisk-trash/2026-09-02T12-00-00Z --confirm 128
.Pp
Что было убрано под этим корнем и что из этого ещё лежит в корзинах:
.Pp
.Dl $ digitdisk history ~
.Pp
Во что обошлась сборка:
.Pp
.Dl $ digitdisk run make -j8
.Pp
То же короче, и через оболочку — потому что это одна строка с метасимволами:
.Pp
.Dl $ digitdisk -c 'make && make test'
.Pp
Сводка машине; она идёт в поток ошибок, потому что стандартный вывод занят
командой:
.Pp
.Dl $ digitdisk --json -c 'go build ./...' 2>cost.json
.Sh SEE ALSO
.Xr df 1 ,
.Xr du 1 ,
.Xr find 1 ,
.Xr lstat 2 ,
.Xr rename 2
.Pp
Эта страница есть на двух языках, и
.Xr man 1
выбирает её по локали сам:
.Pp
.Dl man digitdisk
.Dl LANG=ru_RU.UTF-8 man digitdisk
.Pp
Первое даёт английскую редакцию, второе — эту.
.Pp
Исходники и обе редакции описания:
.Lk https://github.com/digitable-lol/digitdisk
.Sh AUTHORS
.An Marat Zimnurov Aq Mt zimtir@mail.ru