/usr/bin/github-linguist is in ruby-github-linguist 4.7.2-2.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
| 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 | #!/usr/bin/ruby
# linguist — detect language type for a file, or, given a directory, determine language breakdown
#     usage: linguist <path> [<--breakdown>]
#
require 'linguist'
require 'rugged'
path = ARGV[0] || Dir.pwd
# special case if not given a directory but still given the --breakdown option
if path == "--breakdown"
  path = Dir.pwd
  breakdown = true
end
ARGV.shift
breakdown = true if ARGV[0] == "--breakdown"
if File.directory?(path)
  rugged = Rugged::Repository.new(path)
  repo = Linguist::Repository.new(rugged, rugged.head.target_id)
  repo.languages.sort_by { |_, size| size }.reverse.each do |language, size|
    percentage = ((size / repo.size.to_f) * 100)
    percentage = sprintf '%.2f' % percentage
    puts "%-7s %s" % ["#{percentage}%", language]
  end
  if breakdown
    puts
    file_breakdown = repo.breakdown_by_file
    file_breakdown.each do |lang, files|
      puts "#{lang}:"
      files.each do |file|
        puts file
      end
      puts
    end
  end
elsif File.file?(path)
  blob = Linguist::FileBlob.new(path, Dir.pwd)
  type = if blob.text?
    'Text'
  elsif blob.image?
    'Image'
  else
    'Binary'
  end
  puts "#{blob.name}: #{blob.loc} lines (#{blob.sloc} sloc)"
  puts "  type:      #{type}"
  puts "  mime type: #{blob.mime_type}"
  puts "  language:  #{blob.language}"
  if blob.large?
    puts "  blob is too large to be shown"
  end
  if blob.generated?
    puts "  appears to be generated source code"
  end
  if blob.vendored?
    puts "  appears to be a vendored file"
  end
else
  abort "usage: linguist <path>"
end
 |