āĻ¯āĻ–āĻ¨ āĻāĻ•āĻŸāĻŋ āĻāĻ¨āĻ­āĻžāĻ¯āĻŧāĻ°āĻ¨āĻŽā§‡āĻ¨ā§āĻŸ āĻ­ā§‡āĻ°āĻŋāĻ¯āĻŧā§‡āĻŦāĻ˛ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻŸāĻŋāĻ•ā§‡ 40 āĻ—ā§āĻŖ āĻŦāĻžāĻĄāĻŧāĻŋāĻ¯āĻŧā§‡ āĻĻā§‡āĻ¯āĻŧ

āĻ†āĻœ āĻ†āĻŽāĻ°āĻž āĻļāĻžāĻ°ā§āĻ˛āĻ• āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āĻ° āĻ¸āĻžāĻŽā§āĻĒā§āĻ°āĻ¤āĻŋāĻ• āĻ•āĻŋāĻ›ā§ āĻ†āĻĒāĻĄā§‡āĻŸ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ•āĻĨāĻž āĻŦāĻ˛āĻ¤ā§‡ āĻšāĻžāĻ‡ [āĻāĻŸāĻŋ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨āĻĢā§‹āĻ°ā§āĻĄ āĻ‡āĻ‰āĻ¨āĻŋāĻ­āĻžāĻ°ā§āĻ¸āĻŋāĻŸāĻŋāĻ° āĻāĻ•āĻŸāĻŋ āĻ‰āĻšā§āĻš-āĻĒāĻžāĻ°āĻĢāĻ°āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¸ āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ° - āĻĒā§āĻ°āĻžāĻ¯āĻŧāĨ¤ trans.], āĻ¯āĻž āĻ‰āĻ˛ā§āĻ˛ā§‡āĻ–āĻ¯ā§‹āĻ—ā§āĻ¯āĻ­āĻžāĻŦā§‡ āĻ¸āĻ‚āĻ–ā§āĻ¯āĻ• āĻāĻ¨ā§āĻŸā§āĻ°āĻŋ āĻ¸āĻš āĻĄāĻŋāĻ°ā§‡āĻ•ā§āĻŸāĻ°āĻŋāĻ¤ā§‡ āĻĢāĻžāĻ‡āĻ˛ āĻ¤āĻžāĻ˛āĻŋāĻ•āĻžāĻ­ā§āĻ•ā§āĻ¤ āĻ•āĻ°āĻžāĻ° āĻ—āĻ¤āĻŋ āĻŦāĻžāĻĄāĻŧāĻžāĻ¯āĻŧāĨ¤

āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻŋāĻ¤ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻ—ā§āĻ˛āĻŋāĻ° āĻŦāĻŋāĻĒāĻ°ā§€āĻ¤ā§‡, āĻāĻŸāĻŋ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻĻā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻ°ā§āĻŦā§‹āĻ¤ā§āĻ¤āĻŽāĻ­āĻžāĻŦā§‡ āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° āĻœāĻ¨ā§āĻ¯ āĻļāĻžāĻ°ā§āĻ˛āĻ•ā§‡āĻ° āĻ‰āĻĒāĻ° āĻ†āĻŽāĻ°āĻž āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻŋāĻ¤ āĻ•āĻžāĻœ āĻ•āĻ°āĻŋ āĻ¤āĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻ…āĻ­ā§āĻ¯āĻ¨ā§āĻ¤āĻ°ā§€āĻŖ āĻĒā§āĻ°āĻ¤āĻŋāĻŦā§‡āĻĻāĻ¨āĨ¤ āĻ†āĻŽāĻ°āĻž āĻ­āĻŦāĻŋāĻˇā§āĻ¯āĻ¤ā§‡ āĻāĻ‡ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻ†āĻ°ā§‹ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ āĻĒā§āĻ°āĻ•āĻžāĻļ āĻ•āĻ°āĻžāĻ° āĻ†āĻļāĻž āĻ•āĻ°āĻŋ.

