একটি লিনাক্স কমান্ডের বড় অক্ষর থাকতে পারে?


17

একটি লিনাক্স কমান্ডের বড় অক্ষর থাকতে পারে? আমি জানি এটি সমর্থিত তবে আমি নিশ্চিত হতে চাই যে এটি কোনও "সমস্যা" বা "একটি ভাল জিনিস নয়" হিসাবে বিবেচনা করা হয়?


6
ইউএনআইএক্স কনভেনশন হ'ল কমান্ডের নামগুলির জন্য ছোট হাতের ব্যবহার করা, তবে আপনি যা খুশি তাদের কল করতে পারেন।

1
প্রকৃতপক্ষে, ইউনিক্স আপনার কমান্ডগুলি কী বলে সেটিকে লক্ষ্য করে না। এটি প্রচুর ব্যথা এবং যন্ত্রণার কারণ ঘটবে তবে এগুলির মধ্যে ফাঁকা জায়গাগুলির সাথে আপনার কমান্ডও থাকতে পারে: প্রত্যাশার মতো echo -e '#!/bin/sh\necho hello world' > ~/bin/OH\ NOES; chmod +x ~/bin/OH\ NOES; "OH NOES"উত্পাদন করে hello world। (ধরে নিচ্ছি অবশ্যই ~/binআপনার মধ্যে আছে $PATH)।
ডারোবার্ট

এই প্রশ্নটি এবং আমার সম্ভবত খুব দীর্ঘ টিউটোরিয়ালটি দেখুন
ইমানুয়েল বার্গ

উত্তর:


13

ইউনিক্সে কমান্ডের নামগুলিতে কোনও বাধা নেই। যে কোনও ফাইল কমান্ড হতে পারে। এবং ফাইলের নাম ASCII NUL বা ASCII ব্যতীত অন্য এক বা একাধিক অক্ষরের (যদিও সীমা পর্যন্ত) কোনও অনুক্রম হতে পারে /zshএমনকি ফাংশনের নাম হিসাবে আপনার কোনও স্ট্রিং থাকতে পারে এমন সীমাবদ্ধতাটিকে এমনকি উত্থাপন করে।

কয়েকটি নোট যদিও:

  • .বা ..;-) নামক একটি কমান্ড ফাইল তৈরি করতে আপনার খুব কষ্ট হবে ।
  • এড়ানোর নাম ইতিমধ্যে মান কমান্ড বা শেল builtins বা কীওয়ার্ড (সবচেয়ে সাধারণ শাঁস অন্তত মত দ্বারা গৃহীত হয় bash, zsh, tcshবা ksh)। সেই ক্ষেত্রে উপরের অক্ষরের অক্ষরগুলি সহায়তা করতে পারে কারণ তারা সাধারণত স্ট্যান্ডার্ড কমান্ড ব্যবহার করে না।
  • এটি ASCII অক্ষরগুলিতে সীমাবদ্ধ করা ভাল। নন ASCII অক্ষরগুলি বিভিন্ন চরিত্রের সেটগুলিতে সমানভাবে প্রকাশিত হয় না
  • আপনি যখন এদিকে থাকবেন তখন নিজেকে অক্ষর, অঙ্ক, ড্যাশ, বিন্দু এবং আন্ডারস্কোর পর্যন্ত সীমাবদ্ধ করুন। আর কিছু, যখন আইনি, এই সহ বা টুল (উদাহরণস্বরূপ, যে এক সমস্যা বা অন্য কারণ হতে পারে |, =, &এবং আরও অনেক কিছু, শাঁস মধ্যে পলান করতে জোর আপনি ব্যবহার করতে হবে :, আপনার আদেশ একজনের লগ-ইন শেল হিসাবে ব্যবহার করা যাবে না ... )। এমনকি আপনি বাদ দেওয়ার বিষয়ে পারে .এবং -যা অনেক শাঁস মধ্যে ফাংশন নাম অনুমোদিত নয়, যদি আপনি ব্যবহারকারীদের একটি শেল ফাংশনে আপনার আদেশ মোড়ানো মঞ্জুরি দিতে চেয়েছিলাম।
  • প্রথম চরিত্রটিকে একটি চিঠি তৈরি করুন। আবার, কোনও কঠোর প্রয়োজন নয়। তবে আন্ডারস্কোরটি কখনও কখনও বিশেষ জিনিসগুলির জন্য ব্যবহৃত হয় (যেমন zshসমাপ্তির সিস্টেমগুলি থেকে শুরু করে ফাংশনগুলিতে _) এবং সমস্ত-অঙ্কের কমান্ডের মতো জিনিসগুলির মধ্যে সমস্যা হতে পারে cmd>output.log। ফাইলগুলির নাম যাদের ডট দিয়ে শুরু হয় lsসেগুলি শেল গ্লোবিংস এবং অনেকগুলি ফাইল ম্যানেজারের দ্বারা গোপন করা হবে ।

