টিল্ড ব্যবহার করে কীভাবে আমার হোম ডিরেক্টরিতে শর্টকাট হিসাবে কাজ করে?


30

আমি বিভ্রান্ত হয়ে পড়েছিলাম, কিছু ফাইল এক পিসি থেকে অন্য পিসিতে অনুলিপি করার চেষ্টা করছিলাম। আমি এটি খুঁজে পেয়েছি, কিন্তু বাক্য গঠনটি এখনও আমার কাছে বিভ্রান্ত করছে। এইটা কাজ করে:

scp ~/Desktop/Volenteer.png jay@server.ip:~j0h/b

যা Volenteer.pngফোল্ডারে রাখে /home/j0h/b। তবে, এটি কাজ করে না:

scp ~Desktop/Volenteer.png     jay@server.ip:~j0h/b

এটিও ব্যর্থ হয়, প্রস্থান স্থিতি 1 ফাইল পাওয়া যায় নি:

scp ~/Desktop/Volenteer.png     jay@server.ip:~/j0h/b

এটি যেমন করে:

scp ~Desktop/Volenteer.png     jay@server.ip:~j0h/b

সুতরাং পরিষ্কার, কিছু পার্থক্য আছে ~এবং ~/ যে পার্থক্য উপস্থিতি/

$~/
bash: /home/j0h/: Is a directory
$ ~
bash: /home/j0h: Is a directory

সুতরাং কেন scp, ~সংকল্প না ~/? এটি একটি অনুমান, আমি যা যা ঘটছে তা যাচাই করতে পারছি না। তবে এটি বেমানান বলে মনে হচ্ছে এবং তাই বিভ্রান্তিকর। এটি কি স্ক্যাপে একটি বাগ আছে? বা টিলডে আমি কি অনুপস্থিত তা সম্পর্কে কিছু আছে?


2
এখানে কেবল একটি পার্শ্ব নোট, এটি "ই" এর পরিবর্তে "ইউ" সহ "স্বেচ্ছাসেবক" বানান রয়েছে
এআর

2
আমি উদার স্পেলার।
j0h

সংশ্লিষ্ট প্রশ্ন: askubuntu.com/q/972319/295286
Sergiy Kolodyazhnyy

উত্তর:


68

~ আপনার হোম ডিরেক্টরি।

~fooব্যবহারকারীর হোম ডিরেক্টরি হ'ল foo, যদি এই জাতীয় ব্যবহারকারীর উপস্থিতি থাকে, বা কেবলমাত্র একটি ডিরেক্টরি নামের ডিরেক্টরি ~fooথাকে, যদি সেই ব্যবহারকারী উপস্থিত না থাকে।


সুতরাং, এতে:

scp ~Desktop/Volenteer.png     jay@server.ip:~j0h/b

~Desktopব্যবহারকারীর হোম ডিরেক্টরিতে প্রসারিত হবে Desktop, যদি এই জাতীয় ব্যবহারকারীর উপস্থিতি থাকে (এবং এটি সাধারণত না থাকে), বা ন্যায়সঙ্গত ~Desktop(এমন একটি পথ যা সাধারণত অস্তিত্ব থাকে না)।


ইন:

scp ~/Desktop/Volenteer.png     jay@server.ip:~/j0h/b

~/j0hনামে একজন নির্দেশিকাতে প্রসারিত হবে j0hমধ্যে jayএর বাড়ি ডিরেক্টরি, যা, আবার, কোন অস্তিত্ব করার সম্ভাবনা কম।


এটি নয় ~এবং ~/যেখানে পার্থক্য দেখা দেয়, কিন্তু ~এবং সেখানে ~foo


অতিরিক্ত হিসাবে, ~ডিরেক্টরি ইতিহাস নেভিগেশন জন্যও ব্যবহার করা যেতে পারে:

  • ~-পূর্ববর্তী ওয়ার্কিং ডিরেক্টরি (যেমন $OLDPWD)
  • ~+বর্তমান ওয়ার্কিং ডিরেক্টরি (মত $PWD)

