লিনাক্স / ইউনিক্সে ব্যবহারকারী প্রতি ডিস্ক ব্যবহার


10

নেটওয়ার্কের প্রতিটি ব্যবহারকারীর দ্বারা কত ডিস্কের জায়গা দখল করা হচ্ছে তা আমার খুঁজে নেওয়া দরকার। আমি সচেতন dfএবং duকমান্ডগুলি সম্পর্কে: আমি পুরো ফাইল সিস্টেম এবং এডাব্লুকে আউটপুটটি তালিকাভুক্ত করতে পারি, তবে আরও মানক কমান্ড আছে কিনা তা অবাক করি।

আমি যে আউটপুটটি সন্ধান করছি তা হ'ল:

usr1  xMb
usr2  yMb
[...]
Total zMb

কোন ধারনা?

ধন্যবাদ!

পুনশ্চ. রেড হ্যাট লিনাক্স ইই

উত্তর:


11

এটি কি এক সময়ের জিনিস, বা এই তথ্যটি আপনি নিয়মিত নিষ্কাশন করতে সক্ষম হতে চান? যদি এটি পরে হয় তবে একটি বিকল্প হ'ল আপনার ফাইল সিস্টেমে কোটা প্রয়োগ করা। সিস্টেমটি ক্রমাগত প্রতিটি ব্যবহারকারীর দ্বারা ব্যবহৃত ডেটার পরিমাণের উপর নজর রাখে। এইভাবে তথ্যগুলি কোটা ডাটাবেসের কাছে কেবল একটি কোয়েরি।


1
+1 কোটা সমাধান!
ThorstenS

এককালীন জিনিস; সম্ভবত একটি সমাধান যা ব্যবহারকারীরা চাইলে তাদের ব্যবহার গণনা করার জন্য একটি ছোট স্ক্রিপ্টে সংরক্ষণ করতে পারেন। আমরা কাজের পরিমাণ সীমাবদ্ধ করতে পারি না কারণ আমরা যে ধরণের কাজ করি তা সীমাবদ্ধ করে না।
ইস্কুলো

@ থারস্টেনস: আমরা প্রযুক্তিগত কম্পিউটিং করি এবং আমাদের প্রচুর পরিমাণে তথ্য তৈরি করতে হবে যা রান হওয়ার পরে সরিয়ে নেওয়া বা নাও হতে পারে। আমি মনে করি না কোটা আমাদের পরিস্থিতিতে সহায়তা করে।
ইস্কুলো

1
@ অরিয়েতা: আপনাকে তাদের ব্যবহার সীমাবদ্ধ করতে হবে না। কেবলমাত্র প্রতিটি ব্যবহারকারীকে একটি হাস্যকরভাবে কোটা কোটা দিন। এছাড়াও, প্রতিটি ব্যবহারকারীর নিজেরাই কোটা ডাটাবেসটি অনুসন্ধান করতে পারে এবং তারা বর্তমানে কতটা ডেটা সংরক্ষণ করছে তা দেখতে পারে।
andol

2
এমনকি আপনার একটি বড় সংখ্যায় কোটা সেট করার দরকার নেই, আপনি যদি এটি সেট না করে ছেড়ে দেন (অর্থাত্ 0) এটি এটি প্রয়োগ করে না, তবে এটির ব্যবহার রেকর্ড করবে
ড্যানিয়েল

4

আর একটি দুর্দান্ত সমাধান আমি এখানে পেয়েছি । আগ্রহের ডিরেক্টরিতে নেভিগেট করুন এবং চালান (বিকল্প হিসাবে, .আপনার যে ডিরেক্টরিতে আগ্রহী ডিরেক্টরিতে পরিবর্তন করুন , যেমন , /home/):

find . -type f -printf "%u  %s\n" \
  | awk '{user[$1]+=$2}; END{for(i in user) print i,user[i]}'

1
+1 টি। সম্ভবত একটি টাইপ চ যোগ করুন আপনি কি কেবলমাত্র ফাইল অনুসন্ধান করছেন?
হেনেস

ভাল উত্তর. ব্যবহার করুন -printf "%u\t%s\n"এবং awk -v OFS="\t"যদি আপনি মনে করেন আপনি কি কখনো এটা স্থান সঙ্গে একটি ব্যবহারকারী নাম থাকতে পারে।
TheDudeAbides

3

অথবা সমস্যা ব্যবহারকারীদের (ডিরেক্টরিতেও) সন্ধানের জন্য,

du -xk | sort -n | tail -25

এবং সোলারিসের জন্য:

du -dk | sort -n | tail -25   