ঠিক। সুতরাং আমি অনুমান করি যে এটি উত্থিত হয়, যদি আপনার কাছে এটি করার উপযুক্ত কারণ না থাকে তবে সাধারণ কিছু থেকে বাইরে ব্যবহার করবেন না। এমনকি আপনার দ্বিতীয় পয়েন্টটিও, আমি মনে করি না যে শাঁসগুলি coverাকতে বড় হাতের অক্ষর ব্যবহার করা সেই স্মার্ট - পরিবর্তনের বর্ণনা দেওয়ার জন্য আদেশটির নাম দেওয়া কি ভাল নয়? পছন্দ, zsh_with_some_funky_option(পরিবর্তে ZSH)?
ইমানুয়েল বার্গ

ওরফে কি কমান্ড? কারণ হ্যাঁ হলে, আমি খুব সহজ সময় টাইপিং ছিল alias .="echo Hello".-) (ওয়েল, sudo vim /bin/.কঠিন হয়েছিল, যদিও ...)
অ্যালোয়িজ্ Mahdal

@ অ্যালিসমহদল সেজন্য আমি কমান্ড ফাইলটি বললাম । zsh এছাড়াও অনুমতি দেয় .() echo Hello। পিডিএক্সশও তাই, তবে .বিশেষ বিল্টিন সেখানে অগ্রাধিকার নেয়।
স্টাফেন চেজেলাস

ওহো, আমার ভুল লেখা ... পিডিএক্স নজির সম্পর্কে আকর্ষণীয় বিষয়, যদিও ...
অ্যালোস মাহদল

27

হ্যাঁ এটি পারে, এবং ইতিমধ্যে কয়েকটি আছে। যেমন /usr/bin/X:)

dennis@lightning:~$ ls {/usr{/local,},}/{s,}bin | grep '[A-Z]'
MAKEDEV
amuFormat.sh
GET
HEAD
Mail
POST
X
X11
Xephyr
Xnest
Xorg
NetworkManager

dennis@lightning:~$ zcat ~/.cache/apt-file /archive.ubuntu.com_ubuntu_dists_precise_Contents-i386.gz | tail -n +33 | cut -f1 | grep -P '^(usr/)?s?bin/.*[A-Z]' | wc -l
758

সুতরাং উবুন্টু 12.04 এর মধ্যে 758। সম্পূর্ণ তালিকা: https://gist.github.com/5264777


না Xdialog? : o এবং আপনার grepসঞ্চালনের আগে বর্তমান ডিরেক্টরিতে শেলটি প্রসারিত করা এড়াতে আপনার পরামিতিটি উদ্ধৃত করা উচিত ।
manatwork

এটি এই সিস্টেমে ইনস্টল করবেন না :)
ডেনিস কার্সেমেকার

2
আমি grepপ্যারামিটারের উদ্ধৃতি দেওয়ার জন্য জোর দিতে চাই : পেস্টবিন .
com

1
ঠিক আছে, এটি শেলের উপরও নির্ভর করে। আমি বহনযোগ্যতার জন্য আমার উদাহরণে বড় হাতের অক্ষর ব্যবহার করেছি, তবে bashআমার হোম ডিরেক্টরিতে আসলে [A-Z]"সিডিএফএজজেপিপিআরটি" ব্যয় হয়। সুতরাং সংবেদনশীলতার সাথে কেস করুন।
manatwork