এটি প্রযোজ্য নয় scp, যেহেতু আপনি কোনও scpঅপারেশনের মাঝামাঝি ডিরেক্টরিগুলি পরিবর্তন করতে পারেন না ।

আর তুমি ব্যবহার করেন pushdএবংpopd একটি ডিরেক্টরি স্ট্যাক বজায় রাখার এবং হবে যেমন আউটপুট দেখা, ডিরেক্টরি স্ট্যাকের মধ্যে তম ডিরেক্টরি । শেষ থেকে তম ডিরেক্টরি হবে (শূন্য থেকে গণনা, উভয় ক্ষেত্রে)। উদাহরণ স্বরূপ:~N~+NNdirs~-NN

$ for i in etc usr var tmp; do pushd /$i; done
/etc ~/.vim
/usr /etc ~/.vim
/var /usr /etc ~/.vim
/tmp /var /usr /etc ~/.vim

$ dirs
/tmp /var /usr /etc ~/.vim

তারপরে, স্ট্যাকের ডিরেক্টরিগুলি ব্যবহার করে ব্যবহার করা যেতে পারে:

/tmp /var /usr /etc ~/.vim
  ~0   ~1   ~2   ~3     ~4
 ~+0  ~+1  ~+2  ~+3    ~+4
 ~-4  ~-3  ~-2  ~-1    ~-0 
  ~+   ~-

সুতরাং, ~+সর্বদা .তখনকার সমতুল্য , এটি কি সঠিক? অপ্রয়োজনীয় মনে হচ্ছে।
ওয়াইল্ডকার্ড

1
@ উইল্ডকার্ড ঠিক আছে, ঠিক আছে না। ~+এবং ~-এর মান ব্যবহার $PWDএবং $OLDPWD, যা পরম পাথ। .সর্বদা একটি আপেক্ষিক পথ। সুতরাং, যদি কোনও কমান্ড থাকে যা কার্যকর করার সময় বর্তমান কার্যনির্বাহী ডিরেক্টরিকে পরিবর্তন করে, এটি নতুন পথটি দেখতে পাবে ., যেখানে প্রসারিত পথটি ~-একই থাকবে। tar -Cএটি একটি উদাহরণ, যদিও আমি স্বীকার করি আমি এর জন্য ভাল ব্যবহারের কথা ভাবতে পারি না ~+$PWDঠিক তত ভাল হবে, খালি ফাঁকা ~+/foo/barথাকলে আপনার উদ্ধৃতি দেওয়ার দরকার নেই $PWD
মুড়ু

1
ধন্যবাদ, এটি এটি স্পষ্ট করে। প্রকৃতপক্ষে এটি এখানে একটি ভাল উদাহরণ ব্যবহারের ক্ষেত্রে: সুরক্ষা কারণে কিছু কমান্ড আপেক্ষিক পথে কাজ করতে অস্বীকার করে; এই জাতীয় কমান্ডের সাহায্যে আপনি ব্যবহার করতে পারবেন না ./filenameতবে ব্যবহার করতে পারেন "$PWD/filename"বা আরও সহজভাবে ~+/filename। (এবং কিছু কমান্ড আপেক্ষিক পথের নামগুলিতে কাজ করবে তবে কার্যকরী পার্থক্য রয়েছে, যেমন lnবা tar))
ওয়াইল্ডকার্ড

21

জিএসইউ ডকুমেন্টেশনটি পড়ে বাশ টিলডে সম্প্রসারণের জন্য পড়ুন (যেমন আমার এই উত্তরটির প্রথম পুনরাবৃত্তির আগে আমার হওয়া উচিত)।

