{"id":11,"date":"2026-04-18T22:47:41","date_gmt":"2026-04-18T22:47:41","guid":{"rendered":"https:\/\/tech.kelsey-mcguire.com\/?page_id=11"},"modified":"2026-04-18T22:48:50","modified_gmt":"2026-04-18T22:48:50","slug":"chmod-calculator","status":"publish","type":"page","link":"https:\/\/tech.kelsey-mcguire.com\/?page_id=11","title":{"rendered":"chmod-calculator"},"content":{"rendered":"    <div id=\"chmod-tool\" style=\"max-width:700px;padding:20px;border:1px solid #ddd;border-radius:8px;margin:20px 0;\">\n        <h3>Chmod Calculator<\/h3>\n        <p>Select permissions for user, group, and others to generate numeric and symbolic chmod values.<\/p>\n\n        <table style=\"width:100%;border-collapse:collapse;margin-bottom:15px;\">\n            <thead>\n                <tr>\n                    <th style=\"border:1px solid #ddd;padding:8px;text-align:center;\"><\/th>\n                    <th style=\"border:1px solid #ddd;padding:8px;text-align:center;\">Read (4)<\/th>\n                    <th style=\"border:1px solid #ddd;padding:8px;text-align:center;\">Write (2)<\/th>\n                    <th style=\"border:1px solid #ddd;padding:8px;text-align:center;\">Execute (1)<\/th>\n                <\/tr>\n            <\/thead>\n            <tbody>\n                <tr>\n                    <td style=\"border:1px solid #ddd;padding:8px;text-align:center;\"><strong>User<\/strong><\/td>\n                    <td style=\"border:1px solid #ddd;padding:8px;text-align:center;\"><input type=\"checkbox\" class=\"perm\" data-group=\"user\" data-value=\"4\"><\/td>\n                    <td style=\"border:1px solid #ddd;padding:8px;text-align:center;\"><input type=\"checkbox\" class=\"perm\" data-group=\"user\" data-value=\"2\"><\/td>\n                    <td style=\"border:1px solid #ddd;padding:8px;text-align:center;\"><input type=\"checkbox\" class=\"perm\" data-group=\"user\" data-value=\"1\"><\/td>\n                <\/tr>\n                <tr>\n                    <td style=\"border:1px solid #ddd;padding:8px;text-align:center;\"><strong>Group<\/strong><\/td>\n                    <td style=\"border:1px solid #ddd;padding:8px;text-align:center;\"><input type=\"checkbox\" class=\"perm\" data-group=\"group\" data-value=\"4\"><\/td>\n                    <td style=\"border:1px solid #ddd;padding:8px;text-align:center;\"><input type=\"checkbox\" class=\"perm\" data-group=\"group\" data-value=\"2\"><\/td>\n                    <td style=\"border:1px solid #ddd;padding:8px;text-align:center;\"><input type=\"checkbox\" class=\"perm\" data-group=\"group\" data-value=\"1\"><\/td>\n                <\/tr>\n                <tr>\n                    <td style=\"border:1px solid #ddd;padding:8px;text-align:center;\"><strong>Others<\/strong><\/td>\n                    <td style=\"border:1px solid #ddd;padding:8px;text-align:center;\"><input type=\"checkbox\" class=\"perm\" data-group=\"other\" data-value=\"4\"><\/td>\n                    <td style=\"border:1px solid #ddd;padding:8px;text-align:center;\"><input type=\"checkbox\" class=\"perm\" data-group=\"other\" data-value=\"2\"><\/td>\n                    <td style=\"border:1px solid #ddd;padding:8px;text-align:center;\"><input type=\"checkbox\" class=\"perm\" data-group=\"other\" data-value=\"1\"><\/td>\n                <\/tr>\n            <\/tbody>\n        <\/table>\n\n        <div style=\"margin-bottom:15px;\">\n            <h4 style=\"margin-bottom:5px;\">Numeric<\/h4>\n            <div id=\"chmod-result\" style=\"font-size:28px;font-weight:bold;\">000<\/div>\n        <\/div>\n\n        <div style=\"margin-bottom:15px;\">\n            <h4 style=\"margin-bottom:5px;\">Symbolic<\/h4>\n            <div id=\"chmod-symbolic\" style=\"font-size:20px;font-family:monospace;\">---------<\/div>\n        <\/div>\n\n        <div style=\"margin-bottom:15px;\">\n            <h4 style=\"margin-bottom:5px;\">Command<\/h4>\n            <code id=\"chmod-command\" style=\"display:block;padding:10px;background:#f6f6f6;border:1px solid #ddd;\">chmod 000 filename<\/code>\n        <\/div>\n\n        <div>\n            <h4 style=\"margin-bottom:5px;\">Common Values<\/h4>\n            <ul style=\"margin:0 0 0 20px;\">\n                <li><strong>644<\/strong> = rw-r--r--<\/li>\n                <li><strong>755<\/strong> = rwxr-xr-x<\/li>\n                <li><strong>775<\/strong> = rwxrwxr-x<\/li>\n                <li><strong>700<\/strong> = rwx------<\/li>\n            <\/ul>\n        <\/div>\n    <\/div>\n\n    <script>\n    document.addEventListener(\"DOMContentLoaded\", function () {\n        const tool = document.getElementById(\"chmod-tool\");\n        if (!tool) {\n            return;\n        }\n\n        const checkboxes = tool.querySelectorAll(\".perm\");\n        const resultEl = document.getElementById(\"chmod-result\");\n        const symbolicEl = document.getElementById(\"chmod-symbolic\");\n        const commandEl = document.getElementById(\"chmod-command\");\n\n        function permStr(val) {\n            return (val & 4 ? 'r' : '-') +\n                   (val & 2 ? 'w' : '-') +\n                   (val & 1 ? 'x' : '-');\n        }\n\n        function calculateChmod() {\n            const groups = { user: 0, group: 0, other: 0 };\n\n            tool.querySelectorAll(\".perm:checked\").forEach(function (cb) {\n                const group = cb.dataset.group;\n                const value = parseInt(cb.dataset.value, 10);\n                groups[group] += value;\n            });\n\n            const numeric = '' + groups.user + groups.group + groups.other;\n            const symbolic = permStr(groups.user) + permStr(groups.group) + permStr(groups.other);\n\n            resultEl.textContent = numeric;\n            symbolicEl.textContent = symbolic;\n            commandEl.textContent = 'chmod ' + numeric + ' filename';\n        }\n\n        checkboxes.forEach(function (cb) {\n            cb.addEventListener(\"change\", calculateChmod);\n        });\n\n        calculateChmod();\n    });\n    <\/script>\n    \n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-11","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/tech.kelsey-mcguire.com\/index.php?rest_route=\/wp\/v2\/pages\/11","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tech.kelsey-mcguire.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/tech.kelsey-mcguire.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/tech.kelsey-mcguire.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tech.kelsey-mcguire.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=11"}],"version-history":[{"count":2,"href":"https:\/\/tech.kelsey-mcguire.com\/index.php?rest_route=\/wp\/v2\/pages\/11\/revisions"}],"predecessor-version":[{"id":13,"href":"https:\/\/tech.kelsey-mcguire.com\/index.php?rest_route=\/wp\/v2\/pages\/11\/revisions\/13"}],"wp:attachment":[{"href":"https:\/\/tech.kelsey-mcguire.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=11"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}