āĻ…āĻ¨ā§‡āĻ• āĻĢāĻžāĻ‡āĻ˛ āĻ¤āĻžāĻ˛āĻŋāĻ•āĻžāĻ­ā§āĻ•ā§āĻ¤ āĻ•āĻ°āĻ¤ā§‡ āĻ¸āĻŽāĻ¯āĻŧ āĻ˛āĻžāĻ—ā§‡

āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ° āĻ•āĻžāĻ› āĻĨā§‡āĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ¯ā§āĻ•ā§āĻ¤āĻŋāĻ—āĻ¤ āĻ¸āĻšāĻžāĻ¯āĻŧāĻ¤āĻž āĻĒā§āĻ°āĻļā§āĻ¨ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻļā§āĻ°ā§ āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĨ¤ āĻĢāĻžāĻāĻ¸āĻŋ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ°ā§‡āĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧā§‡ āĻ¤āĻŋāĻ¨āĻŋ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻ° āĻ•āĻĨāĻž āĻœāĻžāĻ¨āĻžāĻ¨ ls 15 āĻāĻ° āĻŦā§‡āĻļāĻŋ āĻāĻ¨ā§āĻŸā§āĻ°āĻŋ āĻ¸āĻš āĻāĻ•āĻŸāĻŋ āĻĄāĻŋāĻ°ā§‡āĻ•ā§āĻŸāĻ°āĻŋāĻ¤ā§‡ āĻ•āĻ¯āĻŧā§‡āĻ• āĻŽāĻŋāĻ¨āĻŋāĻŸ āĻ¸āĻŽāĻ¯āĻŧ āĻ˛āĻžāĻ—ā§‡ā§ˇ $SCRATCH [āĻ…āĻ¸ā§āĻĨāĻžāĻ¯āĻŧā§€ āĻĢāĻžāĻ‡āĻ˛ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĄāĻŋāĻ°ā§‡āĻ•ā§āĻŸāĻ°āĻŋ - āĻĒā§āĻ°āĻžāĻ¯āĻŧ. āĻ—āĻ˛āĻŋ]āĨ¤

āĻāĻ•āĻŸāĻŋ āĻĄāĻŋāĻ°ā§‡āĻ•ā§āĻŸāĻ°āĻŋāĻ¤ā§‡ āĻšāĻžāĻœāĻžāĻ° āĻšāĻžāĻœāĻžāĻ° āĻĢāĻžāĻ‡āĻ˛ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ āĻĢāĻžāĻ‡āĻ˛ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻŦā§‹āĻāĻž āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻ…āĻŦāĻļā§āĻ¯āĻ‡ āĻ¸ā§āĻĒāĻžāĻ°āĻŋāĻļ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻ¨āĻžāĨ¤ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻāĻŸāĻŋ āĻœāĻžāĻ¨āĻ¤ā§‡āĻ¨ āĻāĻŦāĻ‚ āĻ¸ā§āĻŦā§€āĻ•āĻžāĻ° āĻ•āĻ°ā§‡āĻ›āĻŋāĻ˛ā§‡āĻ¨ āĻ¯ā§‡ āĻāĻŸāĻŋ āĻ­āĻžāĻ˛ āĻ›āĻŋāĻ˛ āĻ¨āĻž, āĻ¤āĻŦā§‡ āĻ‰āĻ˛ā§āĻ˛ā§‡āĻ– āĻ•āĻ°ā§‡āĻ›ā§‡āĻ¨ āĻ¯ā§‡ āĻ¤āĻžāĻ˛āĻŋāĻ•āĻžāĻŸāĻŋ āĻļāĻžāĻ°ā§āĻ˛āĻ•ā§‡āĻ° āĻšā§‡āĻ¯āĻŧā§‡ āĻ¤āĻžāĻ° āĻ˛ā§āĻ¯āĻžāĻĒāĻŸāĻĒā§‡ 1000 āĻ—ā§āĻŖ āĻĻā§āĻ°ā§āĻ¤ āĻ›āĻŋāĻ˛āĨ¤ āĻ…āĻŦāĻļā§āĻ¯āĻ‡, āĻāĻŸāĻŋ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ•ā§āĻˇāĻ¤āĻŋ āĻ•āĻ°ā§‡āĻ›ā§‡āĨ¤ āĻ¤āĻžāĻ‡ āĻ†āĻŽāĻ°āĻž āĻ†āĻ°āĻ“ āĻ—āĻ­ā§€āĻ°ā§‡ āĻĻā§‡āĻ–āĻ˛āĻžāĻŽāĨ¤

