From b4e450a165a447e1a821346655e54789a5a2d43c Mon Sep 17 00:00:00 2001 From: Hans Raaf Date: Sun, 27 Oct 2024 16:13:09 +0100 Subject: [PATCH] Initial commit --- .gitignore | 2 + LICENSE.txt | 21 + Makefile | 28 + README.md | 119 ++++ cmd/docker-inspector/main.go | 134 ++++ cmd/internal-inspector/main.go | 217 +++++++ go.mod | 10 + go.sum | 15 + run1.json | 1097 ++++++++++++++++++++++++++++++++ 9 files changed, 1643 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE.txt create mode 100644 Makefile create mode 100644 README.md create mode 100644 cmd/docker-inspector/main.go create mode 100644 cmd/internal-inspector/main.go create mode 100644 go.mod create mode 100644 go.sum create mode 100644 run1.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0ae70d8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +docker-inspector-* +cmd/docker-inspector/internal-inspector diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..01f7190 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Hans Raaf + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..2ecf180 --- /dev/null +++ b/Makefile @@ -0,0 +1,28 @@ +.PHONY: all clean + +BINARY_NAME=docker-inspector +INTERNAL_BINARY=internal-inspector + +all: clean $(BINARY_NAME) + +clean: + rm -f $(BINARY_NAME) cmd/docker-inspector/$(INTERNAL_BINARY) + +# Build the internal Linux inspector first +cmd/docker-inspector/$(INTERNAL_BINARY): cmd/internal-inspector/main.go + GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o cmd/docker-inspector/$(INTERNAL_BINARY) ./cmd/internal-inspector + +# Build the main wrapper for the current platform +$(BINARY_NAME): cmd/docker-inspector/$(INTERNAL_BINARY) + go build -o $(BINARY_NAME) ./cmd/docker-inspector + +# Build for specific platforms +.PHONY: darwin linux windows +darwin: clean cmd/docker-inspector/$(INTERNAL_BINARY) + GOOS=darwin GOARCH=amd64 go build -o $(BINARY_NAME)-darwin ./cmd/docker-inspector + +linux: clean cmd/docker-inspector/$(INTERNAL_BINARY) + GOOS=linux GOARCH=amd64 go build -o $(BINARY_NAME)-linux ./cmd/docker-inspector + +windows: clean cmd/docker-inspector/$(INTERNAL_BINARY) + GOOS=windows GOARCH=amd64 go build -o $(BINARY_NAME).exe ./cmd/docker-inspector \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..9610730 --- /dev/null +++ b/README.md @@ -0,0 +1,119 @@ +# Docker Image Inspector + +A command-line tool to inspect the contents of Docker images without having to manually create containers or extract tar files. The tool creates a temporary container, inspects its filesystem, and cleans up automatically. + +## Features + +- Cross-platform: Runs on macOS, Linux, and Windows (with Linux containers) +- Inspects any Docker image without modifying it +- Recursive directory listing +- Glob pattern support (including `**/`) for finding specific files +- MD5 checksum calculation for files +- JSON output option for automated processing +- Detailed summaries of files, directories, and sizes +- Clean handling of special filesystems (/proc, /sys, etc.) +- Modification time handling for reliable diffs + +## Installation + +1. Clone the repository +2. Build for your platform: +```bash +# For macOS +make darwin + +# For Linux +make linux + +# For Windows +make windows +``` + +## Usage + +Basic usage: +```bash +./docker-inspector nginx:latest +``` + +With options: +```bash +# Find specific files +./docker-inspector nginx:latest --glob "**/*.conf" + +# Calculate MD5 checksums +./docker-inspector nginx:latest --md5 + +# Output as JSON +./docker-inspector nginx:latest --json > nginx-files.json + +# Inspect specific path +./docker-inspector nginx:latest --path /etc/nginx + +# Keep container for further inspection +./docker-inspector nginx:latest --keep +``` + +### Comparing Images + +To compare the contents of two images or two runs of the same image: + +```bash +# With modification times (might show differences due to container startup) +./docker-inspector nginx:latest --json --md5 > run1.txt +./docker-inspector nginx:latest --json --md5 > run2.txt +diff run1.txt run2.txt + +# Without modification times (more reliable for structural comparisons) +./docker-inspector nginx:latest --json --md5 --no-times > run1.txt +./docker-inspector nginx:latest --json --md5 --no-times > run2.txt +diff run1.txt run2.txt +``` + +Note: Files like /etc/resolv.conf typically show modification time differences between runs due to container startup configuration. Using --md5 helps identify actual content changes regardless of timestamps. + +### Options + +``` +--path Path inside the container to inspect (default: "/") +--json Output in JSON format +--summary Show summary statistics +--glob Glob pattern for matching files (supports **/) +--md5 Calculate MD5 checksums for files +--keep Keep the temporary container after inspection +--no-times Exclude modification times from output (useful for diffs) +``` + +## How It Works + +The tool: +1. Creates a temporary container from the specified image +2. Copies a specialized Linux inspector binary into the container +3. Executes the inspector inside the container +4. Collects and formats the results +5. Automatically cleans up the container (unless --keep is specified) + +## Building from Source + +Requires: +- Go 1.21 or later +- Docker running with Linux containers +- make + +```bash +# Build for current platform +make + +# Or for specific platform +make darwin # For macOS +make linux # For Linux +make windows # For Windows +``` + +## Credits + +Most of the implementation work was done by Claude (Anthropic) in a conversation about Docker image inspection requirements and cross-platform Go development. The original concept and requirements were provided by the repository owner. + +## License + +[MIT-License](LICENSE.txt) \ No newline at end of file diff --git a/cmd/docker-inspector/main.go b/cmd/docker-inspector/main.go new file mode 100644 index 0000000..ce8618d --- /dev/null +++ b/cmd/docker-inspector/main.go @@ -0,0 +1,134 @@ +package main + +import ( + _ "embed" + "fmt" + "os" + "os/exec" + "path/filepath" + "strings" + "time" + + "github.com/alexflint/go-arg" +) + +//go:embed internal-inspector +var internalInspector []byte + +type Args struct { + Image string `arg:"positional,required" help:"docker image to inspect"` + Path string `arg:"--path" default:"/" help:"path inside the container to inspect"` + JSON bool `arg:"--json" help:"output in JSON format"` + Summary bool `arg:"--summary" help:"show summary statistics"` + Pattern string `arg:"--glob" help:"glob pattern for matching files (supports **/)"` + MD5 bool `arg:"--md5" help:"calculate MD5 checksums for files"` + Keep bool `arg:"--keep" help:"keep the temporary container after inspection"` + NoTimes bool `arg:"--no-times" help:"exclude modification times from output"` +} + +func (Args) Version() string { + return "docker-inspector 1.0.0" +} + +func (Args) Description() string { + return "Docker image content inspector - examines files and directories inside a container image" +} + +func runInspector(containerID string, args Args) error { + // Create a temporary directory for the inspector + tempDir, err := os.MkdirTemp("", "docker-inspector-*") + if err != nil { + return fmt.Errorf("failed to create temp dir: %v", err) + } + defer os.RemoveAll(tempDir) + + // Write the embedded Linux inspector to the temp directory + inspectorPath := filepath.Join(tempDir, "internal-inspector") + if err := os.WriteFile(inspectorPath, internalInspector, 0755); err != nil { + return fmt.Errorf("failed to write inspector: %v", err) + } + + // Copy the inspector to the container + copyCmd := exec.Command("docker", "cp", inspectorPath, fmt.Sprintf("%s:/inspect", containerID)) + if output, err := copyCmd.CombinedOutput(); err != nil { + return fmt.Errorf("failed to copy inspector to container: %v\n%s", err, output) + } + + // Build the command arguments + dockerArgs := []string{"exec", containerID, "/inspect"} + if args.JSON { + dockerArgs = append(dockerArgs, "--json") + } + if args.Summary { + dockerArgs = append(dockerArgs, "--summary") + } + if args.Pattern != "" { + dockerArgs = append(dockerArgs, "--glob", args.Pattern) + } + if args.MD5 { + dockerArgs = append(dockerArgs, "--md5") + } + if args.NoTimes { + dockerArgs = append(dockerArgs, "--no-times") + } + if args.Path != "/" { + dockerArgs = append(dockerArgs, "--path", args.Path) + } + + cmd := exec.Command("docker", dockerArgs...) + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + return cmd.Run() +} + +func main() { + var args Args + // Set defaults + args.Summary = false + args.Path = "/" + + arg.MustParse(&args) + + // First, ensure the image exists or can be pulled + pullCmd := exec.Command("docker", "pull", args.Image) + pullCmd.Stderr = os.Stderr + if err := pullCmd.Run(); err != nil { + fmt.Fprintf(os.Stderr, "Failed to pull image %s: %v\n", args.Image, err) + os.Exit(1) + } + + // Start a temporary container + startCmd := exec.Command("docker", "run", "-d", "--entrypoint", "sleep", args.Image, "3600") + output, err := startCmd.CombinedOutput() + if err != nil { + fmt.Fprintf(os.Stderr, "Failed to start container: %v\n%s\n", err, output) + os.Exit(1) + } + + containerID := strings.TrimSpace(string(output)) + if containerID == "" { + fmt.Fprintf(os.Stderr, "Failed to get container ID\n") + os.Exit(1) + } + + // Give the container a moment to start + time.Sleep(1 * time.Second) + + // Ensure container cleanup unless --keep is specified + if !args.Keep { + defer func() { + stopCmd := exec.Command("docker", "rm", "-f", containerID) + stopCmd.Run() + }() + } + + // Run the inspection + if err := runInspector(containerID, args); err != nil { + fmt.Fprintf(os.Stderr, "Inspection failed: %v\n", err) + os.Exit(1) + } + + if args.Keep { + fmt.Printf("\nContainer ID: %s\n", containerID) + } +} diff --git a/cmd/internal-inspector/main.go b/cmd/internal-inspector/main.go new file mode 100644 index 0000000..66bb048 --- /dev/null +++ b/cmd/internal-inspector/main.go @@ -0,0 +1,217 @@ +package main + +import ( + "crypto/md5" + "encoding/hex" + "encoding/json" + "fmt" + "io" + "io/fs" + "os" + "path/filepath" + "sort" + "strings" + "text/tabwriter" + "time" + + "github.com/alexflint/go-arg" + "github.com/bmatcuk/doublestar/v4" +) + +type FileInfo struct { + Path string `json:"path"` + Size int64 `json:"size"` + Mode string `json:"mode"` + ModTime *time.Time `json:"modTime,omitempty"` + IsDir bool `json:"isDir"` + SymlinkTo string `json:"symlinkTo,omitempty"` + User string `json:"user"` + Group string `json:"group"` + MD5 string `json:"md5,omitempty"` +} + +type Args struct { + Path string `arg:"--path" default:"/" help:"path to inspect"` + JSON bool `arg:"--json" help:"output in JSON format"` + Summary bool `arg:"--summary" help:"show summary statistics"` + Pattern string `arg:"--glob" help:"glob pattern for matching files (supports **/)"` + MD5 bool `arg:"--md5" help:"calculate MD5 checksums for files"` + NoTimes bool `arg:"--no-times" help:"exclude modification times from output"` +} + +func calculateMD5(path string) (string, error) { + f, err := os.Open(path) + if err != nil { + return "", err + } + defer f.Close() + + hash := md5.New() + if _, err := io.Copy(hash, f); err != nil { + return "", err + } + + return hex.EncodeToString(hash.Sum(nil)), nil +} + +func main() { + var args Args + // Set defaults + args.Summary = false + args.Path = "/" + + arg.MustParse(&args) + + var files []FileInfo + var totalSize int64 + var dirCount, fileCount, md5Count, md5ErrorCount, skippedCount int + + err := filepath.Walk(args.Path, func(path string, info fs.FileInfo, err error) error { + // Handle path errors gracefully + if err != nil { + // Skip special filesystem errors + if os.IsNotExist(err) || + strings.HasPrefix(path, "/proc") || + strings.HasPrefix(path, "/sys") || + strings.HasPrefix(path, "/dev") { + skippedCount++ + return filepath.SkipDir + } + // For other errors, log and continue + fmt.Fprintf(os.Stderr, "Warning: Cannot access %s: %v\n", path, err) + skippedCount++ + return nil + } + + // Pattern matching if specified + if args.Pattern != "" { + match, err := doublestar.Match(args.Pattern, path) + if err != nil { + return fmt.Errorf("invalid pattern: %v", err) + } + if !match { + return nil + } + } + + // Get symlink target if it's a symlink + symlinkTo := "" + if info.Mode()&os.ModeSymlink != 0 { + symlinkTo, _ = os.Readlink(path) + } + + // Count files and directories + if info.IsDir() { + dirCount++ + } else { + fileCount++ + } + + totalSize += info.Size() + + fileInfo := FileInfo{ + Path: path, + Size: info.Size(), + Mode: info.Mode().String(), + IsDir: info.IsDir(), + SymlinkTo: symlinkTo, + User: "root", + Group: "root", + } + + if !args.NoTimes { + modTime := info.ModTime() + fileInfo.ModTime = &modTime + } + + // Calculate MD5 if requested and file is not a directory + if args.MD5 && !info.IsDir() { + if md5sum, err := calculateMD5(path); err == nil { + fileInfo.MD5 = md5sum + md5Count++ + } else { + md5ErrorCount++ + if args.JSON { + fileInfo.MD5 = fmt.Sprintf("error: %v", err) + } + } + } + + files = append(files, fileInfo) + return nil + }) + + // Change the error handling at the Walk level + if err != nil && !os.IsPermission(err) && !os.IsNotExist(err) { + fmt.Fprintf(os.Stderr, "Error: %v\n", err) + os.Exit(1) + } + + // Sort by path for consistent output + sort.Slice(files, func(i, j int) bool { + return files[i].Path < files[j].Path + }) + + // Output results + if args.JSON { + encoder := json.NewEncoder(os.Stdout) + encoder.SetIndent("", " ") + encoder.Encode(files) + } else { + w := tabwriter.NewWriter(os.Stdout, 0, 0, 1, ' ', 0) + header := "Mode\tSize\tModified\tUser\tGroup\tPath\tSymlink" + if args.MD5 { + header += "\tMD5" + } + fmt.Fprintln(w, header) + + for _, file := range files { + symlink := "" + if file.SymlinkTo != "" { + symlink = "-> " + file.SymlinkTo + } + // Build the line string, conditionally including the time field. + // When NoTimes is true, timeStr will be empty and won't add a tab, + // otherwise it adds both the formatted time and a tab. + timeStr := "" + if !args.NoTimes { + timeStr = file.ModTime.Format("2006-01-02 15:04:05") + "\t" + } + line := fmt.Sprintf("%s\t%d\t%s%s\t%s\t%s\t%s", + file.Mode, + file.Size, + timeStr, + file.User, + file.Group, + file.Path, + symlink, + ) + if args.MD5 { + line += fmt.Sprintf("\t%s", file.MD5) + } + fmt.Fprintln(w, line) + } + w.Flush() + } + + // Print summary if requested + if args.Summary { + out := os.Stdout + if args.JSON { + out = os.Stderr + } + fmt.Fprintf(out, "\nSummary:\n") + fmt.Fprintf(out, "Total size: %d bytes\n", totalSize) + fmt.Fprintf(out, "Directories: %d\n", dirCount) + fmt.Fprintf(out, "Files: %d\n", fileCount) + if skippedCount > 0 { + fmt.Fprintf(out, "Skipped items: %d\n", skippedCount) + } + if args.MD5 { + fmt.Fprintf(out, "MD5 checksums calculated: %d\n", md5Count) + if md5ErrorCount > 0 { + fmt.Fprintf(out, "MD5 calculation errors: %d\n", md5ErrorCount) + } + } + } +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..be7e7f7 --- /dev/null +++ b/go.mod @@ -0,0 +1,10 @@ +module github.com/oderwat/docker-inspector + +go 1.23.2 + +require ( + github.com/alexflint/go-arg v1.5.1 + github.com/bmatcuk/doublestar/v4 v4.7.1 +) + +require github.com/alexflint/go-scalar v1.2.0 // indirect diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..9bdec2b --- /dev/null +++ b/go.sum @@ -0,0 +1,15 @@ +github.com/alexflint/go-arg v1.5.1 h1:nBuWUCpuRy0snAG+uIJ6N0UvYxpxA0/ghA/AaHxlT8Y= +github.com/alexflint/go-arg v1.5.1/go.mod h1:A7vTJzvjoaSTypg4biM5uYNTkJ27SkNTArtYXnlqVO8= +github.com/alexflint/go-scalar v1.2.0 h1:WR7JPKkeNpnYIOfHRa7ivM21aWAdHD0gEWHCx+WQBRw= +github.com/alexflint/go-scalar v1.2.0/go.mod h1:LoFvNMqS1CPrMVltza4LvnGKhaSpc3oyLEBUZVhhS2o= +github.com/bmatcuk/doublestar/v4 v4.7.1 h1:fdDeAqgT47acgwd9bd9HxJRDmc9UAmPpc+2m0CXv75Q= +github.com/bmatcuk/doublestar/v4 v4.7.1/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +gopkg.in/yaml.v3 v3.0.0 h1:hjy8E9ON/egN1tAYqKb61G10WtihqetD4sz2H+8nIeA= +gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/run1.json b/run1.json new file mode 100644 index 0000000..3398c73 --- /dev/null +++ b/run1.json @@ -0,0 +1,1097 @@ +[ + { + "path": "/etc/adduser.conf", + "size": 3040, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "cc3493ecd2d09837ffdcc3e25fdfff18" + }, + { + "path": "/etc/ca-certificates.conf", + "size": 5989, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "0083a445f620c79579a5f7bfce1d1dab" + }, + { + "path": "/etc/debconf.conf", + "size": 2969, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "8c0619be413824f1fc7698cee0f23811" + }, + { + "path": "/etc/deluser.conf", + "size": 1706, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "11a06baf8245fd8d690b99024d228c1f" + }, + { + "path": "/etc/e2scrub.conf", + "size": 685, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "df38534cc670c70a91cf9b035845d244" + }, + { + "path": "/etc/fonts/conf.avail/20-unhint-small-dejavu-lgc-sans-mono.conf", + "size": 874, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "10d6f2176d76ee9b89a19a17811257f2" + }, + { + "path": "/etc/fonts/conf.avail/20-unhint-small-dejavu-lgc-sans.conf", + "size": 864, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "6488b24401e477e35aa71237054c8ada" + }, + { + "path": "/etc/fonts/conf.avail/20-unhint-small-dejavu-lgc-serif.conf", + "size": 866, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "0b01522fe76b4e5b8ab3d12383371348" + }, + { + "path": "/etc/fonts/conf.avail/20-unhint-small-dejavu-sans-mono.conf", + "size": 866, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "0cbf30e4580c5a8570da071ab12c5e4d" + }, + { + "path": "/etc/fonts/conf.avail/20-unhint-small-dejavu-sans.conf", + "size": 856, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "f7df7bba810dd953dd78212900f4dcad" + }, + { + "path": "/etc/fonts/conf.avail/20-unhint-small-dejavu-serif.conf", + "size": 858, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "e90c678d46f49bb9d6ba469b64e80c0c" + }, + { + "path": "/etc/fonts/conf.avail/57-dejavu-sans-mono.conf", + "size": 1201, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "b9a76edd2aeb35cd1095e378963e2cdd" + }, + { + "path": "/etc/fonts/conf.avail/57-dejavu-sans.conf", + "size": 1711, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "2156c2353cfcc81f33150cf889193c28" + }, + { + "path": "/etc/fonts/conf.avail/57-dejavu-serif.conf", + "size": 1357, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "2604487cb2eee1bdb7010ea716faf408" + }, + { + "path": "/etc/fonts/conf.avail/58-dejavu-lgc-sans-mono.conf", + "size": 1545, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "d2ee39274982cb4f831783cff742c8bc" + }, + { + "path": "/etc/fonts/conf.avail/58-dejavu-lgc-sans.conf", + "size": 2063, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "b4a8f51e45aa24fdee47b3f838cc0205" + }, + { + "path": "/etc/fonts/conf.avail/58-dejavu-lgc-serif.conf", + "size": 1689, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "5f0b00e681b1f40b65dd336696ee0bbb" + }, + { + "path": "/etc/fonts/conf.d/10-hinting-slight.conf", + "size": 55, + "mode": "Lrwxrwxrwx", + "isDir": false, + "symlinkTo": "/usr/share/fontconfig/conf.avail/10-hinting-slight.conf", + "user": "root", + "group": "root", + "md5": "5da52d777c5af2cb4b7445b81ead6c3d" + }, + { + "path": "/etc/fonts/conf.d/10-scale-bitmap-fonts.conf", + "size": 59, + "mode": "Lrwxrwxrwx", + "isDir": false, + "symlinkTo": "/usr/share/fontconfig/conf.avail/10-scale-bitmap-fonts.conf", + "user": "root", + "group": "root", + "md5": "8588f87eaf68a1eb73920066f6817b48" + }, + { + "path": "/etc/fonts/conf.d/10-yes-antialias.conf", + "size": 54, + "mode": "Lrwxrwxrwx", + "isDir": false, + "symlinkTo": "/usr/share/fontconfig/conf.avail/10-yes-antialias.conf", + "user": "root", + "group": "root", + "md5": "908d9e324c24bf809448ca7041db580b" + }, + { + "path": "/etc/fonts/conf.d/11-lcdfilter-default.conf", + "size": 58, + "mode": "Lrwxrwxrwx", + "isDir": false, + "symlinkTo": "/usr/share/fontconfig/conf.avail/11-lcdfilter-default.conf", + "user": "root", + "group": "root", + "md5": "4dd5ffa8e7c3448e76fe1bbe2f3df871" + }, + { + "path": "/etc/fonts/conf.d/20-unhint-small-dejavu-lgc-sans-mono.conf", + "size": 55, + "mode": "Lrwxrwxrwx", + "isDir": false, + "symlinkTo": "../conf.avail/20-unhint-small-dejavu-lgc-sans-mono.conf", + "user": "root", + "group": "root", + "md5": "10d6f2176d76ee9b89a19a17811257f2" + }, + { + "path": "/etc/fonts/conf.d/20-unhint-small-dejavu-lgc-sans.conf", + "size": 50, + "mode": "Lrwxrwxrwx", + "isDir": false, + "symlinkTo": "../conf.avail/20-unhint-small-dejavu-lgc-sans.conf", + "user": "root", + "group": "root", + "md5": "6488b24401e477e35aa71237054c8ada" + }, + { + "path": "/etc/fonts/conf.d/20-unhint-small-dejavu-lgc-serif.conf", + "size": 51, + "mode": "Lrwxrwxrwx", + "isDir": false, + "symlinkTo": "../conf.avail/20-unhint-small-dejavu-lgc-serif.conf", + "user": "root", + "group": "root", + "md5": "0b01522fe76b4e5b8ab3d12383371348" + }, + { + "path": "/etc/fonts/conf.d/20-unhint-small-dejavu-sans-mono.conf", + "size": 51, + "mode": "Lrwxrwxrwx", + "isDir": false, + "symlinkTo": "../conf.avail/20-unhint-small-dejavu-sans-mono.conf", + "user": "root", + "group": "root", + "md5": "0cbf30e4580c5a8570da071ab12c5e4d" + }, + { + "path": "/etc/fonts/conf.d/20-unhint-small-dejavu-sans.conf", + "size": 46, + "mode": "Lrwxrwxrwx", + "isDir": false, + "symlinkTo": "../conf.avail/20-unhint-small-dejavu-sans.conf", + "user": "root", + "group": "root", + "md5": "f7df7bba810dd953dd78212900f4dcad" + }, + { + "path": "/etc/fonts/conf.d/20-unhint-small-dejavu-serif.conf", + "size": 47, + "mode": "Lrwxrwxrwx", + "isDir": false, + "symlinkTo": "../conf.avail/20-unhint-small-dejavu-serif.conf", + "user": "root", + "group": "root", + "md5": "e90c678d46f49bb9d6ba469b64e80c0c" + }, + { + "path": "/etc/fonts/conf.d/20-unhint-small-vera.conf", + "size": 58, + "mode": "Lrwxrwxrwx", + "isDir": false, + "symlinkTo": "/usr/share/fontconfig/conf.avail/20-unhint-small-vera.conf", + "user": "root", + "group": "root", + "md5": "535df1a3aed553ced27e176639e4b541" + }, + { + "path": "/etc/fonts/conf.d/30-metric-aliases.conf", + "size": 55, + "mode": "Lrwxrwxrwx", + "isDir": false, + "symlinkTo": "/usr/share/fontconfig/conf.avail/30-metric-aliases.conf", + "user": "root", + "group": "root", + "md5": "7be41db6d316caacc8978247ff444f29" + }, + { + "path": "/etc/fonts/conf.d/40-nonlatin.conf", + "size": 49, + "mode": "Lrwxrwxrwx", + "isDir": false, + "symlinkTo": "/usr/share/fontconfig/conf.avail/40-nonlatin.conf", + "user": "root", + "group": "root", + "md5": "c3cf056712b96dbef771f29c6b1d0655" + }, + { + "path": "/etc/fonts/conf.d/45-generic.conf", + "size": 48, + "mode": "Lrwxrwxrwx", + "isDir": false, + "symlinkTo": "/usr/share/fontconfig/conf.avail/45-generic.conf", + "user": "root", + "group": "root", + "md5": "6eb7544e52701729de1bc87c7e03b155" + }, + { + "path": "/etc/fonts/conf.d/45-latin.conf", + "size": 46, + "mode": "Lrwxrwxrwx", + "isDir": false, + "symlinkTo": "/usr/share/fontconfig/conf.avail/45-latin.conf", + "user": "root", + "group": "root", + "md5": "a4d73455619dd836ecd6c711d7d6b522" + }, + { + "path": "/etc/fonts/conf.d/48-spacing.conf", + "size": 48, + "mode": "Lrwxrwxrwx", + "isDir": false, + "symlinkTo": "/usr/share/fontconfig/conf.avail/48-spacing.conf", + "user": "root", + "group": "root", + "md5": "9ef1b86cdc752b8765d2d1531e799cc1" + }, + { + "path": "/etc/fonts/conf.d/49-sansserif.conf", + "size": 50, + "mode": "Lrwxrwxrwx", + "isDir": false, + "symlinkTo": "/usr/share/fontconfig/conf.avail/49-sansserif.conf", + "user": "root", + "group": "root", + "md5": "fb5873c73e8ea39848ffb07a8d87d8cb" + }, + { + "path": "/etc/fonts/conf.d/50-user.conf", + "size": 45, + "mode": "Lrwxrwxrwx", + "isDir": false, + "symlinkTo": "/usr/share/fontconfig/conf.avail/50-user.conf", + "user": "root", + "group": "root", + "md5": "acde2cbca39bb6261deea4e6e4bf597e" + }, + { + "path": "/etc/fonts/conf.d/51-local.conf", + "size": 46, + "mode": "Lrwxrwxrwx", + "isDir": false, + "symlinkTo": "/usr/share/fontconfig/conf.avail/51-local.conf", + "user": "root", + "group": "root", + "md5": "99b54670882634722fada39c78a39863" + }, + { + "path": "/etc/fonts/conf.d/57-dejavu-sans-mono.conf", + "size": 38, + "mode": "Lrwxrwxrwx", + "isDir": false, + "symlinkTo": "../conf.avail/57-dejavu-sans-mono.conf", + "user": "root", + "group": "root", + "md5": "b9a76edd2aeb35cd1095e378963e2cdd" + }, + { + "path": "/etc/fonts/conf.d/57-dejavu-sans.conf", + "size": 33, + "mode": "Lrwxrwxrwx", + "isDir": false, + "symlinkTo": "../conf.avail/57-dejavu-sans.conf", + "user": "root", + "group": "root", + "md5": "2156c2353cfcc81f33150cf889193c28" + }, + { + "path": "/etc/fonts/conf.d/57-dejavu-serif.conf", + "size": 34, + "mode": "Lrwxrwxrwx", + "isDir": false, + "symlinkTo": "../conf.avail/57-dejavu-serif.conf", + "user": "root", + "group": "root", + "md5": "2604487cb2eee1bdb7010ea716faf408" + }, + { + "path": "/etc/fonts/conf.d/58-dejavu-lgc-sans-mono.conf", + "size": 42, + "mode": "Lrwxrwxrwx", + "isDir": false, + "symlinkTo": "../conf.avail/58-dejavu-lgc-sans-mono.conf", + "user": "root", + "group": "root", + "md5": "d2ee39274982cb4f831783cff742c8bc" + }, + { + "path": "/etc/fonts/conf.d/58-dejavu-lgc-sans.conf", + "size": 37, + "mode": "Lrwxrwxrwx", + "isDir": false, + "symlinkTo": "../conf.avail/58-dejavu-lgc-sans.conf", + "user": "root", + "group": "root", + "md5": "b4a8f51e45aa24fdee47b3f838cc0205" + }, + { + "path": "/etc/fonts/conf.d/58-dejavu-lgc-serif.conf", + "size": 38, + "mode": "Lrwxrwxrwx", + "isDir": false, + "symlinkTo": "../conf.avail/58-dejavu-lgc-serif.conf", + "user": "root", + "group": "root", + "md5": "5f0b00e681b1f40b65dd336696ee0bbb" + }, + { + "path": "/etc/fonts/conf.d/60-generic.conf", + "size": 48, + "mode": "Lrwxrwxrwx", + "isDir": false, + "symlinkTo": "/usr/share/fontconfig/conf.avail/60-generic.conf", + "user": "root", + "group": "root", + "md5": "381ad51b6c9a0c578c7176ae47481985" + }, + { + "path": "/etc/fonts/conf.d/60-latin.conf", + "size": 46, + "mode": "Lrwxrwxrwx", + "isDir": false, + "symlinkTo": "/usr/share/fontconfig/conf.avail/60-latin.conf", + "user": "root", + "group": "root", + "md5": "887f091506809fe493dd452a40cf97ab" + }, + { + "path": "/etc/fonts/conf.d/65-fonts-persian.conf", + "size": 54, + "mode": "Lrwxrwxrwx", + "isDir": false, + "symlinkTo": "/usr/share/fontconfig/conf.avail/65-fonts-persian.conf", + "user": "root", + "group": "root", + "md5": "b04584ac948140f0c6af958b87f0a734" + }, + { + "path": "/etc/fonts/conf.d/65-nonlatin.conf", + "size": 49, + "mode": "Lrwxrwxrwx", + "isDir": false, + "symlinkTo": "/usr/share/fontconfig/conf.avail/65-nonlatin.conf", + "user": "root", + "group": "root", + "md5": "8c99b94356bc5b76767ccfbc8651ba21" + }, + { + "path": "/etc/fonts/conf.d/69-unifont.conf", + "size": 48, + "mode": "Lrwxrwxrwx", + "isDir": false, + "symlinkTo": "/usr/share/fontconfig/conf.avail/69-unifont.conf", + "user": "root", + "group": "root", + "md5": "50c85de35a0dc211f7222ae974df7f3a" + }, + { + "path": "/etc/fonts/conf.d/70-no-bitmaps.conf", + "size": 51, + "mode": "Lrwxrwxrwx", + "isDir": false, + "symlinkTo": "/usr/share/fontconfig/conf.avail/70-no-bitmaps.conf", + "user": "root", + "group": "root", + "md5": "4076437ae2a2d0fd638d529303affbc3" + }, + { + "path": "/etc/fonts/conf.d/80-delicious.conf", + "size": 50, + "mode": "Lrwxrwxrwx", + "isDir": false, + "symlinkTo": "/usr/share/fontconfig/conf.avail/80-delicious.conf", + "user": "root", + "group": "root", + "md5": "bf3e2f77fdab77b46f9f793dcfa267f8" + }, + { + "path": "/etc/fonts/conf.d/90-synthetic.conf", + "size": 50, + "mode": "Lrwxrwxrwx", + "isDir": false, + "symlinkTo": "/usr/share/fontconfig/conf.avail/90-synthetic.conf", + "user": "root", + "group": "root", + "md5": "3202b57ed004b0828d6e2e70f56d951d" + }, + { + "path": "/etc/fonts/fonts.conf", + "size": 2940, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "9632eb1c8b4d81e0e300cd733a4beefe" + }, + { + "path": "/etc/gai.conf", + "size": 2584, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "28fa76ff5a9e0566eaa1e11f1ce51f09" + }, + { + "path": "/etc/host.conf", + "size": 9, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "4eb63731c9f5e30903ac4fc07a7fe3d6" + }, + { + "path": "/etc/ld.so.conf", + "size": 34, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "4317c6de8564b68d628c21efa96b37e4" + }, + { + "path": "/etc/ld.so.conf.d/libc.conf", + "size": 44, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "d4d833fd095fb7b90e1bb4a547f16de6" + }, + { + "path": "/etc/ld.so.conf.d/x86_64-linux-gnu.conf", + "size": 100, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "d4e7a7b88a71b5ffd9e2644e71a0cfab" + }, + { + "path": "/etc/libaudit.conf", + "size": 191, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "cdc703f9d27f0d980271a9e95d0f18b2" + }, + { + "path": "/etc/mke2fs.conf", + "size": 782, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "6a2103e33d9e48b5f6f3190045c37561" + }, + { + "path": "/etc/nginx/conf.d/default.conf", + "size": 1072, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "25c02145e4a2e1d2bc6da5d585cddd32" + }, + { + "path": "/etc/nginx/nginx.conf", + "size": 648, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "756e7eaae19e95b5f49ce81e73b10512" + }, + { + "path": "/etc/nsswitch.conf", + "size": 494, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "5e81a875064719ea46f9c300d89bd6fd" + }, + { + "path": "/etc/pam.conf", + "size": 552, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "87fc76f18e98ee7d3848f6b81b3391e5" + }, + { + "path": "/etc/resolv.conf", + "size": 222, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "040242d397aedd5abc1960861630d27b" + }, + { + "path": "/etc/security/access.conf", + "size": 4564, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "dc21d0fd769d655b311d785670e5c6ae" + }, + { + "path": "/etc/security/faillock.conf", + "size": 2234, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "164da8ffb87f3074179bc60b71d0b99f" + }, + { + "path": "/etc/security/group.conf", + "size": 3635, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "f1e26e8db6f7abd2d697d7dad3422c36" + }, + { + "path": "/etc/security/limits.conf", + "size": 2752, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "0b1967ff9042a716ce6b01cb999aa1f5" + }, + { + "path": "/etc/security/namespace.conf", + "size": 1637, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "6b3796403421d66db7defc46517711bc" + }, + { + "path": "/etc/security/pam_env.conf", + "size": 2971, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "89cc8702173d5cd51abc152ae9f8d6bc" + }, + { + "path": "/etc/security/sepermit.conf", + "size": 418, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "3d82df292d497bbeaaf8ebef18cd14f1" + }, + { + "path": "/etc/security/time.conf", + "size": 2179, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "06e05c6079e839c8833ac7c3abfde192" + }, + { + "path": "/etc/selinux/semanage.conf", + "size": 2065, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "8e8dfac33a09c1b53ca08bf6d4201b10" + }, + { + "path": "/etc/xattr.conf", + "size": 681, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "743ca3f83ea263f1f56ad1f63f907bdb" + }, + { + "path": "/usr/lib/tmpfiles.d/passwd.conf", + "size": 239, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "fd813ae6329b77cb59bac8961e613bf0" + }, + { + "path": "/usr/lib/x86_64-linux-gnu/gconv/gconv-modules.d/gconv-modules-extra.conf", + "size": 53974, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "1f95f96ce0b169c59d2c51cfdec46eab" + }, + { + "path": "/usr/share/debconf/debconf.conf", + "size": 414, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "b5ce961d3b91bfaa5ec56d99f7dc4b8d" + }, + { + "path": "/usr/share/fontconfig/conf.avail/05-reset-dirs-sample.conf", + "size": 213, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "3afa30c28051ba4ceb3e1979fc460bee" + }, + { + "path": "/usr/share/fontconfig/conf.avail/09-autohint-if-no-hinting.conf", + "size": 717, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "4e7985a85a60dad1b44aee2f418eaa0c" + }, + { + "path": "/usr/share/fontconfig/conf.avail/10-autohint.conf", + "size": 630, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "a7001cead7c337fa02359926c4d71dfa" + }, + { + "path": "/usr/share/fontconfig/conf.avail/10-hinting-full.conf", + "size": 616, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "d7bed3a1b6716b8d87c528bd7db0e59e" + }, + { + "path": "/usr/share/fontconfig/conf.avail/10-hinting-medium.conf", + "size": 620, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "fa8777b5ef1afba5d935f3b6475a03c7" + }, + { + "path": "/usr/share/fontconfig/conf.avail/10-hinting-none.conf", + "size": 616, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "8fdd0076e7874521576de0ede438ad0b" + }, + { + "path": "/usr/share/fontconfig/conf.avail/10-hinting-slight.conf", + "size": 620, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "5da52d777c5af2cb4b7445b81ead6c3d" + }, + { + "path": "/usr/share/fontconfig/conf.avail/10-no-antialias.conf", + "size": 260, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "abc0049fafa172cef7723547b8984c02" + }, + { + "path": "/usr/share/fontconfig/conf.avail/10-no-sub-pixel.conf", + "size": 647, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "3b917873967397433a44ddff38568ce8" + }, + { + "path": "/usr/share/fontconfig/conf.avail/10-scale-bitmap-fonts.conf", + "size": 2068, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "8588f87eaf68a1eb73920066f6817b48" + }, + { + "path": "/usr/share/fontconfig/conf.avail/10-sub-pixel-bgr.conf", + "size": 672, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "1e33def77f5a7a289d240b903d669561" + }, + { + "path": "/usr/share/fontconfig/conf.avail/10-sub-pixel-rgb.conf", + "size": 672, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "e58e3be3a96cfa19b6cc53f27845e65a" + }, + { + "path": "/usr/share/fontconfig/conf.avail/10-sub-pixel-vbgr.conf", + "size": 682, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "b889df9e6b61c11ad86f906a4bf2450a" + }, + { + "path": "/usr/share/fontconfig/conf.avail/10-sub-pixel-vrgb.conf", + "size": 682, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "2b863fb3d17c36dfbe7f496dc9c73107" + }, + { + "path": "/usr/share/fontconfig/conf.avail/10-unhinted.conf", + "size": 625, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "67a28bdc6fd1289bd6eb22de56516fae" + }, + { + "path": "/usr/share/fontconfig/conf.avail/10-yes-antialias.conf", + "size": 258, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "908d9e324c24bf809448ca7041db580b" + }, + { + "path": "/usr/share/fontconfig/conf.avail/11-lcdfilter-default.conf", + "size": 695, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "4dd5ffa8e7c3448e76fe1bbe2f3df871" + }, + { + "path": "/usr/share/fontconfig/conf.avail/11-lcdfilter-legacy.conf", + "size": 692, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "103cccfe6ec9df81d344fe010ad4f002" + }, + { + "path": "/usr/share/fontconfig/conf.avail/11-lcdfilter-light.conf", + "size": 689, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "93991270f397bea2c965a8c97a0fa50e" + }, + { + "path": "/usr/share/fontconfig/conf.avail/20-unhint-small-vera.conf", + "size": 1377, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "535df1a3aed553ced27e176639e4b541" + }, + { + "path": "/usr/share/fontconfig/conf.avail/25-unhint-nonlatin.conf", + "size": 3329, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "99badbcb331e7195fe0f66430413375f" + }, + { + "path": "/usr/share/fontconfig/conf.avail/30-metric-aliases.conf", + "size": 13234, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "7be41db6d316caacc8978247ff444f29" + }, + { + "path": "/usr/share/fontconfig/conf.avail/35-lang-normalize.conf", + "size": 42037, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "4e33e79a78bc52268c24a0067394bdcd" + }, + { + "path": "/usr/share/fontconfig/conf.avail/40-nonlatin.conf", + "size": 7981, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "c3cf056712b96dbef771f29c6b1d0655" + }, + { + "path": "/usr/share/fontconfig/conf.avail/45-generic.conf", + "size": 3490, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "6eb7544e52701729de1bc87c7e03b155" + }, + { + "path": "/usr/share/fontconfig/conf.avail/45-latin.conf", + "size": 7055, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "a4d73455619dd836ecd6c711d7d6b522" + }, + { + "path": "/usr/share/fontconfig/conf.avail/48-spacing.conf", + "size": 441, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "9ef1b86cdc752b8765d2d1531e799cc1" + }, + { + "path": "/usr/share/fontconfig/conf.avail/49-sansserif.conf", + "size": 639, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "fb5873c73e8ea39848ffb07a8d87d8cb" + }, + { + "path": "/usr/share/fontconfig/conf.avail/50-user.conf", + "size": 751, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "acde2cbca39bb6261deea4e6e4bf597e" + }, + { + "path": "/usr/share/fontconfig/conf.avail/51-local.conf", + "size": 263, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "99b54670882634722fada39c78a39863" + }, + { + "path": "/usr/share/fontconfig/conf.avail/60-generic.conf", + "size": 1911, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "381ad51b6c9a0c578c7176ae47481985" + }, + { + "path": "/usr/share/fontconfig/conf.avail/60-latin.conf", + "size": 2136, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "887f091506809fe493dd452a40cf97ab" + }, + { + "path": "/usr/share/fontconfig/conf.avail/65-fonts-persian.conf", + "size": 10132, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "b04584ac948140f0c6af958b87f0a734" + }, + { + "path": "/usr/share/fontconfig/conf.avail/65-khmer.conf", + "size": 304, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "b1c4fab66d44c99bfaf07ca5719fe645" + }, + { + "path": "/usr/share/fontconfig/conf.avail/65-nonlatin.conf", + "size": 9127, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "8c99b94356bc5b76767ccfbc8651ba21" + }, + { + "path": "/usr/share/fontconfig/conf.avail/69-unifont.conf", + "size": 687, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "50c85de35a0dc211f7222ae974df7f3a" + }, + { + "path": "/usr/share/fontconfig/conf.avail/70-force-bitmaps.conf", + "size": 327, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "a9866f60b8a23e11e4fbb952e10c910c" + }, + { + "path": "/usr/share/fontconfig/conf.avail/70-no-bitmaps.conf", + "size": 327, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "4076437ae2a2d0fd638d529303affbc3" + }, + { + "path": "/usr/share/fontconfig/conf.avail/70-yes-bitmaps.conf", + "size": 77, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "91c414090c7d8bfe557785fe845cb6bd" + }, + { + "path": "/usr/share/fontconfig/conf.avail/80-delicious.conf", + "size": 437, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "bf3e2f77fdab77b46f9f793dcfa267f8" + }, + { + "path": "/usr/share/fontconfig/conf.avail/90-synthetic.conf", + "size": 1757, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "3202b57ed004b0828d6e2e70f56d951d" + }, + { + "path": "/usr/share/libc-bin/nsswitch.conf", + "size": 494, + "mode": "-rw-r--r--", + "isDir": false, + "user": "root", + "group": "root", + "md5": "5e81a875064719ea46f9c300d89bd6fd" + } +]