1
zshবাশ এর failglobবিকল্পটি উল্লেখ করা বা না করা । আমি ব্যক্তিগতভাবে সাধারণত আমার টেম্প ফাইল নাম (মধ্যে ~) a, b, c... এবং আমার টেম্প dirs A, B, C...
Stéphane Chazelas

4

সর্বাধিক বিখ্যাত কমান্ডটি sttyছিল, যা হিসাবে উপলব্ধ ছিল STTY। এটি দিয়ে টার্মিনালটি স্বাভাবিক আচরণে ফিরিয়ে আনতে খুব সুবিধাজনক হয়েছিল STTY SANE


আমার /bin/sttyআর কিছু নেই। আপনার উত্তরটি আরও বিস্তৃত করার জন্য যত্নশীল?
ইমানুয়েল বার্গ

2
ভাল পুরানো দিনগুলিতে, আপনার টার্মিনালের পক্ষে এত বিপর্যস্ত হওয়া সম্ভব হয়েছিল যে সমস্ত কিছুই বড় হয়ে গেল। সুতরাং টাইপ করুন aএবং টার্মিনাল দেখতে পাবেন A। বিচক্ষণতা পুনরুদ্ধার করতে, আপনি stty saneআদেশটি ব্যবহার করবেন । এটি এখন অসম্ভব ব্যতীত, তাই এটি sttyযেমন উপস্থিত রয়েছে STTYতেমন স্বাগত। যদিও শেষবারের জন্য এটি প্রয়োজন ছিল তা আমি এখনও মনে করতে পারি না :)
ডেনিস কার্সেমেকার

@ ডেনিসকর্সামেকার: বাহ! এটি ইতিহাসের কিছু শীতল অংশ!
ইমানুয়েল বার্গ

1
ছেলেরা (ott-- এবং @ ডেনিসকর্সামেকার), আপনার এটি পিছিয়ে আছে। আমি স্পষ্টকরণের জন্য আরও একটি উত্তর পোস্ট করেছি ।
স্টাফেন চেজেলাস

4

অন্যান্য উত্তর এবং সম্পর্কিত মন্তব্যগুলিতেSTTY কিছু ভুলত্রুটি পরিষ্কার করার জন্য historical তিহাসিক কমান্ডের কয়েকটি নোট :

ডিসি ভিটি05 বা ভিটি 50 এর মতো পূর্ববর্তী টার্মিনালগুলি এবং তার আগে টেলিফ্রিন্টারগুলি কেবলমাত্র বড় হাতের অক্ষরকেই সমর্থন করে। এর অর্থ হ'ল কোনও ছোট অক্ষরের অক্ষর তাদের থেকে ইনপুট হতে পারে না বা তারা উচ্চতর অক্ষরের চেয়ে অন্য কোনও চিঠি প্রদর্শন করতে সক্ষম হয় না।

ইউনিক্স কেস সংবেদনশীল এবং বেশিরভাগ কমান্ড লোয়ার কেস হওয়ার কারণে আপনি দেখতে পাচ্ছেন যে সেখানে একটি সমস্যা আছে। সেজন্য এগুলি পরিচালনা করতে বিশেষ টার্মিও / টার্মিওস মোডগুলি রয়েছে (এবং এটি এখনও আধুনিক ইউনিসে রয়েছে যদিও সেই টার্মিনালগুলি দীর্ঘ হয়ে গেছে) those

টার্মিও / টের্মিওগুলি ইউনিক্সের টিটিআই ড্রাইভারটি নিয়ন্ত্রণ করার জন্য যথাক্রমে পুরানো এবং নতুন ইন্টারফেস। একটি টার্মিও (গুলি) এ ioctl, আপনি ইনপুট, আউটপুট, নিয়ন্ত্রণ পতাকাগুলি নির্দিষ্ট করে ... যা সিরিয়াল লাইনে বৈদ্যুতিক সিগন্যালগুলি কীভাবে ইনপুট এবং আউটপুট চরিত্রগুলিতে হ্যান্ডেল করা হবে এবং ড্রাইভারের আর্ট জিনিস যেমন প্রতিধ্বনি, লাইন সম্পাদক ... তাদের বেশিরভাগই আধুনিক ইউনিক্স ভিজিএ কনসোল বা সিউডো টার্মিনালের মতো ভার্চুয়াল টার্মিনালগুলিতে প্রয়োগ করে।