āĻ•āĻžāĻ°āĻŖ ls āĻĻā§‡āĻ–āĻ¤ā§‡ āĻ¸ā§āĻ¨ā§āĻĻāĻ°

āĻ†āĻŽāĻ°āĻž āĻāĻŸāĻž āĻ†āĻ¸āĻ˛ā§‡ āĻ•āĻŋ āĻ¤āĻžāĻ•āĻžāĻ¨ ls āĻāĻ•āĻŸāĻŋ āĻĄāĻŋāĻ°ā§‡āĻ•ā§āĻŸāĻ°āĻŋ āĻ¤āĻžāĻ˛āĻŋāĻ•āĻžāĻ­ā§āĻ•ā§āĻ¤ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻāĻŦāĻ‚ āĻ•ā§‡āĻ¨ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻŸāĻŋ āĻāĻ¤ āĻĻā§€āĻ°ā§āĻ˜ āĻ¸āĻŽāĻ¯āĻŧ āĻ¨ā§‡āĻ¯āĻŧāĨ¤ āĻŦā§‡āĻļāĻŋāĻ°āĻ­āĻžāĻ— āĻ†āĻ§ā§āĻ¨āĻŋāĻ• āĻŦāĻŋāĻ¤āĻ°āĻŖā§‡ ls āĻĄāĻŋāĻĢāĻ˛ā§āĻŸāĻ°ā§‚āĻĒā§‡ āĻāĻŸāĻŋ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ¸āĻžā§āĻšāĻžāĻ˛āĻŋāĻ¤ āĻšāĻ¯āĻŧ ls --color=autoāĻ•āĻžāĻ°āĻŖ āĻ¸āĻŦāĻžāĻ‡ āĻ°āĻ‚ āĻĒāĻ›āĻ¨ā§āĻĻ āĻ•āĻ°ā§‡āĨ¤

āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ¸ā§āĻ¨ā§āĻĻāĻ° āĻ°āĻ‚ āĻāĻ•āĻŸāĻŋ āĻŽā§‚āĻ˛ā§āĻ¯ā§‡ āĻ†āĻ¸ā§‡: āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻĢāĻžāĻ‡āĻ˛ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ ls āĻ‰āĻĒāĻ¯ā§āĻ•ā§āĻ¤ āĻ°āĻ™ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻšāĻ¨ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻĢāĻžāĻ‡āĻ˛ā§‡āĻ° āĻ§āĻ°āĻ¨, āĻāĻ° āĻ…āĻ¨ā§āĻŽāĻ¤āĻŋ, āĻĢā§āĻ˛ā§āĻ¯āĻžāĻ—, āĻŦāĻ°ā§āĻ§āĻŋāĻ¤ āĻŦā§ˆāĻļāĻŋāĻˇā§āĻŸā§āĻ¯ āĻāĻŦāĻ‚ āĻāĻ° āĻŽāĻ¤ā§‹ āĻ¤āĻĨā§āĻ¯ āĻĒā§‡āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤

āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻ¸āĻšāĻœ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻšāĻ˛ ls-āĻ āĻ°āĻ™ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖāĻ­āĻžāĻŦā§‡ āĻ…āĻ•ā§āĻˇāĻŽ āĻ•āĻ°āĻž, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻĻā§‡āĻ° āĻ•ā§āĻˇā§‹āĻ­ āĻ•āĻ˛ā§āĻĒāĻ¨āĻž āĻ•āĻ°ā§āĻ¨āĨ¤ āĻ•ā§‹āĻ¨ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāĻ¤ā§‡āĻ‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ•āĻžāĻ˛āĻžāĻ° āĻ†āĻ‰āĻŸāĻĒā§āĻŸ āĻ•ā§‡āĻĄāĻŧā§‡ āĻ¨ā§‡āĻ“āĻ¯āĻŧāĻž āĻ‰āĻšāĻŋāĻ¤ āĻ¨āĻ¯āĻŧ, āĻ†āĻŽāĻ°āĻž āĻĻāĻžāĻ¨āĻŦ āĻ¨āĻ‡āĨ¤