~/Desktopএবং ~j0hমৌলিকভাবে বিভিন্ন জিনিস করছেন, যা ব্যাখ্যা ~Desktopকরে যে কেন কাজ করে না:

  • একটি সমতল ~আপনার বর্তমান $HOMEপরিবেশে পরিবর্তনশীল, লগইন সেট করা জন্য প্রতিস্থাপিত হয়। সুতরাং আমার জন্য ~সমাধান /home/oli, এবং ~/Desktopহিসাবে পড়া /home/oli/Desktop। আপনি এখানে টিল্ডাকে সর্বাধিক ব্যবহৃত হচ্ছে দেখেন।

  • ~usernameসেট করা হিসাবে সেই ব্যবহারকারীর বাড়ীতে সমাধান হয় /etc/passwd। তাই ~oliসমাধান করে /home/oli, ~j0hসমাধান করতে পারে /home/j0hতবে প্রয়োজনে নয়, আপনার বাড়ির বাড়ি যে কোনও জায়গায় থাকতে পারে।

  • ~not-a-usernameসমাধান হয় না। কারণ Desktopকোনও ব্যবহারকারী ~Desktopনয়, প্রতিস্থাপিত নয়। এটি আক্ষরিক অর্থে ফাইল বা পথ হিসাবে নেওয়া ~Desktopহয়েছে (যা এখানে বিদ্যমান নেই)।

এবং এটি বলা বাহুল্য, দূরবর্তী অবস্থান থেকে এটি সব ঘটছে (এটি scpযদি স্থানীয় মানের সাথে প্রতিস্থাপন করা হয় তবে এটি অকেজো হবে)। এটি কাজ করে কারণ বাশ ~...এর আগে শ্বেত স্থান ছাড়া অন্য কিছু দ্বারা স্থান পরিবর্তন করবে না ।


কি getent passwd binবলে?
মুড়ু

2
"বিন" বেশিরভাগ লিনাক্স মেশিনে / বিনের একটি হোম ডিরেক্টরি সহ সিস্টেম ব্যবহারকারী।
fNek

1
প্রসারিত করতে ব্যর্থতা ~dirজিএনইউ ডক্সের সাথে সামঞ্জস্যপূর্ণ: "... টিলডের পরে টিল্ড-উপসর্গের অক্ষরগুলি একটি সম্ভাব্য লগইন নাম হিসাবে গণ্য করা হয় ... যদি লগইন নামটি অবৈধ হয়, বা টিল্ড সম্প্রসারণ ব্যর্থ হয় তবে শব্দটি অপরিবর্তিত রয়েছে " এখানে, dirএই সিস্টেমে কোনও ব্যবহারকারীর নাম নয়, সুতরাং এটি অপরিবর্তিত রয়েছে।
অ্যাপসিলাররা

সবাইকে ধন্যবাদ. আমার পোস্ট করা লিঙ্কগুলি সম্ভবত আমার পড়া উচিত :)
অলি

4

প্রতীকটি ইন ~শর্টকাট হিসাবে ব্যবহৃত /home/userহয় bash, তাই ~/Desktop/Volenteer.pngএটির ক্ষেত্রে শর্টহ্যান্ড /home/user/Desktop/Volenteer.png

আপনি যেমন দেখতে পাচ্ছেন /, তেমনি সর্বদা ফাইল ফাইলের স্তরক্রমের ক্ষেত্রে একটি নতুন স্তর দেখায়।


3
ঠিক অর্ধেক ঠিক, এটি $ হোম পরিবেশের পরিবর্তনশীল জন্য একটি সংক্ষিপ্ত হাত। ~{user}/Passwd (5) ডাটাবেস ফাইল দ্বারা নির্ধারিত কোনও এলোমেলো পথ হতে পারে। হ্যাঁ, ফাইলসাইটি.আর.আর.এস. স্ট্যান্ডার্ডগুলি নিয়মিত ব্যবহারকারীদের / বাড়িতে রাখে এটি প্রতিটি ব্যবহারকারীর ক্ষেত্রে হয় না (যেমন রুট ইন / রুট, এবং পরিষেবাদি / ভার / ... বা পুরানো ইউনিক্সগুলি / ঘরের পরিবর্তে / ইউএসআর ব্যবহার করে)
ডুইট স্পেন্সার