কমান্ড লাইন ইন্টারফেসটি termio(s)হ'ল sttyকমান্ড।

উচ্চ-কেস টার্মিনালগুলি পরিচালনা করতে, এখানে তিনটি termio(s)পতাকা জড়িত রয়েছে:

  • IUCLC(ইনপুট আপার আপার কে লোয়ার কেস এ): ইনপুট করার সময় আগত অক্ষরগুলি লোয়ার কেসে রূপান্তরিত হয়। তার অর্থ Aটার্মিনাল দ্বারা প্রেরিত একটি হিসাবে বিবেচিত হয় a। তার মানে তাদের এই সঙ্গে, আমি এখন টাইপ করতে পারেন LSআমার VT50, এবং শেল পড়তে হবে lsথেকে /dev/ttyX। আমি এখন sttyকমান্ড চালাতে পারি ।
  • এখন, IUCLCএকা এবং টার্মিনাল সহ echo, আমি টাইপ করার সময় LS, ড্রাইভারটি lsটার্মিনালে ফিরে পাঠাত (যাতে আমি কী টাইপ করতে পারি তা প্রদর্শন করতে পারে না), সুতরাং আমাদেরও প্রয়োজন OLCUC(আউটপুট লোয়ার কেস টু আপার কেস), এটি হ'ল টার্মিনালে প্রেরণের আগে আমাদের যে কোনও ছোট অক্ষরের বড় হাতের অক্ষরে রূপান্তর করতে হবে।
  • এখন, আমরা একটি ভিটি 50 থেকে ইউনিক্স পরিচালনা করতে পারি, তবে আমরা যদি এখন বড় হাতের অক্ষরগুলি ইনপুট করতে চাই তবে কী হবে? এটিই xcase স্থানীয় পতাকাটি আসে This এটি (কেবলমাত্র ইনপুট মোডে) Aটাইপ করে একটি উচ্চতর কেস প্রেরণ করতে দেয় \Aএবং আউটপুটে একটি উপরের কেস Aহিসাবে রেন্ডার করা হয় \A। (এটি একটি লিনাক্সে প্রয়োগ করা হয়নি)

sttyকমান্ড সংশ্লিষ্ট হয়েছে iuclc, olcucএবং xcase: সেটিংস এবং সব তিনটি জন্য একটি alias lcase। ডিফল্ট সেটিংস এবং আপনি যা পাবেন stty saneতা lcaseবন্ধ।

সুতরাং, আপনি যখন কোনও ভিটি 50 এ থাকবেন, আপনাকে যা করতে হবে তা চালানো যেতে পারে:

stty lcase

কিছু করতে সক্ষম হতে। তবে ধরুন, আপনি যখন কেবলমাত্র বড় হাতের অক্ষর পাঠাতে পারেন তবে কীভাবে আপনি তা করবেন? এই জন্য আপনার STTYএকটি উপাধি হিসাবে একটি কমান্ডের প্রয়োজন sttyএবং সে কারণেই একটি উপাধি হিসাবে sttyসমর্থন করে ।LCASElcase

এর মতো কোনও SANEউপনাম নেই কারণ আপনি stty saneযখন টার্মিনালটি সমস্ত-বড় হয়ে যান তখন আপনি করতে চান না ।

আপনি যদি কোনও সাধারণ টার্মিনালে চালিয়ে যান stty lcaseবা stty olcucভুল করে চালিয়ে যান (এটি চেষ্টা করুন xtermবা যেকোন আধুনিক টার্মিনালটিতে), সেখানেই আপনাকে stty saneস্বাভাবিক অবস্থায় ফিরে আসতে হবে। তবে এর জন্য আপনার কোনও STTYআদেশের দরকার নেই । আপনি টাইপ তাহলে stty sane, আপনি হবে দেখতে STTY SANEফিরে প্রতিধ্বনিত, কিন্তু যে শুধুমাত্র প্রদর্শিত পাঠ্য (সেখানে প্রবেশ করে নি কমান্ড) যে অনুবাদ করা হবে, এটি এখনও stty saneকমান্ড রান করা হবে না।