āĻ¤āĻžāĻ‡ āĻ†āĻŽāĻ°āĻž āĻ†āĻ°āĻ“ āĻ—āĻ­ā§€āĻ°ā§‡ āĻĻā§‡āĻ–āĻ˛āĻžāĻŽāĨ¤ ls āĻĒāĻ°āĻŋāĻŦā§‡āĻļ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻļā§€āĻ˛ āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ°āĻ‚ āĻāĻ¨ā§āĻŸā§āĻ°āĻŋ LS_COLORS, āĻ¯āĻž āĻ¸ā§‡āĻŸ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ dircolors(1) āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ āĻĢāĻžāĻ‡āĻ˛ā§‡āĻ° āĻ‰āĻĒāĻ° āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋ āĻ•āĻ°ā§‡ dir_colors(5)... āĻšā§āĻ¯āĻžāĻ, āĻāĻ•ā§āĻ¸āĻŋāĻ•āĻŋāĻ‰āĻŸā§‡āĻŦāĻ˛ āĻāĻ•āĻŸāĻŋ āĻāĻ¨āĻ­āĻžāĻ¯āĻŧāĻ°āĻ¨āĻŽā§‡āĻ¨ā§āĻŸ āĻ­ā§‡āĻ°āĻŋāĻ¯āĻŧā§‡āĻŦāĻ˛ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ āĻĢāĻžāĻ‡āĻ˛āĻŸāĻŋ āĻĒāĻĄāĻŧā§‡, āĻ¯āĻž ls āĻ¤āĻžāĻ°āĻĒāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ (āĻāĻŦāĻ‚ āĻ¯āĻĻāĻŋ āĻ†āĻĒāĻ¨āĻŋ āĻĢāĻžāĻ‡āĻ˛ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻœāĻžāĻ¨ā§‡āĻ¨ āĻ¨āĻž āĻĻāĻ°āĻœāĻž (do), āĻ¤āĻžāĻ°āĻĒāĻ° dir_colors āĻ•āĻžāĻœ āĻ•āĻ°āĻŦā§‡, āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻ¸āĻ¤ā§āĻ¤ā§āĻŦā§‡āĻ“).

āĻāĻ° āĻāĻ•āĻŸāĻŋ āĻ˜āĻ¨āĻŋāĻˇā§āĻ  āĻ•āĻŸāĻžāĻ•ā§āĻˇāĻĒāĻžāĻ¤ āĻ•āĻ°āĻž āĻ¯āĻžāĻ•

āĻ•ā§‹āĻ¨ āĻ°āĻ™ā§‡āĻ° āĻ¸ā§āĻ•āĻŋāĻŽāĻŸāĻŋ āĻ§ā§€āĻ°āĻ—āĻ¤āĻŋāĻ° āĻ•āĻžāĻ°āĻŖ āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŖ āĻ•āĻ°āĻ¤ā§‡, āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻžāĻŽā§‚āĻ˛āĻ• āĻĒāĻ°āĻŋāĻŦā§‡āĻļ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§‡āĻ›āĻŋ:

$ mkdir $SCRATCH/dont
$ touch $SCRATCH/dont/{1..10000} # don't try this at home!
$ time ls --color=always $SCRATCH/dont | wc -l
10000

real    0m12.758s
user    0m0.104s
sys     0m0.699s

12,7 āĻĢāĻžāĻ‡āĻ˛ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ 10 āĻ¸ā§‡āĻ•ā§‡āĻ¨ā§āĻĄ, āĻ–ā§āĻŦ āĻ­āĻžāĻ˛ā§‹ āĻ¨āĻ¯āĻŧāĨ¤