ডুইটস্পেন্সার সঠিক। আমি বেশ কয়েকটি সার্ভার বজায় রাখি যেখানে ব্যবহারকারীরা / usr / LI CLIENTNAME} / home / এ আছে এবং বেশ কয়েকটি ইনহাউস এবং রিমোট সিস্টেমের মধ্যে ভাগ করে নেওয়া হয় (সমস্ত নির্দেশিকাটি নির্দেশ করে) তাই কেবলমাত্র 1 টি সিস্টেম বজায় রাখা দরকার। এবং
directory

3
পুনঃটুইট আমাকে অবশ্যই এই ধরণের অপব্যবহারের প্রতিবাদ করতে হবে /usr
মুড়ু

@ মুরু আরে এটা আমার কল ছিল না>: - ডি এসসিও ডি থেকে বাম ওভার ছিল:
রিনজউইন্ড

1
সত্যই আমি এটির অর্থ যা বোঝাতে পেরেছি সমস্ত বিষয় ব্যবহারকারীর জন্য / usr ব্যবহার পছন্দ করেছি liked আমি আজকাল যা খুঁজে পাই তা হ'ল বেস ইউনুটিলেসের বাইরে সমস্ত বাইনারি (সিস, ইউজার, সিসপ) এর গ্র্যান্ড ইউনিফাইড ডাম্পিং গ্রাউন্ড হিসাবে / ইউএসআর / বিনের আরও বেশি বিভ্রান্তিকর অপব্যবহার। সর্বোপরি / ইউএসআরটিকে বোঝানো হয়েছিল যে সমস্ত ব্যবহারকারীর একটি এনএফএস মাউন্ট থেকে টানা অ্যাক্সেস রয়েছে যখন / ইউএসআর / স্থানীয় ছিল স্থানীয় ব্যবহারকারীর স্থান / সিবিনকে সিসপ বাইনারি এবং / বিন সিস্টেম বাইনারি হিসাবে। আমি পেয়েছি / বাড়িটি একটি পৃথক পার্টিশন হতে পারে তবে / usr / home / ... এটিকে / usr এ রাখলে এটি নীতি, বাস্তবায়ন এবং মানসিকতা উভয় ক্ষেত্রেই ব্যবহারকারীর নাম স্থান হিসাবে রাখে।
ডুইট স্পেন্সার

3

~$HOMEবেশিরভাগ সি শেল ডেরিভেটিভ / সাপোর্টিং পসিক্স কমপ্লায়েন্ট শেলগুলিতে পরিবেশগত পরিবর্তনশীল জন্য শর্টহ্যান্ড । ~আপনার নিজের বাড়ির ডিরেক্টরি বা অন্য ব্যবহারকারীর বাড়ির ডিরেক্টরি উল্লেখ করার জন্য সবচেয়ে সাধারণ ব্যবহার হ'ল:

cd ~ # ie shell, take me to my home folder

cd ~root # i.e. shell, take me to root's home folder

পসআইএক্স সিস্টেমের (ইউএনআইএক্স, লিনাক্স, ওএস এক্স, বিএসডি) যে কোনও স্থানীয় ব্যবহারকারীর জন্য হোম ডিরেক্টরি খুঁজে বের করতে যা পাসডাব্লুড (5) ডাটাবেসটি ব্যবহার করে /etc/passwdএইভাবে চালিয়ে যায়:

awk -F: '{ print $1,$(NF-1) }' /etc/passwd

এটি প্রতিটি স্থানীয় ব্যবহারকারী এবং তাদের হোম ডিরেক্টরি তালিকাভুক্ত করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.