এটি আপনাকে 25 বৃহত্তম ডিরেক্টরিগুলির একটি তালিকা দেয়। আপনি যা চেয়েছিলেন তা পুরোপুরি নয়, তবে আমি এটি সর্বদা ব্যবহার করি।


2

আমরা অনেক জায়গায় যা করি তা হ'ল কোটা সিস্টেমটি ব্যবহার করা, তবে অযৌক্তিকভাবে উচ্চ কোটা সেট করা। এইভাবে আপনি দ্রুত প্রতিবেদনের সুবিধা পাবেন। একটি সাইটে প্রতিটি ব্যবহারকারীর কাছে "কোটা" স্থানের 1 টিবি থাকে।

সার্ভিস ডিস্ক বেড়ে যাওয়ার সাথে সাথে আমরা পর্যায়ক্রমে কোটাটিকে আরও উঁচু করে ফেলি - প্রাথমিকভাবে এটি ব্যবহারকারী হিসাবে 30 জিবি ছিল, যা এমন সময়ে অযৌক্তিকভাবে বেশি ছিল।


0

এরকম কোনও আদেশ নেই। এর জন্য আপনাকে কিছু শেল কমান্ড লিখতে হবে।

  1. uid> 1000 দিয়ে / etc / passwd থেকে সমস্ত ব্যবহারকারীকে পান
  2. ব্যবহারকারীর সমস্ত ফাইল সন্ধান করুন এবং অনুসন্ধান করুন
  3. ডু-এস খাওয়ানোর জন্য এই তালিকাটি ব্যবহার করুন

অদক্ষ। আপনি যদি একই সময়ে তথ্য লগ করেন তবে আপনাকে বেশ কয়েকবার সন্ধান করার দরকার নেই। আপনার প্রথম রান চলাকালীন সেই তথ্যটি সংরক্ষণ করুন। হয় কোনও ফাইলে, বা কোনও সহযোগী অ্যারেতে।
হেনেস

0

থর্স্টেনসের পদ্ধতিটি আমার কাছে আরও কাজের মতো মনে হচ্ছে কারণ এটি একাধিকবার সন্ধান করে। এক বারের জন্য, আমি কেবল 1 কমান্ড সন্ধান করব এবং প্রতিটি ফাইলের মালিক এবং আকার আউটপুট করব এবং তারপরে সেই ফাইলটিতে কিছু সাজানোর যাদু করব।

এই সন্ধানটি এমন কিছু হবে যা ব্যবহারকারীর নাম (বা কোনও ব্যবহারকারীর আইডি নম্বর) এবং শূন্য-বাইট সীমিত ফাইলটিতে বাইটে ব্যবহৃত স্থান:

sudo bash -c 'find . -printf "%u\0%s\0" > username_usage'

আপনি \0এমন কিছু দিয়ে প্রতিস্থাপন করতে পারেন যা ট্যাব বা নিউলাইনগুলির মতো কাজ করা কিছুটা সহজ হতে পারে তবে আপনার যদি ফানীর ফাইলের নাম থাকে তবে এটি কম নিরাপদ হবে।

আপনি যদি আরও দক্ষ হতে চেয়েছিলেন তবে আপনি আউটপুটটিকে স্ক্রিপ্টে পাইপ করতে পারেন যা এটি চালনার সাথে সাথে পরিচালনা করে তবে এটি আরও কিছুটা কাজ হবে এবং আপনাকে প্রথমবার এটি পেতে হবে।


0

আমি এটি তৈরি করেছি :) আপনি দ্রুত না, তবে কাজ করেন:

#!/bin/bash

# Displays disk usage per user in the specified directory
# Usage: ./scriptname [target-directory]

[ "x$1" == "x" ] && dirname="." || dirname="$1"
for uid in `cat /etc/passwd |awk -F : '{ print $1 }' ` ; do # List all usernames
    user_size=0
    for file in `find "$dirname" -type f -user "$uid" 2>/dev/null` ; do # List the folder's files that belongs to the current user, Ignore possible `find` errors.
        let user_size+=`stat -c '%s' $file` # Sum-up
        done
    [ $user_size -gt 0 ] && echo "USER=$uid, SIZE=$user_size" # Display the result if >0
    done

যদি আমরা কেবল 1000 ইউআইডির জন্য অনুসন্ধান করি তবে দুর্দান্ত গতি বৃদ্ধি পাবে:

- for uid in `cat /etc/passwd | sed -rn "s~^([^:]+):.*$~\1~p"` ; do # List all usernames
+ for uid in `cat /etc/passwd | sed -rn "s~^([^:]+):[^:]:[0-9]{4,}:.*$~\1~p"` ; do # List all usernames having UID>1000
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.