āĻ¯āĻžāĻ‡āĻšā§‹āĻ•, āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻĒāĻ¤āĻžāĻ•āĻž āĻĻāĻ°āĻ•āĻžāĻ° --color=always: āĻ¯āĻĻāĻŋāĻ“ āĻ¸ā§‡ āĻĢāĻŋāĻ°ā§‡ āĻ†āĻ¸ā§‡ ls --color=autoāĻ•āĻŋāĻ¨ā§āĻ¤ā§ ls āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻŸāĻžāĻ°ā§āĻŽāĻŋāĻ¨āĻžāĻ˛ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻ‚āĻ¯ā§āĻ•ā§āĻ¤ āĻ¨āĻž āĻĨāĻžāĻ•āĻ˛ā§‡ āĻ¸āĻ¨āĻžāĻ•ā§āĻ¤ āĻ•āĻ°ā§‡ (āĻ¯ā§‡āĻŽāĻ¨ āĻĒāĻžāĻ‡āĻĒ āĻĻā§āĻŦāĻžāĻ°āĻž āĻŦāĻž āĻ†āĻ‰āĻŸāĻĒā§āĻŸ āĻĒā§āĻ¨āĻƒāĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļ āĻ¸āĻš) āĻāĻŦāĻ‚ āĻ¸ā§‡āĻŸ āĻ•āĻ°āĻž āĻšāĻ˛ā§‡ āĻ°āĻ™ āĻ¨āĻŋāĻˇā§āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ•āĻ°ā§‡ auto. āĻšāĻžāĻ˛āĻžāĻ• āĻ˛ā§‹āĻ•āĨ¤

āĻ¤āĻžāĻšāĻ˛ā§‡ āĻāĻ¤ āĻ¸āĻŽāĻ¯āĻŧ āĻ•āĻŋ āĻ¨āĻŋāĻšā§āĻ›ā§‡? āĻ†āĻŽāĻ°āĻž āĻ¸āĻ™ā§āĻ—ā§‡ āĻ¤āĻžāĻ•āĻŋāĻ¯āĻŧā§‡ strace:

$ strace -c ls --color=always $SCRATCH/dont | wc -l
10000
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 44.21    0.186617          19     10000           lstat
 42.60    0.179807          18     10000     10000 getxattr
 12.19    0.051438           5     10000           capget
  0.71    0.003002          38        80           getdents
  0.07    0.000305          10        30           mmap
  0.05    0.000217          12        18           mprotect
  0.03    0.000135          14        10           read
  0.03    0.000123          11        11           open
  0.02    0.000082           6        14           close
[...]

āĻŦāĻžāĻš: 10 āĻ•āĻ˛ lstat(), 10 āĻ•āĻ˛ getxattr() (āĻ¯āĻž āĻ¸āĻŦāĻ‡ āĻŦā§āĻ¯āĻ°ā§āĻĨ āĻšāĻ¯āĻŧ āĻ•āĻžāĻ°āĻŖ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĒāĻ°āĻŋāĻŦā§‡āĻļā§‡ āĻāĻŽāĻ¨ āĻŦā§ˆāĻļāĻŋāĻˇā§āĻŸā§āĻ¯ āĻ¨ā§‡āĻ‡ āĻ¯āĻž ls āĻ–ā§āĻāĻœāĻ›ā§‡), 10 āĻ•āĻ˛ capget().

āĻ…āĻŦāĻļā§āĻ¯āĻ‡ āĻāĻ‡ āĻ…āĻĒā§āĻŸāĻŋāĻŽāĻžāĻ‡āĻœ āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡.

āĻ•ā§āĻˇāĻŽāĻ¤āĻž āĻŦā§ˆāĻļāĻŋāĻˇā§āĻŸā§āĻ¯? āĻ¨āĻž

āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļ āĻ…āĻ¨ā§āĻ¸āĻ°āĻŖ 10 āĻŦāĻ›āĻ° āĻ†āĻ—ā§‡āĻ° āĻŦāĻžāĻ—, āĻ†āĻŽāĻ°āĻž āĻ…ā§āĻ¯āĻžāĻŸā§āĻ°āĻŋāĻŦāĻŋāĻ‰āĻŸ āĻšā§‡āĻ•āĻŋāĻ‚ āĻ…āĻ•ā§āĻˇāĻŽ āĻ•āĻ°āĻžāĻ° āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°ā§‡āĻ›āĻŋ āĻ•ā§āĻˇāĻŽāĻ¤āĻž:

$ eval $(dircolors -b | sed s/ca=[^:]*:/ca=:/)
$ time strace -c ls --color=always $SCRATCH/dont | wc -l
10000
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 98.95    0.423443          42     10000           lstat
  0.78    0.003353          42        80           getdents
  0.04    0.000188          10        18           mprotect
  0.04    0.000181           6        30           mmap
  0.02    0.000085           9        10           read
  0.02    0.000084          28         3           mremap
  0.02    0.000077           7        11           open
  0.02    0.000066           5        14           close
[...]
------ ----------- ----------- --------- --------- ----------------
100.00    0.427920                 10221         6 total

real    0m8.160s
user    0m0.115s
sys     0m0.961s

āĻŦāĻžāĻš, āĻ¤ā§āĻŦāĻ°āĻŖ 8 āĻ¸ā§‡āĻ•ā§‡āĻ¨ā§āĻĄ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤! āĻ†āĻŽāĻ°āĻž āĻ¸ā§‡āĻ‡ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻŦā§āĻ¯āĻ¯āĻŧāĻŦāĻšā§āĻ˛ āĻ•āĻ˛ āĻĨā§‡āĻ•ā§‡ āĻŽā§āĻ•ā§āĻ¤āĻŋ āĻĒā§‡āĻ¯āĻŧā§‡āĻ›āĻŋ getxattr(), āĻāĻŦāĻ‚ āĻšā§āĻ¯āĻžāĻ˛ā§‡āĻžā§āĻœ capget() āĻ–ā§āĻŦ āĻ…āĻĻā§ƒāĻļā§āĻ¯ āĻšāĻ¯āĻŧā§‡ āĻ—ā§‡āĻ›ā§‡, āĻĻāĻžāĻ°ā§āĻŖāĨ¤

āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻāĻ–āĻ¨āĻ“ āĻāĻ‡ āĻŦāĻŋāĻ°āĻ•ā§āĻ¤āĻŋāĻ•āĻ° āĻ•āĻ˛ āĻ†āĻ›ā§‡ lstat(), āĻ¯āĻĻāĻŋāĻ“â€Ļ

āĻ†āĻĒāĻ¨āĻžāĻ° āĻ•āĻ¤ āĻĢā§āĻ˛ āĻĻāĻ°āĻ•āĻžāĻ°?

āĻ…āĻ¤āĻāĻŦ, āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻ˜āĻ¨āĻŋāĻˇā§āĻ āĻ­āĻžāĻŦā§‡ āĻĻā§‡āĻ–ā§‡āĻ›āĻŋ LS_COLORS.

āĻĒā§āĻ°āĻĨāĻŽā§‡ āĻ†āĻŽāĻ°āĻž āĻāĻ‡ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻļā§€āĻ˛āĻŸāĻŋāĻ•ā§‡ āĻ¨āĻŋāĻˇā§āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ•āĻ°ā§‡āĻ›āĻŋ:

$ echo $LS_COLORS
rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:
$ unset LS_COLORS
$ echo $LS_COLORS

$  time ls --color=always $SCRATCH/dont | wc -l
10000

real    0m13.037s
user    0m0.077s
sys     0m1.092s

āĻ•āĻŋ!?! āĻāĻ–āĻ¨āĻ“ 13 āĻ¸ā§‡āĻ•ā§‡āĻ¨ā§āĻĄ?