iuclc, olcuc, xcaseপতাকা POSIX দ্বারা নির্দিষ্ট করা ব্যবহৃত (এবং যে সম্ভবত কেন এটা লিনাক্স বাস্তবায়িত হয় যদিও আমি গম্ভীরভাবে সন্দেহ কেহ কখনও একটি লিনাক্স সিস্টেমে সকল পুরানো টার্মিনাল (মজার জন্য ছাড়া) কোনো সংযুক্ত), কিন্তু এ সরানো হয়েছে POSIX: 2001।


2

ফেডোরা 18 তে এখানে:

amuFormat.sh
chkrootkitX
enum_chmLib
enumdir_chmLib
extract_chmLib
fakeCMY
GET
HEAD
Mail
oLschema2ldif
POST
smoltDeleteProfile
smoltGui
smoltSendProfile
smp_conf_zone_man_pass.#prelink#.coLtYv
Terminal
test_chmLib
Thunar
X
Xephyr
xfig-Xaw3d
Xorg
Xvnc
MAKEDEV
NetworkManager
amuFormat.sh
chkrootkitX
enum_chmLib
enumdir_chmLib
extract_chmLib
fakeCMY
GET
HEAD
Mail
oLschema2ldif
POST
smoltDeleteProfile
smoltGui
smoltSendProfile
smp_conf_zone_man_pass.#prelink#.coLtYv
Terminal
test_chmLib
Thunar
X
Xephyr
xfig-Xaw3d
Xorg
Xvnc
MAKEDEV
NetworkManager

মোট 50 টির জন্য (যার মধ্যে আমি বেশিরভাগই জানতাম না)।


1
50, কিন্তু 25 স্বতন্ত্র।
স্টাফেন চেজেলাস

0

দেবিয়ান সিডে, zsh সহ, এবং ls -1 $path | grep '[A-Z]'আমি পেয়েছি

GET
HEAD
HtFileType
Mail
POST
Pnews
Rnmail
X
X11
Xephyr
Xorg
ircII
amuFormat.sh
hpljP1005
hpljP1006
hpljP1007
hpljP1008
hpljP1505

সম্পাদনা করুন: নোট করুন যে উপরের কমান্ডে, এটি হ'ল অঙ্ক নয়, অক্ষর নয় l। এক কলামের মতো একটি।


1
সাথে zsh, চালান:type -m '*[A-Z]*'
স্টাফেন চেজেলাস

@ স্টাফেনচাজেলাস: ঠিক আছে, আপনার অনুসন্ধানের পথটি প্রদর্শিত হবে এবং এতে শেল ফাংশনও রয়েছে। তবে খনিটিও zsh- নির্দিষ্ট: ছোট হাতের দাগ $pathএকবারে নয়। ঠিক আছে, আরও তথ্য, ভাল।
ইমানুয়েল বার্গ

1
হ্যাঁ, আমি বলিনি যে আপনারটি ভুল ছিল, কেবল একটি বিকল্পের পরামর্শ দিলেন (যদিও আমি সম্মত হলাম এটি শব্দের মধ্যে সেরা নয়)। নোট যে $pathzsh নির্দিষ্ট নয়। এটি csh/tcshআপনার আদেশটি কাজ করে সেখান থেকে আসে ।
স্টাফেন চেজেলাস

@ স্টাফেনচাজেলাস: আহা, এটি আকর্ষণীয়! না, আমার কমান্ডটি "ভুল" নয় তবে আমি সম্মত হলাম আপনার চেয়ে ভাল এটি শেল ফাংশন এবং উপকরণগুলি অন্তর্ভুক্ত করার জন্য বোধগম্য। কমপক্ষে এটি আমার পক্ষে হয়, কারণ আমি যখন আমার কম্পিউটার ব্যবহার করি তখন আমার এটি পাত্তা দেয় না যতক্ষণ না এটি বাইনারি, স্ক্রিপ্ট, একটি ফাংশন, একটি উপন্যাস বা যাই হোক না কেন যতক্ষণ আমি এটি চালাতে পারি এবং এটি তার কাজ করে। (আমার ধারণা -m"ম্যাচ" এর জন্য))
ইমানুয়েল বার্গ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.