উত্তর:
uuidgen
প্রোগ্রামটি দেখুন যা e2fsprogs প্যাকেজের অংশ ।
মতে এই , libuuid
এখন অংশ util-লিনাক্স এবং e2fsprogs অন্তর্ভুক্তির আউট বিকাশ করা হচ্ছে। তবে নতুন উবুন্টু সিস্টেমে uuidgen
এখন uuid-runtime
প্যাকেজে রয়েছে।
একটি ইউয়েড তৈরি করতে এবং এটিকে একটি ভেরিয়েবলে সংরক্ষণ করতে:
uuid=$(uuidgen)
আমার উবুন্টু সিস্টেমে, আলফা অক্ষরগুলি লোয়ার কেস হিসাবে আউটপুট এবং আমার ওএস এক্স সিস্টেমে এগুলি আপার কেস হিসাবে আউটপুট হয় (কোনও মন্তব্যে এটিকে নির্দেশ করার জন্য ডেভিডকে ধন্যবাদ)।
সমস্ত উপরের ক্ষেত্রে স্যুইচ করতে (উপরে হিসাবে এটি উত্পন্ন করার পরে):
uuid=${uuid^^}
সমস্ত ছোট ক্ষেত্রে স্যুইচ করতে:
uuid=${uuid,,}
উদাহরণস্বরূপ, যদি আপনার দুটি ইউআইডি থাকে এবং আপনি বাশের ক্ষেত্রে তাদের তুলনা করতে চান, তাদের ক্ষেত্রে এড়ানো যায় তবে আপনি tolower()
এই জাতীয় স্টাইল তুলনা করতে পারেন:
if [[ ${uuid1,,} == ${uuid2,,} ]]
echo -e 'f\nF' | grep '[[:xdigit:]]'
উভয় লাইন আউটপুট করে) এটি সত্যই গুরুত্বপূর্ণ নয় । যদি এটি আপনার এবং আপনার বাশ 4 এর পক্ষে গুরুত্বপূর্ণ হয় তবে আপনি এটি ছোট হাতের অক্ষরে তৈরি করতে এটি করতে পারেন: uuid=$(uuidgen); uuid=${uuid,,}
বা এটি এটি বড় হাতের অক্ষরে তৈরি করুন: uuid=$(uuidgen); uuid=${uuid^^}
বা tolower()
স্টাইল পরীক্ষা করার জন্য এই লাইন বরাবর কিছু :if [[ ${uuid1,,} == ${uuid2,,} ]]
বাহ্যিক নির্ভরতা যুক্ত না করে বিভিন্ন যুক্ত করতে , লিনাক্সে আপনি এটি করতে পারেন:
UUID=$(cat /proc/sys/kernel/random/uuid)
লিনাক্স সামঞ্জস্যতা স্তর (লিনাক্সুলেটর?) এর অধীনে, ফ্রিবিএসডি- তে খারাপ অভ্যাসগুলি প্রচার করতে ,
UUID=$(cat /compat/linux/proc/sys/kernel/random/uuid)
তথ্যসূত্র:
কেবলমাত্র সম্পূর্ণতার জন্য ... সেখানে ডিউবিয়ানের dbus
প্যাকেজটির সাথে একটি ইউআইডি জেনারেটরও ইনস্টল করা আছে । আমি এটি প্রায় কাছাকাছি তাকান মিস। এটি সম্ভবত e2fsprogs প্যাকেজের মতো একই অ্যালগরিদম, তবে এটি ড্যাশগুলি যুক্ত করে না, তাই এটি আপনার জন্য একটু ক্লিনার হতে পারে:
$ uuidgen
387ee6b9-520d-4c51-a9e4-6eb2ef15887d
$ dbus-uuidgen
d17b671f98fced5649a856a54b51c9e6
গ্রাভিটি একটি সুরক্ষা টিপ যোগ করেছে: "ডিবিস ইউইউডিএস আরএফসি 4122 এর সাথে সম্পর্কিত বা সামঞ্জস্যপূর্ণ নয় । এছাড়াও, ডিবিস-ইউইডজেন সর্বদা সর্বশেষ 4 বাইট হিসাবে ইউনিক্স টাইমস্ট্যাম্প ব্যবহার করে So তাই তারা কিছু ব্যবহারের জন্য অনুপযুক্ত হতে পারে।" (ধন্যবাদ, গ্রায়েটি, ম্যানপেজটিতে আমার এটি হওয়া উচিত ছিল))
dbus-uuidgen
সর্বদা সর্বশেষ 4 বাইট হিসাবে ইউনিক্স টাইমস্ট্যাম্প ব্যবহার করে। সুতরাং তারা কিছু ব্যবহারের জন্য অনুপযুক্ত হতে পারে।
আপনি যদি অন্য এক্সিকিউটেবলের উপর নির্ভর করতে না চান, বা আপনি সেগুলি ব্যবহার করতে না পারেন তবে এখানে খাঁটি বাশ সংস্করণ এখানে রয়েছে :
# Generate a pseudo UUID
uuid()
{
local N B T
for (( N=0; N < 16; ++N ))
do
B=$(( $RANDOM%255 ))
if (( N == 6 ))
then
printf '4%x' $(( B%15 ))
elif (( N == 8 ))
then
local C='89ab'
printf '%c%x' ${C:$(( $RANDOM%${#C} )):1} $(( B%15 ))
else
printf '%02x' $B
fi
for T in 3 5 7 9
do
if (( T == N ))
then
printf '-'
break
fi
done
done
echo
}
[ "$0" == "$BASH_SOURCE" ] && uuid
T
পরিবর্তনশীল কাটানো যেতে পারে এবং for T
লুপ পরিবর্তিত করা যেতে পারে: case $N in 3 | 5 | 7 | 9) printf '-';; esac
(পৃথক লাইন আউট ভাঙ্গা যদি পছন্দের)।
case
যা if
বিবরণীর পাশাপাশি অভ্যন্তরীণ for
বিবৃতিটি অপসারণ করতে একটি সংস্করণ দেখায় । এটি কোডটিকে আরও সুন্দর করে তোলে। নোট করুন যে উভয়ই B%15
হওয়া উচিত B%16
এবং B%255
হওয়া উচিত B%256
।
source <(curl url)
যা যা চেষ্টা করতে পারে
আমি এই স্ক্রিপ্টটি "ওয়ান-লাইনার" দরকারী খুঁজে পেয়েছি যেখানে ইউইডজেন উপলব্ধ নেই। পার্ল বা পাইথনের জন্য বাহ্যিক মডিউলগুলি ইনস্টল করতে এটি কোনও প্রয়োজনীয়তা বাইপাস করে।
od -x /dev/urandom | head -1 | awk '{OFS="-"; print $2$3,$4,$5,$6,$7$8$9}'
স্নোলেপার্ড, রেড হাট ভালহল্লা, সোলারিস 9 4/04 এবং সফলভাবে নতুনের উপর পরীক্ষিত। আমি যদি কৌতূহল বোধ করি এটি অ-স্বতন্ত্রতার প্রবণতাযুক্ত তবে আমি গত 10 বছরে 'বিট' হইনি। অবশ্যই, খুব head -1
সঙ্গে প্রতিস্থাপন করা যেতে পারে head -_other-value_ | tail -1
।
ব্যাখ্যা করতে,
/dev/random
এবং /dev/urandom
কার্নেল এলোমেলো জেনারেটর।
od
(অক্টাল ডাম্প) -এ একটি হেক্স আউটপুট সুইচ রয়েছে (-x) প্রতি লাইনে 16 বাইট উত্পাদন করে।
head
-n [| লেজ -1] (যেখানে এন> 0) পূর্ববর্তী আউটপুটটির কেবল একটি লাইন বের করে।
awk
আউটপুটফিল্ডসেটরেটরটিকে মুদ্রণ বিবৃতিতে কোমা যেখানেই আসে সেখানে হাইফেন হিসাবে সেট করে। 2-9 ক্ষেত্রগুলিকে স্বাধীনভাবে নির্দিষ্ট করে আমরা হাইফেনগুলি নিয়ন্ত্রণ করি এবং সূচক / অফসেট কাউন্টারটি বন্ধ করি যা 'ওড' দিয়ে প্রতিটি আউটপুটের লাইনকে উপস্থাপন করে।
ফলাফল হ'ল 8-4-4-4-12
ছোট অক্ষরের অক্ষর a-f0-9
।
993bb8d7-323d-b5ee-db78-f976a59d8284
od -x /dev/urandom | head -1 | awk '{OFS="-"; srand($6); sub(/./,"4",$5); sub(/./,substr("89ab",rand()*4,1),$6); print $2$3,$4,$5,$6,$7$8$9}'
ঠিক তাই অজগরটি বোধ হয় না:
python -c 'import uuid; print uuid.uuid1()'
2d96768e-02b3-11df-bec2-001e68b9d147
শেল এটি ব্যবহার করতে:
myvar=$(python -c 'import uuid; print uuid.uuid1()')
দেখুন পাইথন ডকুমেন্টেশন UUID UUID জানা ধরণের যে উত্পন্ন করা যেতে পারে।
নন-সিস্টেমড মেশিনে একটি সিস্টেমযুক্ত মেশিন-আইডি সামঞ্জস্যপূর্ণ ফাইল উত্পন্ন করতে আপনি পাইথনটি এভাবে ব্যবহার করতে পারেন:
python -c 'import re; import uuid; print re.sub("-","",str(uuid.uuid4()))' \
> /etc/machine-id
python3 -c "import uuid; print(uuid.uuid4())"
পাইথন 3 ব্যবহার করুন
পার্ল e2fsprogs
প্যাকেজের উপর ভিত্তি করে একটি ইউআইডি লাইব্রেরি সরবরাহ করে । আমার ডেবিয়ান সিস্টেমে এটি libuuid-perl
প্যাকেজ। ওয়ান-লাইনারের উদাহরণ এখানে; আরও man uuid
দেখুন:
$ perl -e 'use UUID; UUID::generate($uuid); UUID::unparse($uuid, $string); print "my new UUID is $string \n";'
my new UUID is 3079e9ce-41d4-4cf3-9f90-d12f8bb752e4
ব্যাকটিকস বা $()
স্বরলিপি সহ শেলসক্রিপ্ট যুক্ত করার জন্য এটি ক্ষুদ্র হবে :
#!/bin/bash
# ...do some stuff
$myvar = $(perl -e 'use UUID; UUID::generate($uuid); UUID::unparse($uuid, $string); print "$string";')
# ...do some more stuff
apt-get install uuid
আমার জন্য কাজ, তারপর আমি চালানো uuid
পাইথনটি ব্যবহার করে আমি একটি সামান্য বাশ ফাংশন লিখেছিলাম স্বেচ্ছাসেবী সংখ্যক ইউআইইডি উত্পাদন করতে:
# uuid [count]
#
# Generate type 4 (random) UUID, or [count] type 4 UUIDs.
function uuid()
{
local count=1
if [[ ! -z "$1" ]]; then
if [[ "$1" =~ [^0-9] ]]; then
echo "Usage: $FUNCNAME [count]" >&2
return 1
fi
count="$1"
fi
python -c 'import uuid; print("\n".join([str(uuid.uuid4()).upper() for x in range('"$count"')]))'
}
আপনি যদি ছোট হাতকে পছন্দ করেন তবে পরিবর্তন করুন:
python -c 'import uuid; print("\n".join([str(uuid.uuid4()).upper() for x in range('"$count"')]))'
প্রতি:
python -c 'import uuid; print("\n".join([str(uuid.uuid4()) for x in range('"$count"')]))'
দয়া করে ওএসএসপি ইউআইডি লাইব্রেরিটি দেখুন ( http://www.ossp.org/pkg/lib/uuid/ ), এবং এটি ইনস্টল করার বিষয়ে বিবেচনা করুন। কিছু প্রকল্প এটিকে বিকল্প হিসাবে প্রস্তাব করে (যেমন পোস্টগ্র্যাস এসকিউএল)। এটি সংস্করণ 3 এবং সংস্করণ 5 ইউআইডিগুলি সঠিকভাবে পরিচালনা করে , যা আমার ইনস্টল করা (যেমন e2fsprogs) লাইব্রেরিটি হ্যান্ডেল করতে পারে তার বাইরে ছিল। সৌভাগ্যক্রমে, ওপেনসুস এটি একটি মূল ভান্ডারে রয়েছে। ডাব্লু / উইন্ডোজ (যেমন সিগউইন) বা মাইএসকিউএল কাজের জন্য একটি সংস্করণ পাওয়া এক বিস্ময়কর বিষয়। দেখে মনে হচ্ছে এটি লিনাক্স / পোস্টগ্রাইএসকিউএল / পাইথন-এ স্যুইচ করার সময় হয়েছে (এবং আমি এসকিউএলজি জিইআই-কে মাইএসকিউএল / মারিয়াডিবিতে ভালবাসি) যেহেতু আমার সত্যিই ভি 3 এবং ভি 5 ইউআইডি দরকার।
-v3 ns:URL custom-data
করে।
আমি নিশ্চিত যে কেউ কেউ এখানে পৌঁছে যাবে এবং তাদের স্ক্রিপ্টগুলিতে ব্যবহারের জন্য অনন্য আইডি উত্পন্ন করার সহজ উপায় খুঁজছে এবং এটির সত্যিকারের ইউআইডি হওয়ার দরকার নেই।
যদি তা হয় তবে আপনি কেবল নিম্নলিখিতটি করতে পারেন, যা একটি আইডি উত্পন্ন করবে যা দ্বিতীয়টির চেয়ে কম স্বতন্ত্র id তাই আপনি যদি একাধিকবার এই সেকেন্ডের মধ্যে চালান, আপনি এখনও একই ফলাফল পাবেন।
MYID="U$(date +%s)"
echo $MYID
বর্তমান সিস্টেম সময়ের বাইরে ভিত্তি করে নীচের মত আইডিস উত্পন্ন করবে:
U1454423662
দ্রষ্টব্য: আপনি যদি লিনাক্সে থাকেন, বা ম্যাকের উপর কোরিউটিলগুলি ইনস্টল করেছেন, তবে আপনি ন্যানোসেকেন্ডে একটি অনন্য আইডি তৈরি করতে নিম্নলিখিত ব্যবহার করতে পারেন:
MYID="U$(date +%s%N)"
echo $MYID
অথবা আপনি যদি ন্যানোসেকেন্ডে অজগর ভিত্তিক সমাধানটি পছন্দ করেন যা প্রায় সর্বত্র কাজ করা উচিত, চালান:
MYUID=U$(python -c'import time; print repr(time.time())')
echo $MYUID
mktemp -u
হিসাবে থাকবে MYID="$(mktemp -u)"
। আপনি যদি রিবুট না হওয়া পর্যন্ত খালি টেম্প ফাইলগুলি রাখার সামর্থ্য -u
MYID="$(mktemp)"
বিভিন্ন ধরণের উদাহরণ সহ এই থ্রেডটি আমার পক্ষে সত্যই কার্যকর ছিল। আমার ঘন ঘন বিভিন্ন পরিবেশ থেকে uuid ফাংশন প্রয়োজন। এবং যখন আমি খাঁটি বাশের উদাহরণগুলি পছন্দ করি তখন কখনও কখনও এটি অন্য ভাষা থেকে একটি লাইব্রেরি ব্যবহার করা আরও সুবিধাজনক।
সুতরাং কেবল পূর্ণতার জন্য, রুবি (1.9.3+) এর মধ্যে বিল্ট-ইন SecureRandom মডিউল রয়েছে যাতে বেশ কয়েকটি দরকারী হ্যাশ এবং আইডি ফাংশন রয়েছে। ব্যাশ ক্লাইপ থেকে, আপনি এটি করতে পারেন।
ruby -r securerandom -e 'puts SecureRandom.uuid'
ran=`od -X -A n /dev/random | head -1 | cut -c3-38`
correlation_id=`echo ${ran} | cut -c1-8`-`echo ${ran} | cut -c10-13`-`echo ${ran} | cut -c14-17`-`echo ${ran} | cut -c19-22`-`echo ${ran} | cut -c23-26``echo ${ran} | cut -c28-35`
od -X -A n /dev/random | head -1 | cut -c3-38
আপনাকে নীচে প্রতিধ্বনি দেয় $ x 4151540a 1f7d0bef 8a0725fb d26183a3 uuid = echo ${x} | cut -c1-8
- echo ${x} | cut -c10-13
- echo ${x} | cut -c14-17
- echo ${x} | cut -c19-22
- echo ${x} | cut -c23-26``echo ${x} | cut -c28-35
প্রতিধ্বনি 41 uuid 4151540a-1f7d-0bef-8a07-25fbd26183a3
আপনি যদি জাভা 10 ব্যবহার করেন।
$ jshell
jshell> import java.util.*
jshell> String id = UUID.randomUUID().toString();
jshell
যেতে পারে , না ইন্টারেক্টিভ কমান্ড হিসাবে । এটি মূল পোস্টে খুব স্পষ্ট।
echo "System.out.println(java.util.UUID.randomUUID().toString())" | /Library/Java/JavaVirtualMachines/openjdk-11.0.1.jdk/Contents/Home/bin/jshell -s | grep -v ">"
কিন্তু এটি একটি আরো অনেক দীর্ঘ চেয়ে বিরক্তিকর হয় uuidgen
।
uuid-runtime
কোনও আপাত কারণ ছাড়াই এটি প্যাকেজে আটকে