āĻĻā§‡āĻ–āĻž āĻ¯āĻžāĻšā§āĻ›ā§‡ āĻ¯āĻ–āĻ¨ āĻĒāĻ°āĻŋāĻŦā§‡āĻļ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻļā§€āĻ˛ LS_COLORS āĻāĻ° āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨āĻ—ā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ•āĻŸāĻŋ āĻ¸āĻ‚āĻœā§āĻžāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻ¨āĻ¯āĻŧ āĻŦāĻž āĻ…āĻ¨ā§āĻĒāĻ¸ā§āĻĨāĻŋāĻ¤ <type>=color:, āĻāĻŸāĻŋ āĻĄāĻŋāĻĢāĻ˛ā§āĻŸāĻ°ā§‚āĻĒā§‡ āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ¨āĻŋāĻ°ā§āĻŽāĻŋāĻ¤ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻāĻ–āĻ¨āĻ“ āĻ°āĻ‚ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĨ¤ āĻ¸ā§āĻ¤āĻ°āĻžāĻ‚ āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻĢāĻžāĻ‡āĻ˛ āĻĒā§āĻ°āĻ•āĻžāĻ°ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ•āĻžāĻ˛āĻžāĻ°āĻžāĻ‡āĻœā§‡āĻļāĻ¨ āĻ…āĻ•ā§āĻˇāĻŽ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻžāĻ¨ āĻ¤āĻŦā§‡ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻāĻŸāĻŋāĻ•ā§‡ āĻ“āĻ­āĻžāĻ°āĻ°āĻžāĻ‡āĻĄ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ <type>=: āĻŦāĻž <type> 00 āĻĢāĻžāĻ‡āĻ˛ā§‡ DIR_COLORS.

āĻ…āĻ¨ā§‡āĻ• āĻŸā§āĻ°āĻžāĻ¯āĻŧāĻžāĻ˛ āĻāĻŦāĻ‚ āĻ¤ā§āĻ°ā§āĻŸāĻŋāĻ° āĻĒāĻ°ā§‡, āĻ†āĻŽāĻ°āĻž āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ…āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨āĻŸāĻŋ āĻāĻ–āĻžāĻ¨ā§‡ āĻ¸āĻ‚āĻ•ā§āĻšāĻŋāĻ¤ āĻ•āĻ°ā§‡āĻ›āĻŋ:

EXEC 00
SETUID 00
SETGID 00
CAPABILITY 00

āĻ¯āĻž āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ˛ā§‡āĻ–āĻž āĻšāĻ¯āĻŧ

LS_COLORS='ex=00:su=00:sg=00:ca=00:'

āĻāĻ° āĻ…āĻ°ā§āĻĨ: āĻŦā§ˆāĻļāĻŋāĻˇā§āĻŸā§āĻ¯ āĻĻā§āĻŦāĻžāĻ°āĻž āĻĢāĻžāĻ‡āĻ˛āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻ°āĻ™ āĻ•āĻ°āĻŦā§‡āĻ¨ āĻ¨āĻžāĨ¤ āĻ•ā§āĻˇāĻŽāĻ¤āĻž, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻŦāĻŋāĻŸ āĻŦāĻŋāĻŸ setuid/setgid, āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¨āĻž āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻšāĻ¯ā§‹āĻ—ā§āĻ¯āĻ¤āĻž āĻĒāĻ¤āĻžāĻ•āĻž.

āĻ†āĻŽāĻ°āĻž āĻ—āĻ¤āĻŋ āĻŦāĻžāĻĄāĻŧāĻžāĻ‡ ls

āĻāĻŦāĻ‚ āĻ¯āĻĻāĻŋ āĻ†āĻĒāĻ¨āĻŋ āĻāĻ‡ āĻšā§‡āĻ•āĻ—ā§āĻ˛āĻŋāĻ° āĻ•ā§‹āĻ¨āĻŸāĻŋ āĻ¨āĻž āĻ•āĻ°ā§‡āĻ¨ āĻ¤āĻŦā§‡ āĻ•āĻ˛ āĻ•āĻ°ā§āĻ¨ lstat() āĻ…āĻĻā§ƒāĻļā§āĻ¯, āĻāĻŦāĻ‚ āĻāĻ–āĻ¨ āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ­āĻŋāĻ¨ā§āĻ¨ āĻŦāĻŋāĻˇāĻ¯āĻŧ:

