Linux – komendy

Pomoc:
Potrzebujesz dokładnego opisu polecenia? wpisz więc coś takiego: man
hasło. Spowoduje to wyświetlenie jeśli to możliwe, podręcznika do „hasła”.

Oznaczenia:
Polecenia zakończone jednym lub dwoma wykrzyknikami wymagają wysokich
uprawnień (nawet root’a), czasem nawet fizycznego dostępu do komputera.
Mogą więc być niepraktyczne przy zdalnej pracy za pomocą telnet lub ssh.

arch – wyświetla informacje na temat budowy komputera na którym pracujesz
awk – interpreter skryptowego języka programowania
bzip2 (*.bz2) – wysokowydajny kompresor
cal – ustawienia daty cat – przekierowuje strumień danych (np. sklejanie plików cat plik1 plik2 >plik12
cd – zmiana katalogu (bez parametru: przejście do katalogu użytkownika)
chown! – ustawianie właściciela pliku
chmod – ustawianie praw dostępu do pliku tzw. atrybuty
clear – czyści okno terminalu
cmp – porównuje pliki
copy – kopiuje pliki i katalogi
cp – kopiuje pliki
cut –
date – wyświetla lub zmienia datę
dd – konwertuje i kopiuje pliki
diff – porównuje zawartość plików, np. kodu źródłowego programu
du – oblicza zajętość na dysku
df – informuje o wolnych blokach na dysku
dircmp – porównuje katalogi
dmesg!! – podaje wszystkie komunikaty wyświetlane przy uruchamianiu systemu
echo –
egrep – odmiana polecenia grep
elm – program pocztowy
exit – wylogowanie z konsoli
fdisk!! – zarządzanie partycjami dysku
fetchmail! – zarządzanie zewnętrzną pocztą
file – testowanie pliku
find – wyszukiwanie pliku, katalogu
finger! – wyszukuje informacje o użytkowniku
fsconf!! – program do zmian ustawień systemu plików
fsck!! – naprawa systemu plików
ftp – prosty klient ftp
gcc – kompilator języka c
gnus – przeglądarka news
grep – wyszukiwanie linii spełniających wyrażenia
gzip (*.gz) – kompresor
gzip -9v *    kompresja z maksymalną skutecznością poszczegolne pliki w katalogu, zastępując stare.
head – wyświetlanie początkowej części pliku
hello – wysylanie krótkiego tekstu na ekran adresata
host – podaje informacje o 'sieciowych’ danych dotyczączych komputera
hostname! – wyświetlanie lub zmiana nazwy komputera
hwconfig –
ipcalc – program umożliwiający operacje na adresach ip
irc – klient irc
joe – edytor tekstów
join – specjalne sklejanie plików
kernelversion – podaje informacje o wersji używanego kernela
kill – zabijanie procesów
pc – kopiuje plik
ps – zarządzanie procesami
less – przeglądarka tekstów, obustronne przewijanie
lftp – dobry klient ftp
lilo!! – boot manager (Linux Loader)
links – przeglądarka www, świetna obsługa tabel
ln! – tworzy dowiązania symboliczne tzw. linki
loadkeys – ładuje nową mapę klawiatury, np. polską
locate – odpowiednik polecenia where
logout – wylogowanie z konsoli
ls – wyświetla zawartość katalogu
lynx – przeglądarka www
make!! – kompilacja jądra
man – wyświetla podręcznik do programu podanego jako parametr
mesg – włącza i wyłącza reagowanie na wywoływania
mc – menedżer plików: midnight commander
mkdir – tworzy nowy katalog
mkfs!! – formatowanie systemu plików
more – przeglądarka tekstów, przewijanie w dół
mush – program pocztowy
mutt – rozbudowany program pocztowy i news
more – program do wyświetlania pliku na ekranie
mount!! – podłącza (montuje) systemy plików / napędy
mv – zmienia nazwe/przenosi plik
newgrp! – zmiana grupy aktualnego użytkownika
pack – prosty kompresor
passwd! – ustawianie hasła
paste – łączy wiersze pliku
pico – dość przyjazny edytor tekstowy
pine – wygodny program pocztowy
ping – wysyła pakiety testowe
procmail – narzędzie zarządzające pocztą
ps – wyświetla informacje o procesach
pwd – wyświetla ścieżkę bieżącego katalogu
quota – sprawdza/ustawia ograniczenie wielkości konta
rm – usuwa pliki
rmdir – usuwa pusty katalog
rpm!! – instaluje pakiety rpm
scp – kopiowanie zdalne plików szyfrowane
screen – otwiera nowe okna konsoli podczas pracy zdalnej
sed – edytor strumieniowy, umożliwia w zaawansowaną podmianę ciągu
setenv! – ustawia zmienna lokalna/globalna
setterm – ustawienia konsoli
sort – sortuje linie w pliku
split – tworzy jeden lub wiecej plikow z pliku wejsciowego
ssh – bezpieczny telnet tzw. secure shell
startx!! – uruchamia x-window
su!! – umożliwia prace z uprawnieniami roota
slrn – dobry klient news i pocztowy
tail – wyświetlanie końcowej części pliku
talk – wywołuje adresata na wspólną pogawędkę w czasie rzeczywistym
tar – archiwizer plików, poprawia skuteczność kompresji kompresora jak:
gzip, bzip2
np.1: tar -cz ./katalog/ >archiwum.tar.gz
np.2: tar –use-compress-program=bzip2 -c ./katalog/ >archiwum.tar.bz2
telnet – klient telnet
tin – klient poczty i news
top – wyswietla obciazenie procesora przez poszczegolne procesy
touch – uaktualnia datę pliku
tr –
umount!! – odłącza systemy plików / napędy
uniq –
unpack – rozpakowuje pliki spakowane poprzez 'pack’
unzip – rozpakowuje pliki .zip
np.: unzip -o -u plik.zip    rozpakuje do bierzącego katalogu, bez potwierdzania nadpisze stare
uptime – mowi jak dlugo jest uruchomiony komputer
w – wyświetla „kto co robi”
wc – raportuje ilość linii, słów, znaków w wyspecyfikowanych plikach
wget – ściągacz plików, obsluga ftp, http
np.: wget -r -l1 -A gif,jpg http://programy.com/lista.html
where – podaje ścieżke poszukiwanego programu
whereis – inna nazwa polecenia where
which – podaje sciezke do szukanego programu
who – informuje o zalogowanych użytkownikach
whodo – co kto robi
write – wysyłanie jednorazowo wiele linii tekstu na ekran adresata
vi – skomplikowany edytor tekstowy, dostępny w każdej odmianie unixów

 

 

Mini stacja czujników online

Spakowany sketch Arduino: Pobierz sketch Mini stacja czujników online

Wymagana biblioteka (z odpowiednimi przeróbkami): EtherCard

Podłączenie:

  • Moduł Ethernet pod złącze ICSP na Arduino (MOSI – SI, MISO – SO, SCK – SCK, GND-GND), pin CS do pinu 8, VCC do 3,3V
  • DHT11 wyjście pod pin 12
  • MQ7 wyjście analogowe pod pin A0
  • Fotorezystor pomiędzy VCC a pin A1, który ściągamy do masy rezystorem 1KΩ
  • Moduł Ethernet podpięty do routera

Aby odnaleźć IP, pod którym widnieje nasz układ proponuję zalogować się do panelu administracyjnego routera, u mnie była to zakładka/okienko „DHCP Client List”. Odczyt z czujnika tlenku węgla w normalnych warunkach wynosi poniżej 50 (<250mV). Potraktowanie go jakimikolwiek oparami powoduje szybką reakcję i skok napięcia powyżej 1V (przy bliskim rozpyleniu).

 

Mój pierwszy robot Arduino

Kod źródłowy:

//ROBOT jeżdżący
//LCD I2C; 2x silniki, sonarr HC-SR04, tsop4836 RC5
//Piny:
/*
12: Silnik prawy kierunek;
11: Silnik prawy PWM;
4: Silnik lewy kierunek;
5: Silnik lewy PWM;
8: Sonar Echo;
9: Sonar trig;
10: TSOP4836;
SDA/SCL:  LCD 16x2;

*/
#include <Wire.h>  // Comes with Arduino IDE
#include <FastIO.h>
#include <I2CIO.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#include <LiquidCrystal_SR.h>
#include <LiquidCrystal_SR2W.h>
#include <LiquidCrystal_SR3W.h>



LiquidCrystal_I2C lcd(0x20, 4, 5, 6, 0, 1, 2, 3, 7, POSITIVE);  // Set the LCD I2C address
const int echo = 8;
const int trig = 9;
long duration, cm;

void setup(){
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(8, INPUT);
  pinMode(9, OUTPUT);
  pinMode(10, INPUT);

  analogWrite(6,0);
  analogWrite(5,0);
  digitalWrite(7,LOW);
  digitalWrite(4,LOW);
  digitalWrite(9,LOW);
  
  lcd.begin(16,2);         // initialize the lcd for 20 chars 4 lines]
  lcd.setBacklightPin(7, NEGATIVE);
  lcd.setBacklight(0);
// NOTE: Cursor Position: CHAR, LINE) start at 0  
  lcd.setCursor(0,0); //Start at character 4 on line 0
  lcd.print("ROBOT! 4");


}
void loop(){
int wynik;
lcd.setCursor(0,1);
lcd.print("L:           ");
lcd.setCursor(3,1);
wynik = pomiar();
if(wynik<3000){
  lcd.print(wynik);
  
    if(wynik<30)
    {
      digitalWrite(7,LOW);
      digitalWrite(4,LOW);
      analogWrite(6,255);
      analogWrite(5,255);
    }
    if((wynik>30) && (wynik<80))
    {
      digitalWrite(7,LOW);
      digitalWrite(4,LOW);
      analogWrite(6,0);
      analogWrite(5,0);
    }

    if(wynik>50)
    {
      digitalWrite(7,HIGH);
      digitalWrite(4,HIGH);
      analogWrite(6,0);
      analogWrite(5,0);
    }


}
delay(10);


}
int pomiar(void)
{
  pinMode(trig, OUTPUT);
  digitalWrite(trig, LOW);
  delayMicroseconds(2);
  digitalWrite(trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(trig, LOW);
   
  // Read the signal from the sensor: a HIGH pulse whose
  // duration is the time (in microseconds) from the sending
  // of the ping to the reception of its echo off of an object.
  pinMode(echo, INPUT);
  duration = pulseIn(echo, HIGH);
  return microsecondsToCentimeters(duration);
}

int microsecondsToCentimeters(long microseconds)
{
// The speed of sound is 340 m/s or 29 microseconds per centimeter.
// The ping travels out and back, so to find the distance of the
// object we take half of the distance travelled.
return microseconds / 29 / 2;
}

Walidacja numerów PESEL, NIP, REGON w Javascript i PHP

Ulepszone funkcje z tego wpisu. Aktualnie funkcje sprawdzają także sumy kontrolne zawarte w tych numerach, na podstawie Wikipedii. Wystarczy przeanalizować kody

Odmiany funkcji w Javascript i PHP są w pełni zgodne, to znaczy że dadzą taką samą odpowiedź.

Aktualizacja 2017-05-02:

  • Zamieniłem polskie nazwy zmiennych na angielskie;
  • Funkcje od PESEL sprawdzają czy data jest poprawna, tj. miesiąc nie większy niż 12 i dzień miesiąca nie większy niż 31. To rozwiązuje problemy opisane w komentarzach. Dziękuję za zwrócenie uwagi i dziękuję Panu Krzysztofowi Grabania za propozycję rozwiązania problemu.
  • Poprawione wcięcia itp.
  • Dodane formularze, gdzie można sobie potestować jak działają funkcje w wersji JS. Wersje PHP: http://test.vt0.pl/v/

Oczywiście jeśli użytkownik będzie chciał, to i tak da radę wprowadzić nieprawdziwe dane, ale dzięki tej walidacji uchronimy się przed omyłkowym wpisaniem danych z błędami w formularzu.

1. Walidacja PESEL:

Kod PHP:

function validatepesel($pesel) {
    $reg = '/^[0-9]{11}$/';
    if(preg_match($reg, $pesel)==false)
        return false;
    else
    {
        $digits = str_split($pesel);
        if ((intval(substr($pesel, 4, 2)) > 31)||(intval(substr($pesel, 2, 2)) > 12))
            return false;
        $checksum = (1*intval($digits[0]) + 3*intval($digits[1]) + 7*intval($digits[2]) + 9*intval($digits[3]) + 1*intval($digits[4]) + 3*intval($digits[5]) + 7*intval($digits[6]) + 9*intval($digits[7]) + 1*intval($digits[8]) + 3*intval($digits[9]))%10;
        if($checksum == 0) 
            $checksum = 10;
        $checksum = 10 - $checksum;
            
        return (intval($digits[10]) == $checksum);
    }
}

Kod Javascript:

function validatepesel(pesel) {
    var reg = /^[0-9]{11}$/;
    if(reg.test(pesel) == false) 
        return false;
    else
    {
        var digits = (""+pesel).split("");
        if ((parseInt(pesel.substring( 4, 6)) > 31)||(parseInt(pesel.substring( 2, 4)) > 12))
            return false;
        
        var checksum = (1*parseInt(digits[0]) + 3*parseInt(digits[1]) + 7*parseInt(digits[2]) + 9*parseInt(digits[3]) + 1*parseInt(digits[4]) + 3*parseInt(digits[5]) + 7*parseInt(digits[6]) + 9*parseInt(digits[7]) + 1*parseInt(digits[8]) + 3*parseInt(digits[9]))%10;
        if(checksum==0) checksum = 10;
            checksum = 10 - checksum;

        return (parseInt(digits[10])==checksum);
    }
}

Test:

READY

2.Walidacja NIP

Kod PHP:

function validatenip($nip) {
    $nipWithoutDashes = preg_replace("/-/","",$nip);
    $reg = '/^[0-9]{10}$/';
    if(preg_match($reg, $nipWithoutDashes)==false)
        return false;
    else
    {
        $digits = str_split($nipWithoutDashes);
        $checksum = (6*intval($digits[0]) + 5*intval($digits[1]) + 7*intval($digits[2]) + 2*intval($digits[3]) + 3*intval($digits[4]) + 4*intval($digits[5]) + 5*intval($digits[6]) + 6*intval($digits[7]) + 7*intval($digits[8]))%11;

        return (intval($digits[9]) == $checksum);
    }
}

Kod Javascript:

function validatenip(nip) {
    var nipWithoutDashes = nip.replace(/-/g,"");
    var reg = /^[0-9]{10}$/;
    if(reg.test(nipWithoutDashes) == false) {
        return false;}
    else
    {
        var digits = (""+nipWithoutDashes).split("");
        var checksum = (6*parseInt(digits[0]) + 5*parseInt(digits[1]) + 7*parseInt(digits[2]) + 2*parseInt(digits[3]) + 3*parseInt(digits[4]) + 4*parseInt(digits[5]) + 5*parseInt(digits[6]) + 6*parseInt(digits[7]) + 7*parseInt(digits[8]))%11;
        
        return (parseInt(digits[9])==checksum);
    }
}

Test:

READY

3. Walidacja REGON (9-cyfrowy):

Kod PHP:

function validateregon9($regon) {
    $reg = '/^[0-9]{9}$/';
    if(preg_match($reg, $regon)==false)
        return false;
    else
    {
        $digits = str_split($regon);
        $checksum = (8*intval($digits[0]) + 9*intval($digits[1]) + 2*intval($digits[2]) + 3*intval($digits[3]) + 4*intval($digits[4]) + 5*intval($digits[5]) + 6*intval($digits[6]) + 7*intval($digits[7]))%11;
        if($checksum == 10) 
            $checksum = 0;

        return (intval($digits[8]) == $checksum);
    }
}

Kod Javascript:

function validateregon9(regon) {
    var reg = /^[0-9]{9}$/;
    if(!reg.test(regon)) 
        return false;
    else
    {
        var digits = (""+regon).split("");
        var checksum = (8*parseInt(digits[0]) + 9*parseInt(digits[1]) + 2*parseInt(digits[2]) + 3*parseInt(digits[3]) + 4*parseInt(digits[4]) + 5*parseInt(digits[5]) + 6*parseInt(digits[6]) + 7*parseInt(digits[7]))%11;
        if(checksum == 10) 
            checksum = 0;
        
        return (parseInt(digits[8])==checksum);
    }
}

Test:

READY

Mini odbiornik podczerwieni na ATTINY10

Malutki, zasilany z jednej bateryjki CR1220 odbiornik kodu RC5 dekodowany za pomocą AVR ATTiny10. Układ steruje dwiema diodami w trybie włącz/wyłącz. W celu uniknięcia niezamierzonych zmian stanów na wyjściach, odczytywany jest bit Toggle z ramki RC5.
Inspiracja: http://www.youtube.com/watch?v=ghtCYlqUlWQ
Wiedza: http://mikrokontrolery.blogspot.com/2011/03/IR-podczerwien-transmisja-standard-pilot-kurs.html
Wsparcie:http://www.elektroda.pl/rtvforum/viewtopic.php?t=2651455&highlight=
Kody źródłowe C Atmel Studio 6.1

tiny10_ir PCB do termotransferu

Porównanie Atmega8 Atmega8A Atmega88 Atmega88PA

Aby nie kupować dinozaurów. Dane, które ciężko znaleźć w takiej formie.

Atmega8
Atmega8A
Atmega88
Atmega88PA
4,5-5,5V
2,7-5,5V
2,7-5,5V
1,8-5,5V
0-16MHz
0-16MHz
0-10MHz; 0-20MHz@4,5-5,5V
0-20MHz
3xPWM
3xPWM
6xPWM
6xPWM
5 sleep modes
5 sleep modes
5 sleep modes
6 sleep modes
PCINT
PCINT
Sensor temperatury
Active: 3,6mA
Active: 3,6mA
Active: 250uA@1MHz
Active: 0,2mA(200uA)
Idle: 1,0mA
Idle: 1,0mA
PowerDown: 0,5uA
PowerDown: 0,5uA
PowerDown: 0,1uA
PowerDown: 0,1uA
Qtouch support
Qtouch support
UART in SPI mode
UART in SPI mode
Vref 2,56V
2,56V
1,1V
1,1V
3,44zł TQFP32
3,98zł TQFP32
6,52zł TQFP32
5,40zł TQFP32
Porównanie parametrów mikrokontrolerów Atmega8XXX

Proszę o pomoc w rozbudowie tabelki.

Detektor promieniowania – prototyp

Konstruuję aktualnie licznik Geigera. Udało mi się nabyć na aukcji tubę STS-5 (CTC-5) która służy za detektor promieniowania (głównie beta). Tuba tak wymaga zasilania stałym napięciem ok. 400V, jednak pobiera bardzo mało prądu, i to tylko podczas detekcji. Złożyłem więc prototyp, który o wykryciu cząstki informuje charakterystycznym trzaskiem i mignięciem diodą LED.

W docelowej konstrukcji znajdzie się któraś Atmega (8 lub 88), wyświetlacz LCD 16×2 i wykonana płytka drukowana. Jako obudowę planuję użyć CP-Z-97/B.
Dodam jeszcze, że w projekcie przetwornicy bardzo pomógł mi użytkownik portalu Elektroda.pl psooya.