$ export LS_COLORS='ex=00:su=00:sg=00:ca=00:'
$ time strace -c ls --color=always $SCRATCH/dont | wc -l
10000
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 63.02    0.002865          36        80           getdents
  8.10    0.000368          12        30           mmap
  5.72    0.000260          14        18           mprotect
  3.72    0.000169          15        11           open
  2.79    0.000127          13        10           read
[...]
------ ----------- ----------- --------- --------- ----------------
100.00    0.004546                   221         6 total

real    0m0.337s
user    0m0.032s
sys     0m0.029s

0,3 āĻĢāĻžāĻ‡āĻ˛ā§‡āĻ° āĻ¤āĻžāĻ˛āĻŋāĻ•āĻžāĻ¯āĻŧ 10 āĻ¸ā§‡āĻ•ā§‡āĻ¨ā§āĻĄ, āĻāĻ•āĻŸāĻŋ āĻ°ā§‡āĻ•āĻ°ā§āĻĄāĨ¤

āĻļāĻžāĻ°ā§āĻ˛āĻ• āĻ¸ā§‡āĻŸ āĻ†āĻĒ āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡

āĻĄāĻŋāĻĢāĻ˛ā§āĻŸ āĻ¸ā§‡āĻŸāĻŋāĻ‚āĻ¸ āĻ¸āĻš 13 āĻ¸ā§‡āĻ•ā§‡āĻ¨ā§āĻĄ āĻĨā§‡āĻ•ā§‡ 0,3 āĻ¸ā§‡āĻ•ā§‡āĻ¨ā§āĻĄ āĻ›ā§‹āĻŸāĻ–āĻžāĻŸā§‹ āĻ¸āĻŽāĻ¨ā§āĻŦāĻ¯āĻŧ āĻ¸āĻš LS_COLORS āĻ…āĻ¨ā§āĻĒāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋāĻ° āĻ•āĻžāĻ°āĻŖā§‡ āĻāĻ•āĻŸāĻŋ 40-āĻ—ā§āĻŖ āĻ¤ā§āĻŦāĻ°āĻŖ setuid / setgid āĻāĻŦāĻ‚ āĻ°āĻ™āĻŋāĻ¨ āĻāĻ•ā§āĻ¸āĻŋāĻ•āĻŋāĻ‰āĻŸā§‡āĻŦāĻ˛ āĻĢāĻžāĻ‡āĻ˛āĨ¤ āĻāĻ¤ āĻŦāĻĄāĻŧ āĻ•ā§āĻˇāĻ¤āĻŋ āĻ¨āĻ¯āĻŧāĨ¤

āĻ…āĻŦāĻļā§āĻ¯āĻ‡, āĻāĻŸāĻŋ āĻāĻ–āĻ¨ āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ° āĻœāĻ¨ā§āĻ¯ āĻļāĻžāĻ°ā§āĻ˛āĻ•-āĻ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤

āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻ°āĻ™ āĻĢā§‡āĻ°āĻ¤ āĻĻāĻŋāĻ¤ā§‡ āĻšāĻžāĻ¨ āĻ¤āĻŦā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻ•ā§‡āĻŦāĻ˛ āĻĄāĻŋāĻĢāĻ˛ā§āĻŸ āĻ¸ā§‡āĻŸāĻŋāĻ‚āĻ¸ā§‡ āĻĢāĻŋāĻ°ā§‡ āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨:

$ unset LS_COLORS

āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ¤āĻžāĻ°āĻĒāĻ°ā§‡ āĻĒā§āĻ°āĻšā§āĻ° āĻĢāĻžāĻ‡āĻ˛ āĻ¸āĻš āĻĄāĻŋāĻ°ā§‡āĻ•ā§āĻŸāĻ°āĻŋāĻ¤ā§‡, āĻāĻŸāĻŋ āĻšāĻ˛āĻŽāĻžāĻ¨ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāĻ¯āĻŧ āĻ•āĻĢāĻŋ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻ­ā§āĻ˛āĻŦā§‡āĻ¨ āĻ¨āĻž ls.

āĻ‰āĻ¤ā§āĻ¸: www.habr.com

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